Source code for raspyrfm_client.device_implementations.controlunit.base

"""
Base class for all controlunit implementations
"""

import re

from raspyrfm_client.device_implementations.controlunit.actions import Action
from raspyrfm_client.device_implementations.controlunit.controlunit_constants import ControlUnitModel
from raspyrfm_client.device_implementations.manufacturer_constants import Manufacturer


[docs] class ControlUnit(object): def __init__(self, manufacturer: Manufacturer, model: ControlUnitModel): self._manufacturer = manufacturer self._model = model self._channel = None def __str__(self): return ("Manufacturer: " + self._manufacturer.value + "\n" + "Model: " + self._model.value + "\n" + "Supported Actions: " + str(self.get_supported_actions()) + "\n" + "Channel: " + str(self.get_channel_config()))
[docs] def get_manufacturer(self) -> Manufacturer: """ :return: the device manufacturer """ return self._manufacturer
[docs] def get_model(self) -> ControlUnitModel: """ :return: the device model """ return self._model
[docs] def set_channel_config(self, **channel_arguments) -> None: """ Sets the channel as multiple arguments. See implementation specific details about how the channel should be passed in. :param channel_arguments: """ argchecks = self.get_channel_config_args() for arg in argchecks: if arg not in channel_arguments: raise ValueError("arguments should contain key \"" + arg + "\"") if re.match(argchecks[arg], str(channel_arguments[arg])) is None: raise ValueError("argument \"" + arg + "\" out of range, does not match to " + argchecks[arg]) self._channel = channel_arguments
[docs] def get_channel_config_args(self): """ gets required config arguments and their regular expression to check the erguments has to be implemented by inheriting classes :return: dictionary of arguments example: {"ID": "^[A-F]$", "CH": "^[1-4]$"} """ raise NotImplementedError
[docs] def get_channel_config(self) -> dict or None: """ :return: the channel setup as a dict """ return self._channel
[docs] def get_supported_actions(self) -> [Action]: """ :return: the supported actions of this device """ raise NotImplementedError
[docs] def get_pulse_data(self, action: Action): """ generates pulse data :return: (pulse pairs, repetitions, timebase) """ raise NotImplementedError