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,
|
from navigation.api import (register_links, register_multi_item_links,
|
||||||
register_sidebar_template, register_model_list_columns)
|
register_sidebar_template, register_model_list_columns)
|
||||||
from project_setup.api import register_setup
|
from project_setup.api import register_setup
|
||||||
|
from rest_api.classes import APIEndPoint
|
||||||
|
|
||||||
from .api import get_metadata_string
|
from .api import get_metadata_string
|
||||||
from .links import (metadata_edit, metadata_view, metadata_multiple_edit,
|
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_type_create, setup_metadata_set_list, setup_metadata_set_edit,
|
||||||
setup_metadata_set_members, setup_metadata_set_delete, setup_metadata_set_create,
|
setup_metadata_set_members, setup_metadata_set_delete, setup_metadata_set_create,
|
||||||
setup_document_type_metadata)
|
setup_document_type_metadata)
|
||||||
from .models import MetadataType, MetadataSet
|
from .models import MetadataSet, MetadataType
|
||||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_EDIT,
|
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
|
||||||
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE,
|
PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||||
PERMISSION_METADATA_DOCUMENT_VIEW)
|
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(['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')
|
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_type_list'], 'metadata_type_help.html')
|
||||||
register_sidebar_template(['metadata:setup_metadata_set_list'], 'metadata_set_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_set_list)
|
||||||
|
register_setup(setup_metadata_type_list)
|
||||||
|
|
||||||
class_permissions(Document, [
|
class_permissions(Document, [
|
||||||
PERMISSION_METADATA_DOCUMENT_EDIT,
|
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||||
PERMISSION_METADATA_DOCUMENT_ADD,
|
PERMISSION_METADATA_DOCUMENT_REMOVE, PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||||
PERMISSION_METADATA_DOCUMENT_REMOVE,
|
|
||||||
PERMISSION_METADATA_DOCUMENT_VIEW,
|
|
||||||
])
|
])
|
||||||
|
|
||||||
register_model_list_columns(Document, [
|
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))
|
'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 django.conf.urls import patterns, url
|
||||||
|
|
||||||
|
from .api_views import (APIDocumentMetadataListView, APIDocumentMetadataView,
|
||||||
|
APIMetadataTypeListView, APIMetadataTypeView)
|
||||||
|
|
||||||
urlpatterns = patterns('metadata.views',
|
urlpatterns = patterns('metadata.views',
|
||||||
url(r'^(?P<document_id>\d+)/edit/$', 'metadata_edit', (), 'metadata_edit'),
|
url(r'^(?P<document_id>\d+)/edit/$', 'metadata_edit', (), 'metadata_edit'),
|
||||||
url(r'^(?P<document_id>\d+)/view/$', 'metadata_view', (), 'metadata_view'),
|
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'),
|
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 documents.permissions import PERMISSION_DOCUMENT_TYPE_EDIT
|
||||||
from permissions.models import Permission
|
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 common.views import assign_remove
|
||||||
|
|
||||||
from .api import save_metadata_list
|
from .api import save_metadata_list
|
||||||
from .classes import MetadataObjectWrapper
|
from .classes import MetadataObjectWrapper
|
||||||
from .forms import (MetadataFormSet, AddMetadataForm,
|
from .forms import (AddMetadataForm, MetadataFormSet, MetadataRemoveFormSet,
|
||||||
MetadataRemoveFormSet, MetadataTypeForm, MetadataSetForm)
|
MetadataSetForm, MetadataTypeForm)
|
||||||
from .models import (DocumentMetadata, MetadataType, MetadataSet,
|
from .models import (DocumentMetadata, DocumentTypeDefaults, MetadataSet,
|
||||||
MetadataSetItem, DocumentTypeDefaults)
|
MetadataSetItem, MetadataType)
|
||||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_EDIT,
|
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
|
||||||
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE,
|
PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||||
PERMISSION_METADATA_DOCUMENT_VIEW, PERMISSION_METADATA_TYPE_EDIT,
|
PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||||
PERMISSION_METADATA_TYPE_CREATE, PERMISSION_METADATA_TYPE_DELETE,
|
PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||||
PERMISSION_METADATA_TYPE_VIEW, PERMISSION_METADATA_SET_EDIT,
|
PERMISSION_METADATA_SET_CREATE,
|
||||||
PERMISSION_METADATA_SET_CREATE, PERMISSION_METADATA_SET_DELETE,
|
PERMISSION_METADATA_SET_DELETE,
|
||||||
PERMISSION_METADATA_SET_VIEW)
|
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):
|
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:
|
if len(documents) == 1:
|
||||||
return HttpResponseRedirect(u'%s?%s' % (
|
return HttpResponseRedirect(u'%s?%s' % (
|
||||||
reverse(metadata_edit, args=[document.pk]),
|
reverse('metadata:metadata_edit', args=[document.pk]),
|
||||||
urlencode({'next': next}))
|
urlencode({'next': next}))
|
||||||
)
|
)
|
||||||
elif len(documents) > 1:
|
elif len(documents) > 1:
|
||||||
|
|||||||
Reference in New Issue
Block a user