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>
55 lines
2.0 KiB
Python
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
|