-
Notifications
You must be signed in to change notification settings - Fork 220
Description
With reference to #509 - lots of classes depend on an instance of class Network and have it as an attribute in order to communicate with the CAN bus. Examples are SdoBase(), PdoBase(), NmtBase() and others. Their constructor does not require a Network argument so the formal type of the attribute is network: Optional[Network] = None.
These attributes are set when a RemoteNode() is created and the reference to the network is injected from RemoteNode.associate_network().
The effect of this is that we'll need a lot of checks all over the code to ensure network is properly set. E.g. as here from class EmcyProducer:
def send(self, code: int, register: int = 0, data: bytes = b""):
payload = EMCY_STRUCT.pack(code, register, data)
if self.network is None: # This is needed to not fail the send_message line
raise RuntimeError("A Network is required")
self.network.send_message(self.cob_id, payload)Is is a requirement to be able to create these class instances without a functional Network? We could make a default Network-like object that will emulate network operations if we need it to work without an actual CAN bus network.
What do you think we should do here?