Source code for pymodaq_utils.enums

import platform
from packaging.version import Version

if Version(platform.python_version()) < Version('3.11'):
    from strenum import StrEnum   # noqa  # pylint: disable=unused-import
else:
    from enum import StrEnum   # noqa  # pylint: disable=unused-import

from enum import Enum
from typing import List, Union


[docs] class StrEnum(StrEnum): #to be imported in other modules
[docs] @classmethod def names(cls) -> List[str]: """Returns all the names of the enum""" return list(cls.__members__.keys())
[docs] @classmethod def values(cls) -> List[str]: """Returns all the names of the enum""" return [cls[name].value for name in cls.names()]
[docs] class BaseEnum(Enum): """Enum to be used within pymodaq with some utility methods"""
[docs] @classmethod def names(cls) -> List[str]: """Returns all the names of the enum""" return list(cls.__members__.keys())
[docs] @classmethod def values(cls) -> List[str]: """Returns all the names of the enum""" return [cls[name].value for name in cls.names()]
[docs] @classmethod def to_dict(cls): """ Returns the enum in form of a dict with names os keys New in 4.0.2 """ return {name: cls[name].value for name in cls.names()}
[docs] @classmethod def to_dict_value(cls): """ Returns the enum in form of a dict with values os keys New in 4.0.2 """ return {cls[name].value: name for name in cls.names()}
def __eq__(self, other: Union[str, Enum]): """testing for equality using the enum name""" if isinstance(other, str): if other == self.name: return True return super().__eq__(other)
[docs] def enum_checker(enum: BaseEnum, item: Union[BaseEnum, str]): """Check if the item parameter is a valid enum or at least one valid string name of the enum If a string, transforms it to a valid enum (case not important) Parameters ---------- enum: BaseEnum class or one of its derivated class item: str or BaseEnum instance Returns ------- BaseEnum class or one of its derivated class """ if not isinstance(item, enum): if not isinstance(item, str): raise ValueError(f'{item} is an invalid {enum}. Should be a {enum} enum or ' f'a string in {enum.names()}') for ind, name in enumerate(enum.names()): if item.lower() == name.lower(): item = enum[name] break else: raise ValueError(f'{item} is an invalid {enum}. Should be a {enum} enum or ' f'a string in {enum.names()}') return item