Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save andgineer/4f20a2d20692c212579c5b744158007f to your computer and use it in GitHub Desktop.
Save andgineer/4f20a2d20692c212579c5b744158007f to your computer and use it in GitHub Desktop.
Schematics EnumType
class EnumType(BaseType):
"""
Converts Python Enum into the string.
"""
primitive_type = str
native_type = enum.Enum
MESSAGES = {
'convert': ("Couldn't interpret '{0}' value as Enum."),
'find': 'Couldnt find {value} in {choices}'
}
def __init__(self, enum=None, **kwargs):
self.enum = enum
super().__init__(**kwargs)
def _mock(self, context=None):
return random.choice(list(self.enum.__members__) )
def to_native(self, value, context=None):
if isinstance(value, self.enum):
return value
try:
for member in self.enum.__members__:
if member.lower() == value.lower():
return self.enum.__members__[member]
else:
raise ValueError(self.messages['find'].format(choices=self.enum.__members__, value=value))
except (ValueError, TypeError):
raise ConversionError(self.messages['convert'].format(value))
def to_primitive(self, value, context=None):
return value.name
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment