From ca5e8d2fbbffbf221cc5472710fef81a33ee29d6 Mon Sep 17 00:00:00 2001 From: appel_c Date: Wed, 5 Jun 2024 19:37:16 +0200 Subject: [PATCH] fix: add model_config to pydantic models to allow runtime checks after creation --- bec_widgets/cli/auto_updates.py | 1 + bec_widgets/utils/bec_connector.py | 1 + bec_widgets/widgets/figure/plots/image/image_processor.py | 1 + bec_widgets/widgets/figure/plots/plot_base.py | 1 + bec_widgets/widgets/figure/plots/waveform/waveform_curve.py | 2 ++ bec_widgets/widgets/spiral_progress_bar/ring.py | 1 + 6 files changed, 7 insertions(+) diff --git a/bec_widgets/cli/auto_updates.py b/bec_widgets/cli/auto_updates.py index de77f799..f6f2f865 100644 --- a/bec_widgets/cli/auto_updates.py +++ b/bec_widgets/cli/auto_updates.py @@ -15,6 +15,7 @@ class ScanInfo(BaseModel): scan_report_devices: list monitored_devices: list status: str + model_config: dict = {"validate_assignment": True} class AutoUpdates: diff --git a/bec_widgets/utils/bec_connector.py b/bec_widgets/utils/bec_connector.py index 32e16db2..201a4782 100644 --- a/bec_widgets/utils/bec_connector.py +++ b/bec_widgets/utils/bec_connector.py @@ -20,6 +20,7 @@ class ConnectionConfig(BaseModel): gui_id: Optional[str] = Field( default=None, validate_default=True, description="The GUI ID of the widget." ) + model_config: dict = {"validate_assignment": True} @field_validator("gui_id") def generate_gui_id(cls, v, values): diff --git a/bec_widgets/widgets/figure/plots/image/image_processor.py b/bec_widgets/widgets/figure/plots/image/image_processor.py index 52dc5b7b..7580ad47 100644 --- a/bec_widgets/widgets/figure/plots/image/image_processor.py +++ b/bec_widgets/widgets/figure/plots/image/image_processor.py @@ -19,6 +19,7 @@ class ProcessingConfig(BaseModel): rotation: Optional[int] = Field( None, description="The rotation angle of the monitor data before displaying." ) + model_config: dict = {"validate_assignment": True} class ImageProcessor: diff --git a/bec_widgets/widgets/figure/plots/plot_base.py b/bec_widgets/widgets/figure/plots/plot_base.py index 0fd50623..694a289a 100644 --- a/bec_widgets/widgets/figure/plots/plot_base.py +++ b/bec_widgets/widgets/figure/plots/plot_base.py @@ -20,6 +20,7 @@ class AxisConfig(BaseModel): y_lim: Optional[tuple] = Field(None, description="The limits of the y-axis.") x_grid: bool = Field(False, description="Show grid on the x-axis.") y_grid: bool = Field(False, description="Show grid on the y-axis.") + model_config: dict = {"validate_assignment": True} class SubplotConfig(ConnectionConfig): diff --git a/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py b/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py index 59a89b76..35d3c7ef 100644 --- a/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +++ b/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py @@ -17,6 +17,7 @@ class SignalData(BaseModel): unit: Optional[str] = None # todo implement later modifier: Optional[str] = None # todo implement later limits: Optional[list[float]] = None # todo implement later + model_config: dict = {"validate_assignment": True} class Signal(BaseModel): @@ -26,6 +27,7 @@ class Signal(BaseModel): x: SignalData # TODO maybe add metadata for config gui later y: SignalData z: Optional[SignalData] = None + model_config: dict = {"validate_assignment": True} class CurveConfig(ConnectionConfig): diff --git a/bec_widgets/widgets/spiral_progress_bar/ring.py b/bec_widgets/widgets/spiral_progress_bar/ring.py index 6224fe26..cf61425d 100644 --- a/bec_widgets/widgets/spiral_progress_bar/ring.py +++ b/bec_widgets/widgets/spiral_progress_bar/ring.py @@ -13,6 +13,7 @@ from bec_widgets.utils import BECConnector, ConnectionConfig class RingConnections(BaseModel): slot: Literal["on_scan_progress", "on_device_readback"] = None endpoint: EndpointInfo | str = None + model_config: dict = {"validate_assignment": True} @field_validator("endpoint") def validate_endpoint(cls, v, values):