Files
mayan-edms/mayan/apps/rest_api/serializers.py
Roberto Rosario c152156a11 Refactor metadata app API
Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2019-03-15 04:49:51 -04:00

34 lines
1.1 KiB
Python

from __future__ import absolute_import, unicode_literals
from rest_framework import serializers
class LazyExtraFieldsSerializerMixin(object):
_registry = {}
@classmethod
def add_field(cls, dotted_path, field_name, field):
cls._registry.setdefault(dotted_path, {})
cls._registry[dotted_path][field_name] = field
@classmethod
def get_fields_for(cls, dotted_path):
return cls._registry.get(dotted_path, {}).items()
def get_dotted_path(self):
return '{}.{}'.format(self.__module__, self.__class__.__name__)
def get_extra_fields(self):
return self.__class__.get_fields_for(dotted_path=self.get_dotted_path())
def __init__(self, *args, **kwargs):
for field_name, field in self.get_extra_fields():
self._declared_fields[field_name] = field
self.__class__.Meta.fields += (field_name,)
super(LazyExtraFieldsSerializerMixin, self).__init__(*args, **kwargs)
class LazyExtraFieldsHyperlinkedModelSerializer(LazyExtraFieldsSerializerMixin, serializers.HyperlinkedModelSerializer):
pass