Refactor metadata app API

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-03-15 04:49:51 -04:00
parent 0c312b343e
commit c152156a11
20 changed files with 1129 additions and 778 deletions
+27
View File
@@ -3,9 +3,23 @@ from __future__ import absolute_import, unicode_literals
from django.core.exceptions import ImproperlyConfigured
from rest_framework.exceptions import ValidationError
from rest_framework.generics import get_object_or_404
from rest_framework.settings import api_settings
from mayan.apps.acls.models import AccessControlList
from mayan.apps.common.mixins import ExternalObjectMixin
class ExternalObjectAPIViewSetMixin(ExternalObjectMixin):
"""Override get_external_object to use REST API get_object_or_404"""
def dispatch(self, *args, **kwargs):
return super(ExternalObjectMixin, self).dispatch(*args, **kwargs)
def get_external_object(self):
return get_object_or_404(
queryset=self.get_external_object_queryset_filtered(),
**self.get_pk_url_kwargs()
)
class ExternalObjectListSerializerMixin(object):
@@ -127,6 +141,7 @@ class ExternalObjectSerializerMixin(object):
external_object_permission
external_object_queryset
external_object_pk_field
external_object_pk_type
The source queryset can also be provided overriding the
.get_external_object_queryset() method.
"""
@@ -157,7 +172,19 @@ class ExternalObjectSerializerMixin(object):
else:
pk_field_value = None
pk_type = self.get_external_object_option('pk_type')
if pk_field_value:
if pk_type:
try:
pk_field_value = pk_type(pk_field_value)
except Exception as exception:
raise ValidationError(
{
pk_field: [exception]
}, code='invalid'
)
try:
return queryset.get(pk=pk_field_value)
except Exception as exception:
+1 -1
View File
@@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals
from django.core.exceptions import PermissionDenied
from rest_framework.permissions import BasePermission, IsAuthenticated
from rest_framework.permissions import BasePermission
from mayan.apps.permissions import Permission
-5
View File
@@ -1,11 +1,6 @@
from __future__ import absolute_import, unicode_literals
from django.core.exceptions import ImproperlyConfigured
from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers
from rest_framework.generics import get_object_or_404
from rest_framework.reverse import reverse
class LazyExtraFieldsSerializerMixin(object):
+11 -2
View File
@@ -1,7 +1,6 @@
from __future__ import absolute_import, unicode_literals
from rest_framework import viewsets
from rest_framework.settings import api_settings
from rest_framework import mixins, viewsets
from .filters import MayanViewSetObjectPermissionsFilter
from .mixins import SuccessHeadersMixin
@@ -26,3 +25,13 @@ class MayanAPIReadOnlyModelViewSet(SuccessHeadersMixin, viewsets.ReadOnlyModelVi
class MayanAPIViewSet(SuccessHeadersMixin, viewsets.GenericViewSet):
filter_backends = (MayanViewSetObjectPermissionsFilter,)
permission_classes = (MayanViewSetPermission,)
class MayanRetrieveUpdateAPIViewSet(SuccessHeadersMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
filter_backends = (MayanViewSetObjectPermissionsFilter,)
permission_classes = (MayanViewSetPermission,)
class MayanRetrieveUpdateDestroyAPIViewSet(mixins.DestroyModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
filter_backends = (MayanViewSetObjectPermissionsFilter,)
permission_classes = (MayanViewSetPermission,)