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!")