Source code for shoop.api.factories
# -*- coding: utf-8 -*-
# This file is part of Shoop.
#
# Copyright (c) 2012-2016, Shoop Ltd. All rights reserved.
#
# This source code is licensed under the AGPLv3 license found in the
# LICENSE file in the root directory of this source tree.
from __future__ import unicode_literals
from parler.models import TranslatableModel
from parler_rest.fields import TranslatedFieldsField
from parler_rest.serializers import TranslatableModelSerializer
from rest_framework import permissions, serializers, viewsets
[docs]def serializer_factory(model, serializer_class=None, attrs=None, meta=None):
attrs = attrs or {}
meta = meta or {}
if not serializer_class:
if issubclass(model, TranslatableModel):
serializer_class = TranslatableModelSerializer
attrs["translations"] = TranslatedFieldsField(shared_model=model)
else:
serializer_class = serializers.ModelSerializer
meta.setdefault("model", model)
attrs.setdefault("Meta", type(str("Meta"), (object,), meta))
return type(str("%sSerializer" % model.__name__), (serializer_class,), attrs)
[docs]def viewset_factory(model, viewset_class=viewsets.ModelViewSet, **attrs):
attrs.setdefault("permission_classes", (permissions.IsAdminUser,))
attrs.setdefault("queryset", model.objects.all())
if not attrs.get("serializer_class"):
attrs["serializer_class"] = serializer_factory(model)
return type(str("%sViewSet" % model.__name__), (viewset_class,), attrs)