Refactor metadata app API
Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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,)
|
||||
|
||||
Reference in New Issue
Block a user