-
Notifications
You must be signed in to change notification settings - Fork 214
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?