DAQ: added runtime protocols

This commit is contained in:
2026-05-22 15:23:03 +02:00
parent 9d973a0751
commit 362c8a2977
+95
View File
@@ -0,0 +1,95 @@
from dataclasses import dataclass
from typing import Protocol
from aare.common.models import DAQStatusModel, SampleShortInfo
from aare.common.sample_geometry import SampleGeometryModel
from aare.daq.config import BeamlineStateEnum
from aare.daq.operations.screenshot.service import ScreenshotService
class SampleProvider(Protocol):
@property
def sample(self) -> SampleShortInfo | None: ...
class SampleGeometryProvider(Protocol):
@property
def sample_geometry(self) -> SampleGeometryModel: ...
class StatusProvider(Protocol):
@property
def status(self) -> DAQStatusModel: ...
class StateSetter(Protocol):
def set_state(self, target: BeamlineStateEnum) -> None: ...
class SmargonTraceAppender(Protocol):
def append_smargon_trace(self, *, sample_id: int | None, event: str) -> None: ...
class PredictionGetter(Protocol):
def get_predictions(self): ...
class FaceDetectionProgressReporter(Protocol):
def emit_progress(self, payload: dict) -> None: ...
@dataclass
class DAQRuntimeState:
sample_provider: SampleProvider
sample_geometry_provider: SampleGeometryProvider
status_provider: StatusProvider
@property
def sample(self) -> SampleShortInfo | None:
return self.sample_provider.sample
@property
def sample_geometry(self) -> SampleGeometryModel:
return self.sample_geometry_provider.sample_geometry
@property
def status(self) -> DAQStatusModel:
return self.status_provider.status
@dataclass
class StateController:
setter: StateSetter
def set_state(self, target: BeamlineStateEnum) -> None:
self.setter.set_state(target)
@dataclass
class TraceWriter:
appender: SmargonTraceAppender
def append_smargon_trace(self, *, sample_id: int | None, event: str) -> None:
self.appender.append_smargon_trace(sample_id=sample_id, event=event)
@dataclass
class PredictionProvider:
getter: PredictionGetter
def get_predictions(self):
return self.getter.get_predictions()
@dataclass
class FaceDetectionProgressEmitter:
reporter: FaceDetectionProgressReporter
def emit_progress(self, payload: dict) -> None:
self.reporter.emit_progress(payload)
@dataclass
class OperationServices:
screenshots: ScreenshotService