You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.4 KiB

# -*- coding: utf-8 -*-
#
from django.utils.translation import gettext_lazy as _
from common.db.fields import BitChoices
from common.utils.integer import bit
__all__ = ["ActionChoices"]
class ActionChoices(BitChoices):
connect = bit(1), _("Connect (All protocols)")
upload = bit(2), _("Upload (RDP, SFTP)")
download = bit(3), _("Download (RDP, SFTP)")
copy = bit(4), _("Copy (RDP, VNC)")
paste = bit(5), _("Paste (RDP, VNC)")
delete = bit(6), _("Delete (SFTP)")
share = bit(7), _("Share (SSH)")
@classmethod
def is_tree(cls):
return True
@classmethod
def branches(cls):
return (
cls.connect,
(_("Transfer"), [cls.upload, cls.download, cls.delete]),
(_("Clipboard"), [cls.copy, cls.paste]),
cls.share
)
@classmethod
def transfer(cls):
return cls.upload | cls.download | cls.delete
@classmethod
def clipboard(cls):
return cls.copy | cls.paste
@classmethod
def contains(cls, total, action_value):
return action_value & total == action_value
@classmethod
def contains_all(cls, total, action_values):
return all(cls.contains(total, action) for action in action_values)
@classmethod
def display(cls, value):
return ', '.join([str(c.label) for c in cls if c.value & value == c.value])