From 43b747ec8a761530d78b26650b0ec2ee4581ffaf Mon Sep 17 00:00:00 2001 From: appel_c Date: Wed, 19 Mar 2025 15:33:22 +0100 Subject: [PATCH] fix(device_input_base): removed enums from Pydantic models to make them serialisable --- .../base_classes/device_input_base.py | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py b/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py index 0798a42b..a221121f 100644 --- a/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py +++ b/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py @@ -5,6 +5,7 @@ import enum from bec_lib.device import ComputedSignal, Device, Positioner, ReadoutPriority from bec_lib.device import Signal as BECSignal from bec_lib.logger import bec_logger +from pydantic import field_validator from qtpy.QtCore import Property, Signal, Slot from bec_widgets.utils import ConnectionConfig @@ -25,13 +26,35 @@ class BECDeviceFilter(enum.Enum): class DeviceInputConfig(ConnectionConfig): - device_filter: list[BECDeviceFilter] = [] - readout_filter: list[ReadoutPriority] = [] + device_filter: list[str] = [] + readout_filter: list[str] = [] devices: list[str] = [] default: str | None = None arg_name: str | None = None apply_filter: bool = True + @field_validator("device_filter") + @classmethod + def check_device_filter(cls, v, values): + valid_device_filters = [entry.value for entry in BECDeviceFilter] + for filt in v: + if filt not in valid_device_filters: + raise ValueError( + f"Device filter {filt} is not a valid device filter {valid_device_filters}." + ) + return v + + @field_validator("readout_filter") + @classmethod + def check_readout_filter(cls, v, values): + valid_device_filters = [entry.value for entry in ReadoutPriority] + for filt in v: + if filt not in valid_device_filters: + raise ValueError( + f"Device filter {filt} is not a valid device filter {valid_device_filters}." + ) + return v + class DeviceInputBase(BECWidget): """