diff --git a/mayan/apps/documents/tests/mixins.py b/mayan/apps/documents/tests/mixins.py index f003c0909d..d43d1d4141 100644 --- a/mayan/apps/documents/tests/mixins.py +++ b/mayan/apps/documents/tests/mixins.py @@ -24,12 +24,13 @@ class DocumentTestMixin(object): label=TEST_DOCUMENT_TYPE_LABEL ) - def upload_document(self): + def upload_document(self, filename=None): self._calculate_test_document_path() with open(self.test_document_path, mode='rb') as file_object: document = self.document_type.new_document( - file_object=file_object, label=self.test_document_filename + file_object=file_object, + label=filename or self.test_document_filename ) return document diff --git a/mayan/apps/metadata/api_views.py b/mayan/apps/metadata/api_views.py index 879dab4f33..f23a518bca 100644 --- a/mayan/apps/metadata/api_views.py +++ b/mayan/apps/metadata/api_views.py @@ -14,8 +14,8 @@ from mayan.apps.rest_api.permissions import MayanPermission from .models import MetadataType from .permissions import ( - permission_metadata_document_add, permission_metadata_document_remove, - permission_metadata_document_edit, permission_metadata_document_view, + permission_document_metadata_add, permission_document_metadata_remove, + permission_document_metadata_edit, permission_document_metadata_view, permission_metadata_type_create, permission_metadata_type_delete, permission_metadata_type_edit, permission_metadata_type_view ) @@ -34,9 +34,9 @@ class APIDocumentMetadataListView(generics.ListCreateAPIView): """ def get_document(self): if self.request.method == 'GET': - permission_required = permission_metadata_document_view + permission_required = permission_document_metadata_view else: - permission_required = permission_metadata_document_add + permission_required = permission_document_metadata_add document = get_object_or_404( klass=Document, pk=self.kwargs['document_pk'] @@ -90,13 +90,13 @@ class APIDocumentMetadataView(generics.RetrieveUpdateDestroyAPIView): def get_document(self): if self.request.method == 'GET': - permission_required = permission_metadata_document_view + permission_required = permission_document_metadata_view elif self.request.method == 'PUT': - permission_required = permission_metadata_document_edit + permission_required = permission_document_metadata_edit elif self.request.method == 'PATCH': - permission_required = permission_metadata_document_edit + permission_required = permission_document_metadata_edit elif self.request.method == 'DELETE': - permission_required = permission_metadata_document_remove + permission_required = permission_document_metadata_remove document = get_object_or_404( klass=Document, pk=self.kwargs['document_pk'] diff --git a/mayan/apps/metadata/apps.py b/mayan/apps/metadata/apps.py index 58ec8ff5cf..7e2a641989 100644 --- a/mayan/apps/metadata/apps.py +++ b/mayan/apps/metadata/apps.py @@ -48,8 +48,8 @@ from .links import ( ) from .methods import method_get_metadata from .permissions import ( - permission_metadata_document_add, permission_metadata_document_edit, - permission_metadata_document_remove, permission_metadata_document_view, + permission_document_metadata_add, permission_document_metadata_edit, + permission_document_metadata_remove, permission_document_metadata_view, permission_metadata_type_delete, permission_metadata_type_edit, permission_metadata_type_view ) @@ -130,10 +130,10 @@ class MetadataApp(MayanAppConfig): ModelPermission.register( model=Document, permissions=( - permission_metadata_document_add, - permission_metadata_document_edit, - permission_metadata_document_remove, - permission_metadata_document_view, + permission_document_metadata_add, + permission_document_metadata_edit, + permission_document_metadata_remove, + permission_document_metadata_view, ) ) ModelPermission.register( diff --git a/mayan/apps/metadata/forms.py b/mayan/apps/metadata/forms.py index 05f7bb1ced..a20ecc4692 100644 --- a/mayan/apps/metadata/forms.py +++ b/mayan/apps/metadata/forms.py @@ -122,7 +122,7 @@ class DocumentMetadataForm(forms.Form): DocumentMetadataFormSet = formset_factory(DocumentMetadataForm, extra=0) -class DocumentAddMetadataForm(forms.Form): +class DocumentMetadataAddForm(forms.Form): metadata_type = forms.ModelMultipleChoiceField( help_text=_('Metadata types to be added to the selected documents.'), label=_('Metadata type'), queryset=MetadataType.objects.all(), @@ -143,25 +143,11 @@ class DocumentAddMetadataForm(forms.Form): else: queryset = MetadataType.objects.none() - super(DocumentAddMetadataForm, self).__init__(*args, **kwargs) + super(DocumentMetadataAddForm, self).__init__(*args, **kwargs) self.fields['metadata_type'].queryset = queryset -class MetadataTypeForm(forms.ModelForm): - def __init__(self, *args, **kwargs): - super(MetadataTypeForm, self).__init__(*args, **kwargs) - self.fields['lookup'].help_text = format_lazy( - '{}{}{}', self.fields['lookup'].help_text, - _(' Available template context variables: '), - MetadataLookup.get_as_help_text() - ) - - class Meta: - fields = ('name', 'label', 'default', 'lookup', 'validation', 'parser') - model = MetadataType - - class DocumentMetadataRemoveForm(DocumentMetadataForm): update = forms.BooleanField( initial=False, label=_('Remove'), required=False @@ -281,3 +267,17 @@ class DocumentTypeMetadataTypeRelationshipFormSet(DocumentTypeMetadataTypeRelati _user = kwargs.pop('_user') super(DocumentTypeMetadataTypeRelationshipFormSet, self).__init__(*args, **kwargs) self.form_kwargs.update({'_user': _user}) + + +class MetadataTypeForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + super(MetadataTypeForm, self).__init__(*args, **kwargs) + self.fields['lookup'].help_text = format_lazy( + '{}{}{}', self.fields['lookup'].help_text, + _(' Available template context variables: '), + MetadataLookup.get_as_help_text() + ) + + class Meta: + fields = ('name', 'label', 'default', 'lookup', 'validation', 'parser') + model = MetadataType diff --git a/mayan/apps/metadata/icons.py b/mayan/apps/metadata/icons.py index 93a7760739..135537a856 100644 --- a/mayan/apps/metadata/icons.py +++ b/mayan/apps/metadata/icons.py @@ -37,8 +37,5 @@ icon_document_type_metadata_types = Icon( icon_metadata = Icon(driver_name='fontawesome', symbol='database') icon_metadata_type_create = Icon(driver_name='fontawesome', symbol='plus') icon_metadata_type_delete = Icon(driver_name='fontawesome', symbol='times') -icon_metadata_type_document_types = Icon( - driver_name='fontawesome', symbol='book' -) icon_metadata_type_edit = Icon(driver_name='fontawesome', symbol='pencil-alt') icon_metadata_type_list = Icon(driver_name='fontawesome', symbol='database') diff --git a/mayan/apps/metadata/links.py b/mayan/apps/metadata/links.py index aa15ddd82b..c7c1181a5f 100644 --- a/mayan/apps/metadata/links.py +++ b/mayan/apps/metadata/links.py @@ -11,25 +11,24 @@ from .icons import ( icon_document_metadata_remove, icon_document_metadata_view, icon_document_multiple_metadata_add, icon_document_multiple_metadata_edit, icon_document_multiple_metadata_remove, icon_metadata_type_create, - icon_document_type_metadata_types, icon_metadata_type_document_types, - icon_metadata_type_delete, icon_metadata_type_edit, - icon_metadata_type_list, + icon_document_type_metadata_types, icon_metadata_type_delete, + icon_metadata_type_edit, icon_metadata_type_list ) from .permissions import ( - permission_metadata_document_add, permission_metadata_document_edit, - permission_metadata_document_remove, permission_metadata_document_view, + permission_document_metadata_add, permission_document_metadata_edit, + permission_document_metadata_remove, permission_document_metadata_view, permission_metadata_type_create, permission_metadata_type_delete, permission_metadata_type_edit, permission_metadata_type_view ) link_document_metadata_add = Link( args='object.pk', icon_class=icon_document_metadata_add, - permissions=(permission_metadata_document_add,), text=_('Add metadata'), + permissions=(permission_document_metadata_add,), text=_('Add metadata'), view='metadata:document_metadata_add', ) link_document_metadata_edit = Link( args='object.pk', icon_class=icon_document_metadata_edit, - permissions=(permission_metadata_document_edit,), text=_('Edit metadata'), + permissions=(permission_document_metadata_edit,), text=_('Edit metadata'), view='metadata:document_metadata_edit' ) link_document_multiple_metadata_add = Link( @@ -47,12 +46,12 @@ link_document_multiple_metadata_remove = Link( ) link_document_metadata_remove = Link( args='object.pk', icon_class=icon_document_metadata_remove, - permissions=(permission_metadata_document_remove,), + permissions=(permission_document_metadata_remove,), text=_('Remove metadata'), view='metadata:document_metadata_remove', ) link_document_metadata_view = Link( args='resolved_object.pk', icon_class=icon_document_metadata_view, - permissions=(permission_metadata_document_view,), text=_('Metadata'), + permissions=(permission_document_metadata_view,), text=_('Metadata'), view='metadata:document_metadata_view', ) link_document_type_metadata_types = Link( @@ -61,7 +60,7 @@ link_document_type_metadata_types = Link( view='metadata:document_type_metadata_types', ) link_metadata_type_document_types = Link( - args='resolved_object.pk', icon_class=icon_metadata_type_document_types, + args='resolved_object.pk', icon_class=icon_document_type, permissions=(permission_document_type_edit,), text=_('Document types'), view='metadata:metadata_type_document_types', ) @@ -85,5 +84,3 @@ link_metadata_type_list = Link( permissions=(permission_metadata_type_view,), text=_('Metadata types'), view='metadata:metadata_type_list' ) - - diff --git a/mayan/apps/metadata/models.py b/mayan/apps/metadata/models.py index 20e4a767fb..c7ac3e883b 100644 --- a/mayan/apps/metadata/models.py +++ b/mayan/apps/metadata/models.py @@ -98,7 +98,7 @@ class MetadataType(models.Model): return self.label def get_absolute_url(self): - return reverse('metadata:setup_metadata_type_edit', args=(self.pk,)) + return reverse('metadata:metadata_type_edit', kwargs={'pk': self.pk}) if PY2: # Python 2 non unicode version diff --git a/mayan/apps/metadata/permissions.py b/mayan/apps/metadata/permissions.py index 6e82f55d28..0d809d89a1 100644 --- a/mayan/apps/metadata/permissions.py +++ b/mayan/apps/metadata/permissions.py @@ -4,32 +4,35 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.permissions import PermissionNamespace -namespace = PermissionNamespace(label=_('Metadata'), name='metadata') +namespace = PermissionNamespace(name='metadata', label=_('Metadata')) -permission_metadata_document_edit = namespace.add_permission( +permission_document_metadata_add = namespace.add_permission( + name='metadata_document_add', label=_('Add metadata to a document') +) +permission_document_metadata_edit = namespace.add_permission( name='metadata_document_edit', label=_('Edit a document\'s metadata') ) -permission_metadata_document_add = namespace.add_permission( - name='metadata_document_add', label=_('Add metadata to a document')) -permission_metadata_document_remove = namespace.add_permission( +permission_document_metadata_remove = namespace.add_permission( name='metadata_document_remove', label=_('Remove metadata from a document') ) -permission_metadata_document_view = namespace.add_permission( +permission_document_metadata_view = namespace.add_permission( name='metadata_document_view', label=_('View metadata from a document') ) -setup_namespace = PermissionNamespace(label=_('Metadata setup'), name='metadata_setup') - -permission_metadata_type_edit = setup_namespace.add_permission( - name='metadata_type_edit', label=_('Edit metadata types') +setup_namespace = PermissionNamespace( + name='metadata_setup', label=_('Metadata setup') ) + permission_metadata_type_create = setup_namespace.add_permission( name='metadata_type_create', label=_('Create new metadata types') ) permission_metadata_type_delete = setup_namespace.add_permission( name='metadata_type_delete', label=_('Delete metadata types') ) +permission_metadata_type_edit = setup_namespace.add_permission( + name='metadata_type_edit', label=_('Edit metadata types') +) permission_metadata_type_view = setup_namespace.add_permission( name='metadata_type_view', label=_('View metadata types') ) diff --git a/mayan/apps/metadata/settings.py b/mayan/apps/metadata/settings.py index bb40bca391..9dfaffa4e5 100644 --- a/mayan/apps/metadata/settings.py +++ b/mayan/apps/metadata/settings.py @@ -8,6 +8,7 @@ from .parsers import MetadataParser from .validators import MetadataValidator namespace = Namespace(name='metadata', label=_('Metadata')) + setting_available_validators = namespace.add_setting( global_name='METADATA_AVAILABLE_VALIDATORS', default=MetadataValidator.get_import_paths() diff --git a/mayan/apps/metadata/tests/mixins.py b/mayan/apps/metadata/tests/mixins.py index 86d4cc5591..83ef32c2b6 100644 --- a/mayan/apps/metadata/tests/mixins.py +++ b/mayan/apps/metadata/tests/mixins.py @@ -25,7 +25,7 @@ class MetadataTestsMixin(object): def _request_metadata_type_create_view(self): return self.post( - viewname='metadata:setup_metadata_type_create', data={ + viewname='metadata:metadata_type_create', data={ 'label': TEST_METADATA_TYPE_LABEL, 'name': TEST_METADATA_TYPE_NAME } @@ -33,14 +33,14 @@ class MetadataTestsMixin(object): def _request_metadata_type_delete_view(self): return self.post( - viewname='metadata:setup_metadata_type_delete', args=( + viewname='metadata:metadata_type_delete', args=( self.metadata_type.pk, ), ) def _request_metadata_type_edit_view(self): return self.post( - viewname='metadata:setup_metadata_type_edit', args=( + viewname='metadata:metadata_type_edit', args=( self.metadata_type.pk,), data={ 'label': TEST_METADATA_TYPE_LABEL_EDITED, 'name': TEST_METADATA_TYPE_NAME_EDITED @@ -52,7 +52,7 @@ class MetadataTestsMixin(object): # blindly sets the first form of the formset. return self.post( - viewname='metadata:setup_metadata_type_document_types', + viewname='metadata:metadata_type_document_types', args=(self.metadata_type.pk,), data={ 'form-TOTAL_FORMS': '1', 'form-INITIAL_FORMS': '0', @@ -62,5 +62,5 @@ class MetadataTestsMixin(object): def _request_metadata_type_list_view(self): return self.get( - viewname='metadata:setup_metadata_type_list', + viewname='metadata:metadata_type_list', ) diff --git a/mayan/apps/metadata/tests/test_api.py b/mayan/apps/metadata/tests/test_api.py index f6886d7d3c..9092c0c3ad 100644 --- a/mayan/apps/metadata/tests/test_api.py +++ b/mayan/apps/metadata/tests/test_api.py @@ -11,8 +11,8 @@ from mayan.apps.rest_api.tests import BaseAPITestCase from ..models import DocumentTypeMetadataType, MetadataType from ..permissions import ( - permission_metadata_document_add, permission_metadata_document_edit, - permission_metadata_document_remove, permission_metadata_document_view, + permission_document_metadata_add, permission_document_metadata_edit, + permission_document_metadata_remove, permission_document_metadata_view, permission_metadata_type_create, permission_metadata_type_delete, permission_metadata_type_edit, permission_metadata_type_view ) @@ -63,7 +63,7 @@ class MetadataTypeAPITestCase(BaseAPITestCase): def _request_metadata_type_delete_view(self): return self.delete( viewname='rest_api:metadatatype-detail', - args=(self.metadata_type.pk,) + kwargs={'metadata_type_pk': self.metadata_type.pk} ) def test_metadata_type_delete_no_access(self): @@ -84,7 +84,7 @@ class MetadataTypeAPITestCase(BaseAPITestCase): def _request_metadata_type_detail_view(self): return self.get( viewname='rest_api:metadatatype-detail', - args=(self.metadata_type.pk,) + kwargs={'metadata_type_pk': self.metadata_type.pk} ) def test_metadata_type_detail_view_no_access(self): @@ -107,7 +107,7 @@ class MetadataTypeAPITestCase(BaseAPITestCase): def _request_metadata_type_edit_view_via_patch(self): return self.patch( viewname='rest_api:metadatatype-detail', - args=(self.metadata_type.pk,), data={ + kwargs={'metadata_type_pk': self.metadata_type.pk}, data={ 'label': TEST_METADATA_TYPE_LABEL_2, 'name': TEST_METADATA_TYPE_NAME_2 } @@ -137,7 +137,7 @@ class MetadataTypeAPITestCase(BaseAPITestCase): def _request_metadata_type_edit_view_via_put(self): return self.put( viewname='rest_api:metadatatype-detail', - args=(self.metadata_type.pk,), data={ + kwargs={'metadata_type_pk': self.metadata_type.pk}, data={ 'label': TEST_METADATA_TYPE_LABEL_2, 'name': TEST_METADATA_TYPE_NAME_2 } @@ -199,10 +199,6 @@ class DocumentTypeMetadataTypeAPITestCase(BaseAPITestCase): label=TEST_METADATA_TYPE_LABEL, name=TEST_METADATA_TYPE_NAME ) - def tearDown(self): - self.document_type.delete() - super(DocumentTypeMetadataTypeAPITestCase, self).tearDown() - def _create_document_type_metadata_type(self): self.document_type_metadata_type = self.document_type.metadata.create( metadata_type=self.metadata_type, required=False @@ -211,7 +207,7 @@ class DocumentTypeMetadataTypeAPITestCase(BaseAPITestCase): def _request_document_type_metadata_type_create_view(self): return self.post( viewname='rest_api:documenttypemetadatatype-list', - args=(self.document_type.pk,), data={ + kwargs={'document_type_pk': self.document_type.pk}, data={ 'metadata_type_pk': self.metadata_type.pk, 'required': False } ) @@ -241,9 +237,10 @@ class DocumentTypeMetadataTypeAPITestCase(BaseAPITestCase): def _request_document_type_metadata_type_delete_view(self): return self.delete( viewname='rest_api:documenttypemetadatatype-detail', - args=( - self.document_type.pk, self.document_type_metadata_type.pk, - ), + kwargs={ + 'document_type_pk': self.document_type.pk, + 'metadata_type_pk': self.document_type_metadata_type.pk + } ) def test_document_type_metadata_type_delete_view_no_access(self): @@ -262,9 +259,7 @@ class DocumentTypeMetadataTypeAPITestCase(BaseAPITestCase): def _request_document_type_metadata_type_list_view(self): return self.get( viewname='rest_api:documenttypemetadatatype-list', - args=( - self.document_type.pk, - ), + kwargs={'document_type_pk': self.document_type.pk} ) def test_document_type_metadata_type_list_view_no_access(self): @@ -286,9 +281,10 @@ class DocumentTypeMetadataTypeAPITestCase(BaseAPITestCase): def _request_document_type_metadata_type_edit_view_via_patch(self): return self.patch( viewname='rest_api:documenttypemetadatatype-detail', - args=( - self.document_type.pk, self.document_type_metadata_type.pk, - ), data={ + kwargs={ + 'document_type_pk': self.document_type.pk, + 'metadata_type_pk': self.document_type_metadata_type.pk + }, data={ 'required': True } ) @@ -311,9 +307,10 @@ class DocumentTypeMetadataTypeAPITestCase(BaseAPITestCase): def _request_document_type_metadata_type_edit_view_via_put(self): return self.put( viewname='rest_api:documenttypemetadatatype-detail', - args=( - self.document_type.pk, self.document_type_metadata_type.pk, - ), data={ + kwargs={ + 'document_type_pk': self.document_type.pk, + 'metadata_type_pk': self.document_type_metadata_type.pk + }, data={ 'required': True } ) @@ -368,7 +365,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def _request_document_metadata_create_view(self): return self.post( viewname='rest_api:documentmetadata-list', - args=(self.document.pk,), data={ + kwargs={'document_pk': self.document.pk}, data={ 'metadata_type_pk': self.metadata_type.pk, 'value': TEST_METADATA_VALUE } @@ -380,7 +377,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): self.assertEqual(self.document.metadata.count(), 0) def test_document_metadata_create_view_with_access(self): - self.grant_access(permission=permission_metadata_document_add, obj=self.document) + self.grant_access(permission=permission_document_metadata_add, obj=self.document) response = self._request_document_metadata_create_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) document_metadata = self.document.metadata.first() @@ -390,7 +387,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def test_document_metadata_create_duplicate_view(self): self._create_document_metadata() - self.grant_permission(permission=permission_metadata_document_add) + self.grant_permission(permission=permission_document_metadata_add) response = self._request_document_metadata_create_view() self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(list(response.data.keys())[0], 'non_field_errors') @@ -398,7 +395,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def test_document_metadata_create_invalid_lookup_value_view(self): self.metadata_type.lookup = 'invalid,lookup,values,on,purpose' self.metadata_type.save() - self.grant_permission(permission=permission_metadata_document_add) + self.grant_permission(permission=permission_document_metadata_add) response = self._request_document_metadata_create_view() self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(list(response.data.keys())[0], 'non_field_errors') @@ -406,7 +403,10 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def _request_document_metadata_delete_view(self): return self.delete( viewname='rest_api:documentmetadata-detail', - args=(self.document.pk, self.document_metadata.pk,) + kwargs={ + 'document_pk': self.document.pk, + 'metadata_pk': self.document_metadata.pk + } ) def test_document_metadata_delete_view_no_access(self): @@ -418,7 +418,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def test_document_metadata_delete_view_with_access(self): self._create_document_metadata() self.grant_access( - permission=permission_metadata_document_remove, obj=self.document + permission=permission_document_metadata_remove, obj=self.document ) response = self._request_document_metadata_delete_view() self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) @@ -426,9 +426,8 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def _request_document_metadata_list_view(self): return self.get( - viewname='rest_api:documentmetadata-list', args=( - self.document.pk, - ) + viewname='rest_api:documentmetadata-list', + kwargs={'document_pk': self.document.pk} ) def test_document_metadata_list_view_no_access(self): @@ -439,7 +438,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def test_document_metadata_list_view_with_access(self): self._create_document_metadata() self.grant_access( - permission=permission_metadata_document_view, obj=self.document + permission=permission_document_metadata_view, obj=self.document ) response = self._request_document_metadata_list_view() self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -460,7 +459,10 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def _request_document_metadata_edit_view_via_patch(self): return self.patch( viewname='rest_api:documentmetadata-detail', - args=(self.document.pk, self.document_metadata.pk,), data={ + kwargs={ + 'document_pk': self.document.pk, + 'metadata_pk': self.document_metadata.pk + }, data={ 'value': TEST_METADATA_VALUE_EDITED } ) @@ -475,7 +477,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def test_document_metadata_patch_view_with_access(self): self._create_document_metadata() self.grant_access( - permission=permission_metadata_document_edit, obj=self.document + permission=permission_document_metadata_edit, obj=self.document ) response = self._request_document_metadata_edit_view_via_patch() self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -490,7 +492,10 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def _request_document_metadata_edit_view_via_put(self): return self.put( viewname='rest_api:documentmetadata-detail', - args=(self.document.pk, self.document_metadata.pk,), data={ + kwargs={ + 'document_pk': self.document.pk, + 'metadata_pk': self.document_metadata.pk + }, data={ 'value': TEST_METADATA_VALUE_EDITED } ) @@ -505,7 +510,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase): def test_document_metadata_put_view_with_access(self): self._create_document_metadata() self.grant_access( - permission=permission_metadata_document_edit, obj=self.document + permission=permission_document_metadata_edit, obj=self.document ) response = self._request_document_metadata_edit_view_via_put() self.assertEqual(response.status_code, status.HTTP_200_OK) diff --git a/mayan/apps/metadata/tests/test_views.py b/mayan/apps/metadata/tests/test_views.py index 320f04efa4..7eff3c794b 100644 --- a/mayan/apps/metadata/tests/test_views.py +++ b/mayan/apps/metadata/tests/test_views.py @@ -2,23 +2,19 @@ from __future__ import unicode_literals import logging -from django.core.files.base import File - from mayan.apps.common.tests import GenericViewTestCase from mayan.apps.documents.models import DocumentType from mayan.apps.documents.permissions import ( - permission_document_properties_edit, permission_document_type_edit, - permission_document_view + permission_document_properties_edit, permission_document_type_edit ) from mayan.apps.documents.tests import ( - DocumentTestMixin, GenericDocumentViewTestCase, - TEST_DOCUMENT_TYPE_2_LABEL, TEST_SMALL_DOCUMENT_PATH, + DocumentTestMixin, GenericDocumentViewTestCase, TEST_DOCUMENT_TYPE_2_LABEL ) from ..models import MetadataType from ..permissions import ( - permission_metadata_document_add, permission_metadata_document_remove, - permission_metadata_document_edit, permission_metadata_type_create, + permission_document_metadata_add, permission_document_metadata_remove, + permission_document_metadata_edit, permission_metadata_type_create, permission_metadata_type_delete, permission_metadata_type_edit, permission_metadata_type_view ) @@ -32,54 +28,70 @@ from .literals import ( from .mixins import MetadataTestsMixin -class DocumentMetadataTestCase(GenericDocumentViewTestCase): +class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase): def setUp(self): super(DocumentMetadataTestCase, self).setUp() - - self.metadata_type = MetadataType.objects.create( - name=TEST_METADATA_TYPE_NAME, label=TEST_METADATA_TYPE_LABEL - ) - + self.login_user() + self._create_metadata_type() self.document_type.metadata.create(metadata_type=self.metadata_type) - def test_metadata_add_view_no_permission(self): - self.login_user() + def _request_get_document_metadata_add_view(self): + return self.get( + viewname='metadata:document_metadata_add', + kwargs={'pk': self.document.pk}, + ) - self.grant_permission(permission=permission_document_view) - - response = self.post( - 'metadata:metadata_add', args=(self.document.pk,), + def _request_post_document_metadata_add_view(self): + return self.post( + viewname='metadata:document_metadata_add', + kwargs={'pk': self.document.pk}, data={'metadata_type': self.metadata_type.pk} ) + + def test_document_metadata_add_view_no_permission(self): + response = self._request_get_document_metadata_add_view() self.assertNotContains( response, text=self.metadata_type.label, status_code=200 ) + response = self._request_post_document_metadata_add_view() + self.assertEqual(response.status_code, 200) + self.assertEqual(len(self.document.metadata.all()), 0) - def test_metadata_add_view_with_permission(self): - self.login_user() - - self.grant_permission(permission=permission_document_view) - self.grant_permission(permission=permission_metadata_document_add) - self.grant_permission(permission=permission_metadata_document_edit) - - response = self.post( - 'metadata:metadata_add', args=(self.document.pk,), - data={'metadata_type': self.metadata_type.pk}, follow=True + def test_document_metadata_add_view_with_document_access(self): + self.grant_access( + permission=permission_document_metadata_add, obj=self.document ) - self.assertContains(response, 'successfully', status_code=200) + response = self._request_get_document_metadata_add_view() + self.assertContains( + response, text=self.metadata_type.label, status_code=200 + ) + + response = self._request_post_document_metadata_add_view() + self.assertEqual(response.status_code, 302) self.assertEqual(len(self.document.metadata.all()), 1) - def test_metadata_edit_after_document_type_change(self): + self.assertQuerysetEqual( + qs=self.document.metadata.values('metadata_type',), + values=[ + { + 'metadata_type': self.metadata_type.pk, + } + ], transform=dict + ) + + def test_document_metadata_edit_after_document_type_change(self): # Gitlab issue #204 # Problems to add required metadata after changing the document type - self.login_user() - - self.grant_permission(permission=permission_document_properties_edit) - self.grant_permission(permission=permission_metadata_document_edit) + self.grant_access( + permission=permission_document_properties_edit, obj=self.document + ) + self.grant_access( + permission=permission_document_metadata_edit, obj=self.document + ) document_type_2 = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE_2_LABEL @@ -96,222 +108,226 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase): self.document.set_document_type(document_type=document_type_2) response = self.get( - 'metadata:metadata_edit', args=(self.document.pk,), follow=True + viewname='metadata:document_metadata_edit', + kwargs={'pk': self.document.pk} ) self.assertContains(response, 'Edit', status_code=200) response = self.post( - 'metadata:metadata_edit', args=(self.document.pk,), data={ + viewname='metadata:document_metadata_edit', + kwargs={'pk': self.document.pk}, data={ 'form-0-id': document_metadata_2.metadata_type.pk, 'form-0-update': True, 'form-0-value': TEST_DOCUMENT_METADATA_VALUE_2, 'form-TOTAL_FORMS': '1', 'form-INITIAL_FORMS': '0', 'form-MAX_NUM_FORMS': '', - }, follow=True + } ) - self.assertContains(response, 'Metadata for document', status_code=200) + self.assertEqual(response.status_code, 302) self.assertEqual( self.document.metadata.get(metadata_type=metadata_type_2).value, TEST_DOCUMENT_METADATA_VALUE_2 ) - def test_metadata_remove_view_no_permission(self): - self.login_user() + def _request_get_document_document_metadata_remove_view(self): + return self.get( + viewname='metadata:document_metadata_remove', + kwargs={'pk': self.document.pk} + ) - document_metadata = self.document.metadata.create( + def _request_post_document_document_metadata_remove_view(self): + return self.post( + viewname='metadata:document_metadata_remove', + kwargs={'pk': self.document.pk}, data={ + 'form-0-id': self.document_metadata.metadata_type.pk, + 'form-0-update': True, + 'form-TOTAL_FORMS': '1', + 'form-INITIAL_FORMS': '0', + 'form-MAX_NUM_FORMS': '', + } + ) + + def test_document_metadata_remove_view_no_permission(self): + self.document_metadata = self.document.metadata.create( metadata_type=self.metadata_type, value='' ) - self.assertEqual(len(self.document.metadata.all()), 1) - - self.grant_permission(permission=permission_document_view) - - # Test display of metadata removal form - response = self.get( - 'metadata:metadata_remove', args=(self.document.pk,), - ) + response = self._request_get_document_document_metadata_remove_view() self.assertNotContains( response, text=self.metadata_type.label, status_code=200 ) - # Test post to metadata removal view - response = self.post( - 'metadata:metadata_remove', args=(self.document.pk,), data={ - 'form-0-id': document_metadata.metadata_type.pk, - 'form-0-update': True, - 'form-TOTAL_FORMS': '1', - 'form-INITIAL_FORMS': '0', - 'form-MAX_NUM_FORMS': '', - }, follow=True - ) - self.assertEqual(response.status_code, 200) + response = self._request_post_document_document_metadata_remove_view() + self.assertEqual(response.status_code, 302) self.assertEqual(len(self.document.metadata.all()), 1) - def test_metadata_remove_view_with_permission(self): - self.login_user() + self.assertQuerysetEqual( + qs=self.document.metadata.values('metadata_type',), + values=[ + { + 'metadata_type': self.metadata_type.pk, + } + ], transform=dict + ) - document_metadata = self.document.metadata.create( + def test_document_metadata_remove_view_with_document_access(self): + self.document_metadata = self.document.metadata.create( metadata_type=self.metadata_type, value='' ) - self.assertEqual(len(self.document.metadata.all()), 1) - - self.grant_permission(permission=permission_document_view) - self.grant_permission(permission=permission_metadata_document_remove) + self.grant_access( + permission=permission_document_metadata_remove, obj=self.document + ) # Silence unrelated logging logging.getLogger('mayan.apps.navigation.classes').setLevel( level=logging.CRITICAL ) - # Test display of metadata removal form - response = self.get( - 'metadata:metadata_remove', args=(self.document.pk,), - ) + response = self._request_get_document_document_metadata_remove_view() self.assertContains( response, text=self.metadata_type.label, status_code=200 ) - self.assertContains(response, 'emove', status_code=200) + response = self._request_post_document_document_metadata_remove_view() - # Test post to metadata removal view - response = self.post( - 'metadata:metadata_remove', args=(self.document.pk,), data={ - 'form-0-id': document_metadata.metadata_type.pk, - 'form-0-update': True, - 'form-TOTAL_FORMS': '1', - 'form-INITIAL_FORMS': '0', - 'form-MAX_NUM_FORMS': '', - }, follow=True - ) - - self.assertContains(response, 'Success', status_code=200) + self.assertEqual(response.status_code, 302) self.assertEqual(len(self.document.metadata.all()), 0) - def test_multiple_document_metadata_edit(self): - self.login_user() - - self.grant_permission(permission=permission_document_view) - self.grant_permission(permission=permission_metadata_document_add) - self.grant_permission(permission=permission_metadata_document_edit) - - with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object: - document_2 = self.document_type.new_document( - file_object=File(file_object) - ) - - document_metadata = self.document.metadata.create( - metadata_type=self.metadata_type - ) - document_2.metadata.create(metadata_type=self.metadata_type) - - response = self.get( - 'metadata:metadata_multiple_edit', data={ - 'id_list': '{},{}'.format(self.document.pk, document_2.pk) + def _request_get_document_multiple_metadata_edit_view(self): + return self.get( + viewname='metadata:document_multiple_metadata_edit', + data={ + 'id_list': '{},{}'.format(self.document.pk, self.document_2.pk) } ) - self.assertContains(response, 'Edit', status_code=200) - - # Test post to metadata removal view - response = self.post( - 'metadata:metadata_multiple_edit', data={ - 'id_list': '{},{}'.format(self.document.pk, document_2.pk), - 'form-0-id': document_metadata.metadata_type.pk, + def _request_post_document_multiple_metadata_edit_view(self): + return self.post( + viewname='metadata:document_multiple_metadata_edit', data={ + 'id_list': '{},{}'.format(self.document.pk, self.document_2.pk), + 'form-0-id': self.document_metadata.metadata_type.pk, 'form-0-value': TEST_METADATA_VALUE_EDITED, 'form-0-update': True, 'form-TOTAL_FORMS': '1', 'form-INITIAL_FORMS': '0', 'form-MAX_NUM_FORMS': '', - }, follow=True + } ) - self.assertEqual(response.status_code, 200) + def test_document_multiple_metadata_edit_with_access(self): + self.document_2 = self.upload_document() + + self.grant_access( + permission=permission_document_metadata_edit, obj=self.document + ) + self.grant_access( + permission=permission_document_metadata_edit, obj=self.document_2 + ) + + self.document_metadata = self.document.metadata.create( + metadata_type=self.metadata_type + ) + self.document_2.metadata.create(metadata_type=self.metadata_type) + + response = self._request_get_document_multiple_metadata_edit_view() + + self.assertContains( + response, text=self.metadata_type.label, status_code=200 + ) + + response = self._request_post_document_multiple_metadata_edit_view() + + self.assertEqual(response.status_code, 302) self.assertEqual( self.document.metadata.first().value, TEST_METADATA_VALUE_EDITED ) self.assertEqual( - document_2.metadata.first().value, TEST_METADATA_VALUE_EDITED + self.document_2.metadata.first().value, TEST_METADATA_VALUE_EDITED ) - def test_multiple_document_metadata_remove(self): - self.login_user() - - self.grant_permission(permission=permission_document_view) - self.grant_permission(permission=permission_metadata_document_remove) - - with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object: - document_2 = self.document_type.new_document( - file_object=File(file_object) - ) - - document_metadata = self.document.metadata.create( - metadata_type=self.metadata_type - ) - document_2.metadata.create(metadata_type=self.metadata_type) - - response = self.get( - 'metadata:metadata_multiple_remove', data={ - 'id_list': '{},{}'.format(self.document.pk, document_2.pk) + def _request_get_document_multiple_metadata_remove_view(self): + return self.get( + viewname='metadata:document_multiple_metadata_remove', data={ + 'id_list': '{},{}'.format(self.document.pk, self.document_2.pk) } ) - self.assertEquals(response.status_code, 200) - - # Test post to metadata removal view - response = self.post( - 'metadata:metadata_multiple_remove', data={ - 'id_list': '{},{}'.format(self.document.pk, document_2.pk), - 'form-0-id': document_metadata.metadata_type.pk, + def _request_post_document_multiple_metadata_remove_view(self): + return self.post( + viewname='metadata:document_multiple_metadata_remove', data={ + 'id_list': '{},{}'.format(self.document.pk, self.document_2.pk), + 'form-0-id': self.document_metadata.metadata_type.pk, 'form-0-update': True, 'form-TOTAL_FORMS': '1', 'form-INITIAL_FORMS': '0', 'form-MAX_NUM_FORMS': '', - }, follow=True + } ) - self.assertEqual(response.status_code, 200) + def test_document_multiple_metadata_remove_with_access(self): + self.document_2 = self.upload_document() + self.grant_access( + permission=permission_document_metadata_remove, obj=self.document + ) + self.grant_access( + permission=permission_document_metadata_remove, obj=self.document_2 + ) + + self.document_metadata = self.document.metadata.create( + metadata_type=self.metadata_type + ) + self.document_2.metadata.create(metadata_type=self.metadata_type) + + response = self._request_get_document_multiple_metadata_remove_view() + + self.assertEquals(response.status_code, 200) + + response = self._request_post_document_multiple_metadata_remove_view() + + self.assertEqual(response.status_code, 302) self.assertEqual(self.document.metadata.count(), 0) - self.assertEqual(document_2.metadata.count(), 0) + self.assertEqual(self.document_2.metadata.count(), 0) - def test_multiple_document_metadata_add(self): - self.login_user() - - self.grant_permission(permission=permission_document_view) - self.grant_permission(permission=permission_metadata_document_add) - self.grant_permission(permission=permission_metadata_document_edit) - - with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object: - document_2 = self.document_type.new_document( - file_object=File(file_object) - ) - - response = self.post( - 'metadata:metadata_multiple_add', data={ - 'id_list': '{},{}'.format(self.document.pk, document_2.pk), + def _request_post_document_document_metadata_add_view(self): + return self.post( + viewname='metadata:document_multiple_metadata_add', data={ + 'id_list': '{},{}'.format(self.document.pk, self.document_2.pk), 'metadata_type': self.metadata_type.pk - }, follow=True + } ) - self.assertContains(response, 'Edit', status_code=200) + def test_document_multiple_metadata_add_with_access(self): + self.document_2 = self.upload_document() - def test_single_document_multiple_metadata_add_view(self): - self.login_user() + self.grant_access( + permission=permission_document_metadata_add, obj=self.document + ) + self.grant_access( + permission=permission_document_metadata_add, obj=self.document_2 + ) - self.grant_permission(permission=permission_document_view) - self.grant_permission(permission=permission_metadata_document_add) - self.grant_permission(permission=permission_metadata_document_edit) + response = self._request_post_document_document_metadata_add_view() + self.assertEquals(response.status_code, 302) + + self.assertEqual(self.document.metadata.all().count(), 1) + self.assertEqual(self.document_2.metadata.all().count(), 1) + + def test_single_document_multiple_metadata_add_view_with_access(self): + self.grant_access( + permission=permission_document_metadata_add, obj=self.document + ) metadata_type_2 = MetadataType.objects.create( name=TEST_METADATA_TYPE_NAME_2, label=TEST_METADATA_TYPE_LABEL_2 ) @@ -321,7 +337,8 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase): ) self.post( - 'metadata:metadata_add', args=(self.document.pk,), data={ + viewname='metadata:document_metadata_add', + kwargs={'pk': self.document.pk}, data={ 'metadata_type': [self.metadata_type.pk, metadata_type_2.pk], } ) @@ -338,16 +355,16 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie auto_create_document_type = False auto_upload_document = False - def test_metadata_type_create_view_no_permission(self): + def setUp(self): + super(MetadataTypeViewTestCase, self).setUp() self.login_user() + def test_metadata_type_create_view_no_permission(self): response = self._request_metadata_type_create_view() self.assertEqual(response.status_code, 403) def test_metadata_type_create_view_with_access(self): - self.login_user() - self.grant_permission(permission=permission_metadata_type_create) response = self._request_metadata_type_create_view() @@ -364,7 +381,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie ) def test_metadata_type_delete_view_no_permission(self): - self.login_user() self._create_metadata_type() response = self._request_metadata_type_delete_view() @@ -381,7 +397,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie ) def test_metadata_type_delete_view_with_access(self): - self.login_user() self._create_metadata_type() self.grant_access( @@ -395,7 +410,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie self.assertEqual(MetadataType.objects.count(), 0) def test_metadata_type_edit_view_no_permission(self): - self.login_user() self._create_metadata_type() response = self._request_metadata_type_edit_view() @@ -412,7 +426,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie ) def test_metadata_type_edit_view_with_access(self): - self.login_user() self._create_metadata_type() self.grant_access( @@ -434,7 +447,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie ) def test_metadata_type_list_view_no_permission(self): - self.login_user() self._create_metadata_type() response = self._request_metadata_type_list_view() @@ -443,7 +455,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie ) def test_metadata_type_list_view_with_access(self): - self.login_user() self._create_metadata_type() self.grant_access( @@ -456,7 +467,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie ) def test_metadata_type_relationship_view_no_permission(self): - self.login_user() self._create_metadata_type() self._create_document_type() self.upload_document() @@ -470,7 +480,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie self.assertEqual(self.document_type.metadata.count(), 0) def test_metadata_type_relationship_view_with_document_type_access(self): - self.login_user() self._create_metadata_type() self._create_document_type() self.upload_document() @@ -488,7 +497,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie self.assertEqual(self.document_type.metadata.count(), 0) def test_metadata_type_relationship_view_with_metadata_type_access(self): - self.login_user() self._create_metadata_type() self._create_document_type() self.upload_document() @@ -506,7 +514,6 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie self.assertEqual(self.document_type.metadata.count(), 0) def test_metadata_type_relationship_view_with_metadata_type_and_document_type_access(self): - self.login_user() self._create_metadata_type() self._create_document_type() self.upload_document() diff --git a/mayan/apps/metadata/urls.py b/mayan/apps/metadata/urls.py index 84501fe4ef..bf5a94dfa2 100644 --- a/mayan/apps/metadata/urls.py +++ b/mayan/apps/metadata/urls.py @@ -17,87 +17,94 @@ from .views import ( urlpatterns = [ url( - r'^documents/(?P\d+)/edit/$', DocumentMetadataEditView.as_view(), - name='document_metadata_edit' + regex=r'^documents/(?P\d+)/edit/$', name='document_metadata_edit', + view=DocumentMetadataEditView.as_view() ), url( - r'^documents/multiple/edit/$', DocumentMetadataEditView.as_view(), - name='document_multiple_metadata_edit' + regex=r'^documents/multiple/edit/$', + name='document_multiple_metadata_edit', + view=DocumentMetadataEditView.as_view() ), url( - r'^documents/(?P\d+)/view/$', DocumentMetadataListView.as_view(), - name='document_metadata_view' + regex=r'^documents/(?P\d+)/view/$', name='document_metadata_view', + view=DocumentMetadataListView.as_view() ), url( - r'^documents/(?P\d+)/add/$', DocumentMetadataAddView.as_view(), - name='document_metadata_add' + regex=r'^documents/(?P\d+)/add/$', name='document_metadata_add', + view=DocumentMetadataAddView.as_view() ), url( - r'^documents/multiple/add/$', DocumentMetadataAddView.as_view(), - name='document_multiple_metadata_add' + regex=r'^documents/multiple/add/$', + name='document_multiple_metadata_add', + view=DocumentMetadataAddView.as_view() ), url( - r'^documents/(?P\d+)/remove/$', DocumentMetadataRemoveView.as_view(), - name='document_metadata_remove' + regex=r'^documents/(?P\d+)/remove/$', + name='document_metadata_remove', + view=DocumentMetadataRemoveView.as_view() ), url( - r'^documents/multiple/remove/$', DocumentMetadataRemoveView.as_view(), - name='document_multiple_metadata_remove' + regex=r'^documents/multiple/remove/$', + name='document_multiple_metadata_remove', + view=DocumentMetadataRemoveView.as_view() ), url( - r'^types/list/$', MetadataTypeListView.as_view(), - name='metadata_type_list' + regex=r'^types/list/$', name='metadata_type_list', + view=MetadataTypeListView.as_view() ), url( - r'^types/create/$', MetadataTypeCreateView.as_view(), - name='metadata_type_create' + regex=r'^types/create/$', name='metadata_type_create', + view=MetadataTypeCreateView.as_view() ), url( - r'^types/(?P\d+)/edit/$', MetadataTypeEditView.as_view(), - name='metadata_type_edit' + regex=r'^types/(?P\d+)/edit/$', name='metadata_type_edit', + view=MetadataTypeEditView.as_view() ), url( - r'^types/(?P\d+)/delete/$', - MetadataTypeDeleteView.as_view(), name='metadata_type_delete' + regex=r'^types/(?P\d+)/delete/$', name='metadata_type_delete', + view=MetadataTypeDeleteView.as_view() ), url( - r'^document_types/(?P\d+)/metadata_types/$', - SetupDocumentTypeMetadataTypes.as_view(), - name='document_type_metadata_types' + regex=r'^document_types/(?P\d+)/metadata_types/$', + name='document_type_metadata_types', + view=SetupDocumentTypeMetadataTypes.as_view() ), url( - r'^metadata_types/(?P\d+)/document_types/$', - SetupMetadataTypesDocumentTypes.as_view(), - name='metadata_type_document_types' + regex=r'^metadata_types/(?P\d+)/document_types/$', + name='metadata_type_document_types', + view=SetupMetadataTypesDocumentTypes.as_view() ), ] api_urls = [ url( - r'^metadata_types/$', APIMetadataTypeListView.as_view(), - name='metadatatype-list' + regex=r'^metadata_types/$', name='metadatatype-list', + view=APIMetadataTypeListView.as_view() ), url( - r'^metadata_types/(?P\d+)/$', - APIMetadataTypeView.as_view(), name='metadatatype-detail' + regex=r'^metadata_types/(?P\d+)/$', + name='metadatatype-detail', + view=APIMetadataTypeView.as_view() ), url( - r'^document_types/(?P\d+)/metadata_types/$', - APIDocumentTypeMetadataTypeListView.as_view(), - name='documenttypemetadatatype-list' + regex=r'^document_types/(?P\d+)/metadata_types/$', + name='documenttypemetadatatype-list', + view=APIDocumentTypeMetadataTypeListView.as_view() ), url( - r'^document_types/(?P\d+)/metadata_types/(?P\d+)/$', - APIDocumentTypeMetadataTypeView.as_view(), - name='documenttypemetadatatype-detail' + regex=r'^document_types/(?P\d+)/metadata_types/(?P\d+)/$', + name='documenttypemetadatatype-detail', + view=APIDocumentTypeMetadataTypeView.as_view() ), url( - r'^documents/(?P\d+)/metadata/$', - APIDocumentMetadataListView.as_view(), name='documentmetadata-list' + regex=r'^documents/(?P\d+)/metadata/$', + name='documentmetadata-list', + view=APIDocumentMetadataListView.as_view() ), url( - r'^documents/(?P\d+)/metadata/(?P\d+)/$', - APIDocumentMetadataView.as_view(), name='documentmetadata-detail' + regex=r'^documents/(?P\d+)/metadata/(?P\d+)/$', + name='documentmetadata-detail', + view=APIDocumentMetadataView.as_view() ), ] diff --git a/mayan/apps/metadata/views.py b/mayan/apps/metadata/views.py index 7928db0887..3c988b9f4d 100644 --- a/mayan/apps/metadata/views.py +++ b/mayan/apps/metadata/views.py @@ -23,31 +23,28 @@ from mayan.apps.documents.permissions import ( from .api import save_metadata_list from .forms import ( - DocumentAddMetadataForm, DocumentMetadataFormSet, + DocumentMetadataAddForm, DocumentMetadataFormSet, DocumentMetadataRemoveFormSet, DocumentTypeMetadataTypeRelationshipFormSet, MetadataTypeForm ) -from .icons import ( - icon_document_metadata_add, icon_document_metadata_edit, - icon_document_metadata_remove, icon_metadata -) +from .icons import icon_metadata from .links import ( link_document_metadata_add, link_document_multiple_metadata_add, link_metadata_type_create ) from .models import DocumentMetadata, MetadataType from .permissions import ( - permission_metadata_document_add, permission_metadata_document_edit, - permission_metadata_document_remove, permission_metadata_document_view, + permission_document_metadata_add, permission_document_metadata_edit, + permission_document_metadata_remove, permission_document_metadata_view, permission_metadata_type_create, permission_metadata_type_delete, permission_metadata_type_edit, permission_metadata_type_view ) class DocumentMetadataAddView(MultipleObjectFormActionView): - form_class = DocumentAddMetadataForm + form_class = DocumentMetadataAddForm model = Document - object_permission = permission_metadata_document_add + object_permission = permission_document_metadata_add success_message = _('Metadata add request performed on %(count)d document') success_message_plural = _( 'Metadata add request performed on %(count)d documents' @@ -87,7 +84,7 @@ class DocumentMetadataAddView(MultipleObjectFormActionView): return HttpResponseRedirect( '%s?%s' % ( reverse( - viewname='metadata:document_metadata_multiple_edit' + viewname='metadata:document_multiple_metadata_edit' ), urlencode( { 'id_list': ','.join( @@ -107,7 +104,6 @@ class DocumentMetadataAddView(MultipleObjectFormActionView): queryset = self.get_queryset() result = { - 'submit_icon_class': icon_document_metadata_add, 'submit_label': _('Add'), 'title': ungettext( 'Add metadata types to document', @@ -213,7 +209,7 @@ class DocumentMetadataAddView(MultipleObjectFormActionView): class DocumentMetadataEditView(MultipleObjectFormActionView): form_class = DocumentMetadataFormSet model = Document - object_permission = permission_metadata_document_edit + object_permission = permission_document_metadata_edit success_message = _( 'Metadata edit request performed on %(count)d document' ) @@ -255,7 +251,7 @@ class DocumentMetadataEditView(MultipleObjectFormActionView): return HttpResponseRedirect( '%s?%s' % ( reverse( - viewname='metadata:document_metadata_multiple_edit' + viewname='metadata:document_multiple_metadata_edit' ), urlencode( { 'id_list': ','.join( @@ -305,7 +301,6 @@ class DocumentMetadataEditView(MultipleObjectFormActionView): 'and assign them corresponding values.' ), 'no_results_title': _('There is no metadata to edit'), - 'submit_icon_class': icon_document_metadata_edit, 'submit_label': _('Edit'), 'title': ungettext( 'Edit document metadata', @@ -396,7 +391,7 @@ class DocumentMetadataEditView(MultipleObjectFormActionView): class DocumentMetadataListView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): AccessControlList.objects.check_access( - permissions=permission_metadata_document_view, + permissions=permission_document_metadata_view, user=self.request.user, obj=self.get_document() ) @@ -435,7 +430,7 @@ class DocumentMetadataListView(SingleObjectListView): class DocumentMetadataRemoveView(MultipleObjectFormActionView): form_class = DocumentMetadataRemoveFormSet model = Document - object_permission = permission_metadata_document_remove + object_permission = permission_document_metadata_remove success_message = _( 'Metadata remove request performed on %(count)d document' ) @@ -477,7 +472,7 @@ class DocumentMetadataRemoveView(MultipleObjectFormActionView): return HttpResponseRedirect( '%s?%s' % ( reverse( - viewname='metadata:document_metadata_multiple_edit' + viewname='metadata:document_multiple_metadata_edit' ), urlencode( { 'id_list': ','.join( @@ -498,7 +493,6 @@ class DocumentMetadataRemoveView(MultipleObjectFormActionView): result = { 'form_display_mode_table': True, - 'submit_icon_class': icon_document_metadata_remove, 'submit_label': _('Remove'), 'title': ungettext( 'Remove metadata types from the document',