vban-cmd-python/vbancmd/command.py

50 lines
1.4 KiB
Python
Raw Normal View History

import abc
from .errors import VMCMDErrors
from .meta import action_prop
class ICommand(abc.ABC):
""" Command Base Class """
def __init__(self, remote):
self._remote = remote
def setter(self, param, val):
""" Sends a string request RT packet. """
self._remote.set_rt(f'{self.identifier}', param, val)
@abc.abstractmethod
def identifier(self):
pass
class Command(ICommand):
""" Command Concrete Class """
@classmethod
def make(cls, remote):
"""
Factory function for command class.
Returns a Command class of a kind.
"""
CMD_cls = type(f'Command{remote.kind.name}', (cls,), {
**{param: action_prop(param)
for param in ['show', 'shutdown', 'restart']},
'hide': action_prop('show', val=0),
})
return CMD_cls(remote)
@property
def identifier(self) -> str:
return 'Command'
def set_showvbanchat(self, val: bool):
if not isinstance(val, bool) and val not in (0,1):
raise VMCMDErrors('showvbanchat is a boolean parameter')
self.setter('DialogShow.VBANCHAT', 1 if val else 0)
showvbanchat = property(fset=set_showvbanchat)
def set_lock(self, val: bool):
if not isinstance(val, bool) and val not in (0,1):
raise VMCMDErrors('lock is a boolean parameter')
self.setter('lock', 1 if val else 0)
lock = property(fset=set_lock)