Files
mayan-edms/mayan/apps/rest_api/mixins.py
Roberto Rosario 627056f1ae Refactor the REST API app
Remove the APIRoot view.

Remove the Endpoint class.

Remove the EndpointSerializer.

Move API documentation generation from the root urls module
to the app's urls module.

Update the app API URL generation to be based on viewsets
instead of an custom api_urls list.

Remove MayanObjectPermissionsFilter and replace it with
MayanViewSetObjectPermissionsFilter which allows mapping
a required permission to a specific viewset action.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2019-02-06 05:19:07 -04:00

55 lines
2.0 KiB
Python

from __future__ import absolute_import, unicode_literals
from django.core.exceptions import ImproperlyConfigured
from mayan.apps.acls.models import AccessControlList
class ExternalObjectListSerializerMixin(object):
class Meta:
external_object_list_model = None
external_object_list_permission = None
external_object_list_queryset = None
external_object_list_pk_field = None
external_object_list_pk_list_field = None
def get_external_object_list(self):
queryset = self.get_external_object_list_queryset()
if self.Meta.external_object_list_permission:
queryset = AccessControlList.objects.restrict_queryset(
permission=self.Meta.external_object_list_permission,
queryset=queryset,
user=self.context['request'].user
)
if self.Meta.external_object_list_pk_field:
id_list = (
self.validated_data.get(self.Meta.external_object_list_pk_field),
)
elif self.Meta.external_object_list_pk_list_field:
id_list = self.validated_data.get(
self.Meta.external_object_list_pk_list_field, ''
).split(',')
else:
raise ImproperlyConfigured(
'ExternalObjectListSerializerMixin requires a '
'external_object_list__pk_field a '
'external_object_list_pk_list_field.'
)
return queryset.filter(pk__in=id_list)
def get_external_object_list_queryset(self):
if self.Meta.external_object_list_model:
queryset = self.Meta.external_object_list_model._meta.default_manager.all()
elif self.Meta.external_object_list_queryset:
return self.Meta.external_object_list_queryset
else:
raise ImproperlyConfigured(
'ExternalObjectListSerializerMixin requires a '
'external_object_list_model or a external_object_list_queryset.'
)
return queryset