src/aaz_dev/command/model/configuration/_output.py (48 lines of code) (raw):
from schematics.models import Model
from schematics.types import StringType
from schematics.types.serializable import serializable
from ._fields import CMDVariantField, CMDBooleanField
class CMDOutput(Model):
# properties as tags
TYPE_VALUE = None # types: "array", "object", "string",
class Options:
serialize_when_none = False
@serializable
def type(self):
return self._get_type()
def _get_type(self):
assert self.TYPE_VALUE is not None
return self.TYPE_VALUE
@classmethod
def _claim_polymorphic(cls, data):
if cls.TYPE_VALUE is None:
return False
if isinstance(data, dict):
type_value = data.get('type', None)
if type_value is not None:
typ = type_value.replace("<", " ").replace(">", " ").strip().split()[0]
return typ == cls.TYPE_VALUE
elif isinstance(data, CMDOutput):
return data.TYPE_VALUE == cls.TYPE_VALUE
return False
class CMDObjectOutput(CMDOutput):
TYPE_VALUE = 'object'
ref = CMDVariantField(required=True)
client_flatten = CMDBooleanField(
serialized_name='clientFlatten',
deserialize_from='clientFlatten',
)
class CMDArrayOutput(CMDOutput):
TYPE_VALUE = 'array'
ref = CMDVariantField(required=True)
client_flatten = CMDBooleanField(
serialized_name='clientFlatten',
deserialize_from='clientFlatten',
)
next_link = CMDVariantField(
serialized_name='nextLink',
deserialize_from='nextLink',
)
class CMDStringOutput(CMDOutput):
TYPE_VALUE = 'string'
# ref means get value from content
ref = CMDVariantField()
# use placeholder value as output
value = StringType()