from asyncorm.exceptions import AsyncOrmSerializerError
[docs]class SerializerMethod(Serializers):
def __init__(self, method_name=""):
self.method_name = method_name
[docs]class ModelSerializer(Serializers, metaclass=ModelSerializerMeta):
def __init__(self):
self.validate_fields()
[docs] def validate_fields(self):
for f in self._fields:
if not hasattr(self.__class__, f) and not hasattr(self.model, f):
raise AsyncOrmSerializerError("{} is not a correct argument for model {}".format(f, self.model))
[docs] @classmethod
def serialize(cls, instanced_model):
return_dict = {}
if not isinstance(instanced_model, cls.model):
raise AsyncOrmSerializerError("That object is not an instance of {}".format(cls.model))
for f in cls._fields:
# if the serializer class has an specific serializer for that field
if hasattr(cls, f):
serializer = getattr(cls, f)
if isinstance(serializer, SerializerMethod):
method_name = serializer.method_name
if not method_name:
serializer_method = getattr(cls, "get_{}".format(f))
else:
serializer_method = getattr(cls, method_name)
return_dict[f] = serializer_method(instanced_model)
# here we have to add subserializers when posible
else:
field_class = getattr(instanced_model.__class__, f)
return_dict[f] = field_class.serialize_data(getattr(instanced_model, f))
return return_dict