DAQ: added runtime protocols
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user