Add metadata app API endpoints
This commit is contained in:
@@ -8,6 +8,7 @@ from documents.models import Document, DocumentType
|
||||
from navigation.api import (register_links, register_multi_item_links,
|
||||
register_sidebar_template, register_model_list_columns)
|
||||
from project_setup.api import register_setup
|
||||
from rest_api.classes import APIEndPoint
|
||||
|
||||
from .api import get_metadata_string
|
||||
from .links import (metadata_edit, metadata_view, metadata_multiple_edit,
|
||||
@@ -16,10 +17,12 @@ from .links import (metadata_edit, metadata_view, metadata_multiple_edit,
|
||||
setup_metadata_type_create, setup_metadata_set_list, setup_metadata_set_edit,
|
||||
setup_metadata_set_members, setup_metadata_set_delete, setup_metadata_set_create,
|
||||
setup_document_type_metadata)
|
||||
from .models import MetadataType, MetadataSet
|
||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW)
|
||||
from .models import MetadataSet, MetadataType
|
||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW)
|
||||
from .urls import api_urls
|
||||
|
||||
register_links(['metadata:metadata_add', 'metadata:metadata_edit', 'metadata:metadata_remove', 'metadata:metadata_view'], [metadata_add, metadata_edit, metadata_remove], menu_name='sidebar')
|
||||
register_links(Document, [metadata_view], menu_name='form_header')
|
||||
@@ -36,14 +39,12 @@ register_links(DocumentType, [setup_document_type_metadata])
|
||||
register_sidebar_template(['metadata:setup_metadata_type_list'], 'metadata_type_help.html')
|
||||
register_sidebar_template(['metadata:setup_metadata_set_list'], 'metadata_set_help.html')
|
||||
|
||||
register_setup(setup_metadata_type_list)
|
||||
register_setup(setup_metadata_set_list)
|
||||
register_setup(setup_metadata_type_list)
|
||||
|
||||
class_permissions(Document, [
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_ADD,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE, PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||
])
|
||||
|
||||
register_model_list_columns(Document, [
|
||||
@@ -51,3 +52,7 @@ register_model_list_columns(Document, [
|
||||
'name': _(u'Metadata'), 'attribute': encapsulate(lambda x: get_metadata_string(x))
|
||||
},
|
||||
])
|
||||
|
||||
endpoint = APIEndPoint('metadata')
|
||||
endpoint.register_urls(api_urls)
|
||||
endpoint.add_endpoint('metadatatype-list', _(u'Returns a list of all the metadata types.'))
|
||||
|
||||
92
mayan/apps/metadata/api_views.py
Normal file
92
mayan/apps/metadata/api_views.py
Normal file
@@ -0,0 +1,92 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from rest_framework import generics
|
||||
|
||||
from documents.models import Document
|
||||
from documents.permissions import PERMISSION_DOCUMENT_VIEW
|
||||
from permissions.models import Permission
|
||||
from rest_api.filters import MayanObjectPermissionsFilter
|
||||
from rest_api.permissions import MayanPermission
|
||||
|
||||
from .models import DocumentMetadata, MetadataType
|
||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||
PERMISSION_METADATA_TYPE_CREATE,
|
||||
PERMISSION_METADATA_TYPE_DELETE,
|
||||
PERMISSION_METADATA_TYPE_EDIT,
|
||||
PERMISSION_METADATA_TYPE_VIEW)
|
||||
from .serializers import DocumentMetadataSerializer, MetadataTypeSerializer
|
||||
|
||||
|
||||
class APIMetadataTypeListView(generics.ListCreateAPIView):
|
||||
"""
|
||||
Returns a list of all the metadata type.
|
||||
"""
|
||||
|
||||
serializer_class = MetadataTypeSerializer
|
||||
queryset = MetadataType.objects.all()
|
||||
|
||||
permission_classes = (MayanPermission,)
|
||||
filter_backends = (MayanObjectPermissionsFilter,)
|
||||
mayan_object_permissions = {'GET': [PERMISSION_METADATA_TYPE_VIEW]}
|
||||
mayan_view_permissions = {'POST': [PERMISSION_METADATA_TYPE_CREATE]}
|
||||
|
||||
|
||||
class APIMetadataTypeView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
Returns the selected metadata type details.
|
||||
"""
|
||||
|
||||
serializer_class = MetadataTypeSerializer
|
||||
queryset = MetadataType.objects.all()
|
||||
|
||||
permission_classes = (MayanPermission,)
|
||||
mayan_object_permissions = {
|
||||
'GET': [PERMISSION_METADATA_TYPE_VIEW],
|
||||
'PUT': [PERMISSION_METADATA_TYPE_EDIT],
|
||||
'PATCH': [PERMISSION_METADATA_TYPE_EDIT],
|
||||
'DELETE': [PERMISSION_METADATA_TYPE_DELETE]
|
||||
}
|
||||
|
||||
|
||||
class APIDocumentMetadataListView(generics.ListCreateAPIView):
|
||||
"""
|
||||
Returns a list of all the metadata of a document.
|
||||
"""
|
||||
|
||||
serializer_class = DocumentMetadataSerializer
|
||||
permission_classes = (MayanPermission,)
|
||||
|
||||
mayan_view_permissions = {'POST': [PERMISSION_METADATA_DOCUMENT_ADD]}
|
||||
|
||||
def get_queryset(self):
|
||||
document = get_object_or_404(Document, pk=self.kwargs['pk'])
|
||||
try:
|
||||
Permission.objects.check_permissions(self.request.user, [PERMISSION_METADATA_DOCUMENT_VIEW])
|
||||
except PermissionDenied:
|
||||
AccessEntry.objects.check_access(PERMISSION_METADATA_DOCUMENT_VIEW, self.request.user, document)
|
||||
|
||||
queryset = document.metadata.all()
|
||||
return queryset
|
||||
|
||||
|
||||
class APIDocumentMetadataView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
Returns the selected document metadata details.
|
||||
"""
|
||||
|
||||
serializer_class = DocumentMetadataSerializer
|
||||
queryset = DocumentMetadata.objects.all()
|
||||
|
||||
permission_classes = (MayanPermission,)
|
||||
mayan_object_permissions = {
|
||||
'GET': [PERMISSION_METADATA_DOCUMENT_VIEW],
|
||||
'PUT': [PERMISSION_METADATA_DOCUMENT_EDIT],
|
||||
'PATCH': [PERMISSION_METADATA_DOCUMENT_EDIT],
|
||||
'DELETE': [PERMISSION_METADATA_DOCUMENT_REMOVE]
|
||||
}
|
||||
17
mayan/apps/metadata/serializers.py
Normal file
17
mayan/apps/metadata/serializers.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import DocumentMetadata, MetadataType
|
||||
|
||||
|
||||
class MetadataTypeSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
fields = ('id', 'name', 'title', 'default', 'lookup')
|
||||
model = MetadataType
|
||||
|
||||
|
||||
class DocumentMetadataSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
fields = ('id', 'document', 'metadata_type', 'value')
|
||||
model = DocumentMetadata
|
||||
@@ -1,5 +1,8 @@
|
||||
from django.conf.urls import patterns, url
|
||||
|
||||
from .api_views import (APIDocumentMetadataListView, APIDocumentMetadataView,
|
||||
APIMetadataTypeListView, APIMetadataTypeView)
|
||||
|
||||
urlpatterns = patterns('metadata.views',
|
||||
url(r'^(?P<document_id>\d+)/edit/$', 'metadata_edit', (), 'metadata_edit'),
|
||||
url(r'^(?P<document_id>\d+)/view/$', 'metadata_view', (), 'metadata_view'),
|
||||
@@ -22,3 +25,10 @@ urlpatterns = patterns('metadata.views',
|
||||
|
||||
url(r'^setup/document/type/(?P<document_type_id>\d+)/metadata/default/edit/$', 'setup_document_type_metadata', (), 'setup_document_type_metadata'),
|
||||
)
|
||||
|
||||
api_urls = patterns('',
|
||||
url(r'^metadatatypes/$', APIMetadataTypeListView.as_view(), name='metadatatype-list'),
|
||||
url(r'^metadatatypes/(?P<pk>[0-9]+)/$', APIMetadataTypeView.as_view(), name='metadatatype-detail'),
|
||||
url(r'^document/(?P<pk>[0-9]+)/metadata/$', APIDocumentMetadataListView.as_view(), name='documentmetadata-list'),
|
||||
url(r'^document/(?P<document_pk>[0-9]+)/metadata/(?P<pk>[0-9]+)/$', APIDocumentMetadataView.as_view(), name='documentmetadata-detail'),
|
||||
)
|
||||
|
||||
@@ -14,22 +14,27 @@ from documents.models import Document, RecentDocument, DocumentType
|
||||
from documents.permissions import PERMISSION_DOCUMENT_TYPE_EDIT
|
||||
from permissions.models import Permission
|
||||
|
||||
from common.utils import generate_choices_w_labels, encapsulate, get_object_name
|
||||
from common.utils import encapsulate, generate_choices_w_labels, get_object_name
|
||||
from common.views import assign_remove
|
||||
|
||||
from .api import save_metadata_list
|
||||
from .classes import MetadataObjectWrapper
|
||||
from .forms import (MetadataFormSet, AddMetadataForm,
|
||||
MetadataRemoveFormSet, MetadataTypeForm, MetadataSetForm)
|
||||
from .models import (DocumentMetadata, MetadataType, MetadataSet,
|
||||
MetadataSetItem, DocumentTypeDefaults)
|
||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW, PERMISSION_METADATA_TYPE_EDIT,
|
||||
PERMISSION_METADATA_TYPE_CREATE, PERMISSION_METADATA_TYPE_DELETE,
|
||||
PERMISSION_METADATA_TYPE_VIEW, PERMISSION_METADATA_SET_EDIT,
|
||||
PERMISSION_METADATA_SET_CREATE, PERMISSION_METADATA_SET_DELETE,
|
||||
PERMISSION_METADATA_SET_VIEW)
|
||||
from .forms import (AddMetadataForm, MetadataFormSet, MetadataRemoveFormSet,
|
||||
MetadataSetForm, MetadataTypeForm)
|
||||
from .models import (DocumentMetadata, DocumentTypeDefaults, MetadataSet,
|
||||
MetadataSetItem, MetadataType)
|
||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||
PERMISSION_METADATA_SET_CREATE,
|
||||
PERMISSION_METADATA_SET_DELETE,
|
||||
PERMISSION_METADATA_SET_EDIT,
|
||||
PERMISSION_METADATA_SET_VIEW,
|
||||
PERMISSION_METADATA_TYPE_CREATE,
|
||||
PERMISSION_METADATA_TYPE_DELETE,
|
||||
PERMISSION_METADATA_TYPE_EDIT,
|
||||
PERMISSION_METADATA_TYPE_VIEW)
|
||||
|
||||
|
||||
def metadata_edit(request, document_id=None, document_id_list=None):
|
||||
@@ -152,7 +157,7 @@ def metadata_add(request, document_id=None, document_id_list=None):
|
||||
|
||||
if len(documents) == 1:
|
||||
return HttpResponseRedirect(u'%s?%s' % (
|
||||
reverse(metadata_edit, args=[document.pk]),
|
||||
reverse('metadata:metadata_edit', args=[document.pk]),
|
||||
urlencode({'next': next}))
|
||||
)
|
||||
elif len(documents) > 1:
|
||||
|
||||
Reference in New Issue
Block a user