Source code for jammy.utils.enum
import six
import enum
__all__ = ["JamEnum"]
[docs]class JamEnum(enum.Enum):
"""A customized enumeration class, adding helper functions for string-based argument parsing."""
[docs] @classmethod
def from_string(cls, value):
value = _canonize_enum_value(value, True)
if isinstance(value, six.string_types) and hasattr(cls, value):
return getattr(cls, value)
value = _canonize_enum_value(value)
return cls(value)
[docs] @classmethod
def choice_names(cls):
return list(filter(lambda x: not x.startswith("_"), dir(cls)))
[docs] @classmethod
def choice_objs(cls):
return [getattr(cls, name) for name in cls.choice_names()]
[docs] @classmethod
def choice_values(cls):
return [getattr(cls, name).value for name in cls.choice_names()]
[docs] @classmethod
def is_valid(cls, value):
value = _canonize_enum_value(value)
return value in cls.choice_values()
[docs] @classmethod
def assert_valid(cls, value):
assert cls.is_valid(value), 'Invalid {}: "{}". Supported choices: {}.'.format(
cls.type_name(), value, ",".join(cls.choice_values())
)
def __jsonify__(self):
return self.value
def _canonize_enum_value(value, cap=False):
if isinstance(value, six.string_types):
if cap:
value = value.upper()
else:
value = value.lower()
return value