from abc import ABCMeta, abstractmethod import uuid class ModuleList(): def __init__(self): self._modules = [] def add_module(self, module): assert isinstance(module, Module), 'invalid module' if module in self._modules: raise ValueError('Module %s already in database' % module) else: self._modules.append(module) def remove_module(self, module): assert isinstance(Module, module), 'invalid module' try: self._module.remove(module) except ValueError: raise ValueError('Module %s is not in database' % module) def lookup_module(self, uuid): for module in self._modules: if module.uuid == uuid: return module def new_module(self, device_type, address, interface): if device_type == 0x01: module = AirSenseModule(device_type, address, interface) elif device_type == 0x02: module = RelayDriveModule(device_type, address, interface) else: module = UnknownModule(device_type, address, interface) self.add_module(module) return module class Module(metaclass=ABCMeta): def __init__(self, device_type, address, interface): self.device_type = device_type self.address = address self.interface = interface self.uuid = uuid.uuid1() print("Created new module! " + str(self.uuid)) @abstractmethod def send_message(self): pass @abstractmethod def receive_message(self): pass class AirSenseModule(Module): def __init__(self, device_type, address, interface): super(AirSenseModule, self).__init__(device_type, address, interface) def send_message(self): message = None self.interface.network.send_message(message) def receive_message(self): print("AirSenseModule receive message!") class RelayDriveModule(Module): def __init__(self, device_type, address, interface): super(RelayDriveModule, self).__init__(device_type, address, interface) def send_message(self): pass def receive_message(self): print("RelayDriveModule receive message!") class UnknownModule(Module): def __init__(self, device_type, address, interface): super(UnknownModule, self).__init__(device_type, address, interface) def send_message(self): pass def receive_message(self): print("UnknownModule receive message!")