Source code for finam.tools.enum_helper
"""Enum conversion helper."""
from enum import Enum
[docs]
def get_enum_value(value, enum_cls, error=ValueError):
"""
Convert value to corresponding enum value.
Parameters
----------
value : any
Value to convert to enum value.
enum_cls : Enum
Enumeration class to get value from.
error : Exception, optional
Error to raise if value is not present in enum class,
by default ValueError
Returns
-------
enum
Corresponding Enum value.
Raises
------
ValueError
If enum_cls is not a subclass of Enum
error
If value couldn't be found in given enum class.
"""
if not isinstance(enum_cls, type) or not issubclass(enum_cls, Enum):
raise ValueError(f"Class is not of type Enum: {enum_cls}")
if value in list(enum_cls) and not issubclass(enum_cls, int):
return value
if value in [e.value for e in enum_cls]:
return enum_cls(value)
if value in [e.name for e in enum_cls]:
return enum_cls[value]
raise error(f"Unknown {enum_cls.__name__} value '{value}'")