Document how a connector handles a device that decides its own ports
An undeclared key fails the whole reading, so a connector whose ports vary by model has to narrow what it publishes to what was bound. Names the idiom and the once-not-per-poll rule for saying a declared port is missing.
This commit is contained in:
@@ -97,6 +97,27 @@ optional `interval`.
|
|||||||
output port publishes at most every *n* seconds, an input port wakes its node
|
output port publishes at most every *n* seconds, an input port wakes its node
|
||||||
at most that often. A connector should poll at the rate the device is
|
at most that often. A connector should poll at the rate the device is
|
||||||
comfortable with and leave delivery rates to whoever wires it up.
|
comfortable with and leave delivery rates to whoever wires it up.
|
||||||
|
- A key no port declares is an error, and it fails the whole reading rather
|
||||||
|
than the one value — a mistyped metric name is how a training curve goes
|
||||||
|
missing.
|
||||||
|
|
||||||
|
### When the device decides what the ports are
|
||||||
|
|
||||||
|
A connector for a device whose readings vary by model — which components a
|
||||||
|
relay has, which entities were flashed onto a board — cannot know its ports in
|
||||||
|
advance, and returning everything the device reports would fail on the first
|
||||||
|
value nobody bound. Narrow the reading to the ports that were declared:
|
||||||
|
|
||||||
|
```python
|
||||||
|
declared = {spec.port for spec in self.output_ports if spec.name}
|
||||||
|
return {port: value for port, value in reading.items() if port in declared}
|
||||||
|
```
|
||||||
|
|
||||||
|
`spec.port` is the local, unqualified name and stays that way for the node's
|
||||||
|
whole life, so the set can be taken fresh each time. Say something in the log
|
||||||
|
when a declared port is not one the device has — once, not once per poll: from
|
||||||
|
the canvas a renamed entity and a typo look the same, and both leave a port
|
||||||
|
silent forever.
|
||||||
|
|
||||||
## Polling
|
## Polling
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user