From 7a8fa6a57215aa3fb758744924cb4a647191660d Mon Sep 17 00:00:00 2001 From: Eva Date: Wed, 5 Jun 2024 14:10:50 +0100 Subject: [PATCH] WIP: making suggested changes --- src/ophyd_async/core/signal_backend.py | 7 +++++-- src/ophyd_async/epics/_backend/common.py | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ophyd_async/core/signal_backend.py b/src/ophyd_async/core/signal_backend.py index f42f198d58..dc42abd8dc 100644 --- a/src/ophyd_async/core/signal_backend.py +++ b/src/ophyd_async/core/signal_backend.py @@ -1,6 +1,7 @@ from abc import abstractmethod from typing import ( TYPE_CHECKING, + ClassVar, Dict, FrozenSet, Generic, @@ -66,7 +67,7 @@ class _RuntimeEnumMeta(type): def __str__(cls): if hasattr(cls, "_choices"): - return f"RuntimeEnum{list(cls._choices.keys())}" + return f"RuntimeEnum{list(cls.choices)}" return "RuntimeEnum" @property @@ -94,11 +95,13 @@ def __getitem__(cls, choices): # Create a new enum subclass class _RuntimeEnum(cls): - _choices = {choice: choice for choice in choices} + choices = choices_frozenset _RuntimeEnumMeta.__enum_classes_created[choices_frozenset] = _RuntimeEnum return _RuntimeEnum class RuntimeEnum(metaclass=_RuntimeEnumMeta): + choices: ClassVar[FrozenSet[str]] + def __init__(self): raise RuntimeError("RuntimeEnum cannot be instantiated") diff --git a/src/ophyd_async/epics/_backend/common.py b/src/ophyd_async/epics/_backend/common.py index 36b2f79d72..b05f265357 100644 --- a/src/ophyd_async/epics/_backend/common.py +++ b/src/ophyd_async/epics/_backend/common.py @@ -13,7 +13,7 @@ def get_supported_values( return {x: x or "_" for x in pv_choices} if issubclass(datatype, RuntimeEnum): - pv_choices = datatype.choices + assert frozenset(pv_choices).issubset(datatype.choices) elif not issubclass(datatype, str): raise TypeError(f"{pv} is type Enum but doesn't inherit from String") elif issubclass(datatype, Enum):