Source code for devana.utility.fakeenum

[docs]class FakeEnum(type): """Helper metaclass for provide enums with variable values in instance-level (standard enum do it in class-level). You must provide enum_source argument.""" def __new__(mcs, name, bases, args): result = type.__new__(mcs, name, bases, args) result.__enum_source__ = args["enum_source"] return result def __getattribute__(cls, item): enum_source = type.__getattribute__(cls, "__enum_source__") available_enums = [e.name for e in list(enum_source)] if item in available_enums: enum = getattr(enum_source, item) return cls(enum.value) # pylint: disable=no-value-for-parameter return type.__getattribute__(cls, item) def __iter__(cls): enum_source = type.__getattribute__(cls, "__enum_source__") return enum_source.__iter__()