Source code for owlmixin.owlenum
# coding: utf-8
import warnings
from enum import Enum
from typing import TypeVar
from owlmixin.transformers import ValueTransformer
T = TypeVar("T", bound="OwlObjectEnum") # pylint: disable=invalid-name
warnings.simplefilter("once")
[docs]class OwlEnum(ValueTransformer, Enum):
"""This class is similar to Enum except that can dump as json or yaml"""
@classmethod
def from_value(cls, value: str):
return cls(value)
def to_value(self, ignore_none, force_value):
return self.value
[docs]class OwlObjectEnum(ValueTransformer, Enum):
"""This class is similar to OwlEnum except that can have additional object.
Use case example:
class Animal(OwlObjectEnum):
DOG = ("dog", {"cry": "bow-wow"})
CAT = ("cat", {"cry": "mewing"})
def cry(self):
return self.object["cry"]
"""
def __init__(self, symbol, obj):
self.symbol = symbol
self.object = obj
[docs] @classmethod
def from_value(cls, value: str) -> T:
"""Create instance from symbol
:param value: unique symbol
:return: This instance
Usage:
>>> from owlmixin.samples import Animal
>>> Animal.from_value('cat').cry()
'mewing'
"""
return [x for x in cls.__members__.values() if x.value[0] == value][0] # type: ignore
def to_value(self, ignore_none, force_value):
return self.symbol