Initial DeriveUnit implementation

This contains the initial DeriveUnit implementation, including signature
validation, this initial implentation only supports ValueDescriptors in
the signature alongside the SignalDescriptor and returns a single
ValueDescriptor

The worker thread still needs to be defined and started but the offline
processing has already been validate to work as a first prototype
This commit is contained in:
2026-08-23 12:27:58 +01:00
parent ebe7e92e22
commit d9570cd153
4 changed files with 166 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
from uuid import uuid4
from dynalab_core.derive import DeriveUnit
from dynalab_core.protocols.packets.data import ValueDescriptor
from dynalab_core.protocols.packets.handshake import SignalDescriptor
def process(
a: ValueDescriptor,
b: ValueDescriptor,
r: SignalDescriptor,
) -> ValueDescriptor:
val = ValueDescriptor(
signal_id=r.id, value=a.value + b.value, timestamp=a.timestamp
)
return val
sig_a = SignalDescriptor(
id=uuid4(),
name="Signal A",
type="number",
)
sig_b = SignalDescriptor(
id=uuid4(),
name="Signal A",
type="number",
)
sig_r = SignalDescriptor(
id=uuid4(),
name="Signal R",
type="number",
)
unit = DeriveUnit(uuid4(), process, [sig_a, sig_b], sig_r)
val_a = ValueDescriptor(signal_id=sig_a.id, value=1, timestamp=0)
val_b = ValueDescriptor(signal_id=sig_a.id, value=2, timestamp=10)
print(unit.process_offline([val_a, val_b]))