Source code for pymodaq_utils.enums

import sys

if sys.version_info < (3, 11):
    from strenum import StrEnum as _StrEnum
else:
    from enum import StrEnum as _StrEnum

from enum import Enum, auto   # noqa  # pylint: disable=unused-import
from typing import List, Type, TypeVar, 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)
EnumT = TypeVar('EnumT', bound=BaseEnum)
[docs] def enum_checker(enum: Type[EnumT], item: Union[EnumT, str]) -> EnumT: """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 The member of the ``enum`` class corresponding to item """ 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