Source code for rest_easy.registers
# coding: utf-8
"""
This module contains the serializer register.
The serializer register is where all serializers created using
:class:`rest_easy.serializers.SerializerCreator` are registered and where they can be obtained from based
on model and schema. Remember that no other serializers will be kept here - and they will not be obtainable in such
a way.
"""
from __future__ import unicode_literals
import six
from rest_easy.exceptions import RestEasyException
from rest_easy.patterns import BaseRegister
__all__ = ['SerializerRegister', 'serializer_register']
[docs]class SerializerRegister(BaseRegister):
"""
Obtains serializer registration name based on model and schema.
"""
[docs] @staticmethod
def get_name(model, schema):
"""
Constructs serializer registration name using model's app label, model name and schema.
:param model: a Django model, a ct-like app-model string (app_label.modelname) or explicit None.
:param schema: schema to be used.
:return: constructed serializer registration name.
"""
if model is None:
return schema
if isinstance(model, six.string_types):
return '{}.{}'.format(model, schema)
try:
return '{}.{}.{}'.format(model._meta.app_label, model._meta.model_name, schema) # pylint: disable=protected-access
except AttributeError:
raise RestEasyException('Model must be either None, a ct-like model string or Django model class.')
[docs] def get(self, model, schema):
"""
Shortcut to get serializer having model and schema.
"""
return self.lookup(self.get_name(model, schema))
serializer_register = SerializerRegister()