Update metadata app
Sort arguments. Add keyword arguments. Update URL parameters to the '_id' form. Remove use of .check_access() from views. Sort methods. Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
@@ -33,9 +33,9 @@ from .events import (
|
||||
event_metadata_type_relationship
|
||||
)
|
||||
from .handlers import (
|
||||
handler_post_document_type_metadata_type_add,
|
||||
handler_index_document, handler_post_document_type_metadata_type_add,
|
||||
handler_post_document_type_metadata_type_delete,
|
||||
handler_post_document_type_change_metadata, handler_index_document,
|
||||
handler_post_document_type_change,
|
||||
)
|
||||
from .links import (
|
||||
link_document_metadata_add, link_document_metadata_edit,
|
||||
@@ -255,8 +255,8 @@ class MetadataApp(MayanAppConfig):
|
||||
sender=DocumentTypeMetadataType
|
||||
)
|
||||
post_document_type_change.connect(
|
||||
dispatch_uid='metadata_handler_post_document_type_change_metadata',
|
||||
receiver=handler_post_document_type_change_metadata,
|
||||
dispatch_uid='metadata_handler_post_document_type_change',
|
||||
receiver=handler_post_document_type_change,
|
||||
sender=Document
|
||||
)
|
||||
post_save.connect(
|
||||
|
||||
@@ -4,31 +4,24 @@ from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from mayan.apps.events import EventTypeNamespace
|
||||
|
||||
namespace = EventTypeNamespace(name='metadata', label=_('Metadata'))
|
||||
namespace = EventTypeNamespace(label=_('Metadata'), name='metadata')
|
||||
|
||||
event_document_metadata_added = namespace.add_event_type(
|
||||
name='document_metadata_added', label=_(
|
||||
'Document metadata added'
|
||||
)
|
||||
label=_('Document metadata added'), name='document_metadata_added'
|
||||
)
|
||||
event_document_metadata_edited = namespace.add_event_type(
|
||||
name='document_metadata_edited', label=_(
|
||||
'Document metadata edited'
|
||||
)
|
||||
label=_('Document metadata edited'), name='document_metadata_edited'
|
||||
)
|
||||
event_document_metadata_removed = namespace.add_event_type(
|
||||
name='document_metadata_removed', label=_(
|
||||
'Document metadata removed'
|
||||
)
|
||||
label=_('Document metadata removed'), name='document_metadata_removed'
|
||||
)
|
||||
event_metadata_type_created = namespace.add_event_type(
|
||||
name='metadata_type_created', label=_('Metadata type created')
|
||||
label=_('Metadata type created'), name='metadata_type_created'
|
||||
)
|
||||
event_metadata_type_edited = namespace.add_event_type(
|
||||
name='metadata_type_edited', label=_('Metadata type edited')
|
||||
label=_('Metadata type edited'), name='metadata_type_edited'
|
||||
)
|
||||
event_metadata_type_relationship = namespace.add_event_type(
|
||||
name='metadata_type_relationship', label=_(
|
||||
'Metadata type relationship updated'
|
||||
)
|
||||
label=_('Metadata type relationship updated'),
|
||||
name='metadata_type_relationship'
|
||||
)
|
||||
|
||||
@@ -11,29 +11,7 @@ from .tasks import task_add_required_metadata_type, task_remove_metadata_type
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def handler_post_document_type_metadata_type_add(sender, instance, created, **kwargs):
|
||||
logger.debug('instance: %s', instance)
|
||||
|
||||
if created and instance.required:
|
||||
task_add_required_metadata_type.apply_async(
|
||||
kwargs={
|
||||
'document_type_id': instance.document_type.pk,
|
||||
'metadata_type_id': instance.metadata_type.pk
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def handler_post_document_type_metadata_type_delete(sender, instance, **kwargs):
|
||||
logger.debug('instance: %s', instance)
|
||||
task_remove_metadata_type.apply_async(
|
||||
kwargs={
|
||||
'document_type_id': instance.document_type.pk,
|
||||
'metadata_type_id': instance.metadata_type.pk
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def handler_post_document_type_change_metadata(sender, instance, **kwargs):
|
||||
def handler_post_document_type_change(sender, instance, **kwargs):
|
||||
logger.debug('received post_document_type_change')
|
||||
logger.debug('instance: %s', instance)
|
||||
|
||||
@@ -73,6 +51,28 @@ def handler_post_document_type_change_metadata(sender, instance, **kwargs):
|
||||
)
|
||||
|
||||
|
||||
def handler_post_document_type_metadata_type_add(sender, instance, created, **kwargs):
|
||||
logger.debug('instance: %s', instance)
|
||||
|
||||
if created and instance.required:
|
||||
task_add_required_metadata_type.apply_async(
|
||||
kwargs={
|
||||
'document_type_id': instance.document_type.pk,
|
||||
'metadata_type_id': instance.metadata_type.pk
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def handler_post_document_type_metadata_type_delete(sender, instance, **kwargs):
|
||||
logger.debug('instance: %s', instance)
|
||||
task_remove_metadata_type.apply_async(
|
||||
kwargs={
|
||||
'document_type_id': instance.document_type.pk,
|
||||
'metadata_type_id': instance.metadata_type.pk
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def handler_index_document(sender, **kwargs):
|
||||
task_index_document.apply_async(
|
||||
kwargs=dict(document_id=kwargs['instance'].document.pk)
|
||||
|
||||
@@ -22,15 +22,27 @@ from .permissions import (
|
||||
)
|
||||
|
||||
link_document_metadata_add = Link(
|
||||
args='object.pk', icon_class=icon_document_metadata_add,
|
||||
icon_class=icon_document_metadata_add, kwargs={'document_id': 'object.pk'},
|
||||
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,
|
||||
icon_class=icon_document_metadata_edit, kwargs={'document_id': 'object.pk'},
|
||||
permissions=(permission_document_metadata_edit,), text=_('Edit metadata'),
|
||||
view='metadata:document_metadata_edit'
|
||||
)
|
||||
link_document_metadata_remove = Link(
|
||||
icon_class=icon_document_metadata_remove,
|
||||
kwargs={'document_id': 'object.pk'},
|
||||
permissions=(permission_document_metadata_remove,),
|
||||
text=_('Remove metadata'), view='metadata:document_metadata_remove',
|
||||
)
|
||||
link_document_metadata_view = Link(
|
||||
icon_class=icon_document_metadata_view,
|
||||
kwargs={'document_id': 'resolved_object.pk'},
|
||||
permissions=(permission_document_metadata_view,), text=_('Metadata'),
|
||||
view='metadata:document_metadata_view',
|
||||
)
|
||||
link_document_multiple_metadata_add = Link(
|
||||
icon_class=icon_document_multiple_metadata_add, text=_('Add metadata'),
|
||||
view='metadata:document_multiple_metadata_add'
|
||||
@@ -44,23 +56,15 @@ link_document_multiple_metadata_remove = Link(
|
||||
text=_('Remove metadata'),
|
||||
view='metadata:document_multiple_metadata_remove'
|
||||
)
|
||||
link_document_metadata_remove = Link(
|
||||
args='object.pk', icon_class=icon_document_metadata_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_document_metadata_view,), text=_('Metadata'),
|
||||
view='metadata:document_metadata_view',
|
||||
)
|
||||
link_document_type_metadata_types = Link(
|
||||
args='resolved_object.pk', icon_class=icon_document_type_metadata_types,
|
||||
icon_class=icon_document_type_metadata_types,
|
||||
kwargs={'document_type_id': 'resolved_object.pk'},
|
||||
permissions=(permission_document_type_edit,), text=_('Metadata types'),
|
||||
view='metadata:document_type_metadata_types',
|
||||
)
|
||||
link_metadata_type_document_types = Link(
|
||||
args='resolved_object.pk', icon_class=icon_document_type,
|
||||
icon_class=icon_document_type,
|
||||
kwargs={'metadata_type_id': 'resolved_object.pk'},
|
||||
permissions=(permission_document_type_edit,), text=_('Document types'),
|
||||
view='metadata:metadata_type_document_types',
|
||||
)
|
||||
@@ -70,12 +74,14 @@ link_metadata_type_create = Link(
|
||||
view='metadata:metadata_type_create'
|
||||
)
|
||||
link_metadata_type_delete = Link(
|
||||
args='object.pk', icon_class=icon_metadata_type_delete,
|
||||
icon_class=icon_metadata_type_delete,
|
||||
kwargs={'metadata_type_id': 'object.pk'},
|
||||
permissions=(permission_metadata_type_delete,), tags='dangerous',
|
||||
text=_('Delete'), view='metadata:metadata_type_delete',
|
||||
)
|
||||
link_metadata_type_edit = Link(
|
||||
args='object.pk', icon_class=icon_metadata_type_edit,
|
||||
icon_class=icon_metadata_type_edit,
|
||||
kwargs={'metadata_type_id': 'object.pk'},
|
||||
permissions=(permission_metadata_type_edit,), text=_('Edit'),
|
||||
view='metadata:metadata_type_edit'
|
||||
)
|
||||
|
||||
@@ -98,7 +98,10 @@ class MetadataType(models.Model):
|
||||
return self.label
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('metadata:metadata_type_edit', kwargs={'pk': self.pk})
|
||||
return reverse(
|
||||
viewname='metadata:metadata_type_edit',
|
||||
kwargs={'metadata_type_id': self.pk}
|
||||
)
|
||||
|
||||
if PY2:
|
||||
# Python 2 non unicode version
|
||||
|
||||
@@ -8,10 +8,6 @@ from django.core.exceptions import ValidationError
|
||||
class MetadataParser(object):
|
||||
_registry = []
|
||||
|
||||
@classmethod
|
||||
def register(cls, parser):
|
||||
cls._registry.append(parser)
|
||||
|
||||
@classmethod
|
||||
def get_all(cls):
|
||||
return cls._registry
|
||||
@@ -24,6 +20,10 @@ class MetadataParser(object):
|
||||
def get_import_paths(cls):
|
||||
return [validator.get_import_path() for validator in cls.get_all()]
|
||||
|
||||
@classmethod
|
||||
def register(cls, parser):
|
||||
cls._registry.append(parser)
|
||||
|
||||
def execute(self, input_data):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
@@ -4,35 +4,34 @@ from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from mayan.apps.permissions import PermissionNamespace
|
||||
|
||||
namespace = PermissionNamespace(name='metadata', label=_('Metadata'))
|
||||
namespace = PermissionNamespace(label=_('Metadata'), name='metadata')
|
||||
|
||||
permission_document_metadata_add = namespace.add_permission(
|
||||
name='metadata_document_add', label=_('Add metadata to a document')
|
||||
label=_('Add metadata to a document'), name='metadata_document_add'
|
||||
)
|
||||
permission_document_metadata_edit = namespace.add_permission(
|
||||
name='metadata_document_edit', label=_('Edit a document\'s metadata')
|
||||
label=_('Edit a document\'s metadata'), name='metadata_document_edit'
|
||||
)
|
||||
permission_document_metadata_remove = namespace.add_permission(
|
||||
name='metadata_document_remove',
|
||||
label=_('Remove metadata from a document')
|
||||
label=_('Remove metadata from a document'), name='metadata_document_remove'
|
||||
)
|
||||
permission_document_metadata_view = namespace.add_permission(
|
||||
name='metadata_document_view', label=_('View metadata from a document')
|
||||
label=_('View metadata from a document'), name='metadata_document_view'
|
||||
)
|
||||
|
||||
setup_namespace = PermissionNamespace(
|
||||
name='metadata_setup', label=_('Metadata setup')
|
||||
label=_('Metadata setup'), name='metadata_setup'
|
||||
)
|
||||
|
||||
permission_metadata_type_create = setup_namespace.add_permission(
|
||||
name='metadata_type_create', label=_('Create new metadata types')
|
||||
label=_('Create new metadata types'), name='metadata_type_create'
|
||||
)
|
||||
permission_metadata_type_delete = setup_namespace.add_permission(
|
||||
name='metadata_type_delete', label=_('Delete metadata types')
|
||||
label=_('Delete metadata types'), name='metadata_type_delete'
|
||||
)
|
||||
permission_metadata_type_edit = setup_namespace.add_permission(
|
||||
name='metadata_type_edit', label=_('Edit metadata types')
|
||||
label=_('Edit metadata types'), name='metadata_type_edit'
|
||||
)
|
||||
permission_metadata_type_view = setup_namespace.add_permission(
|
||||
name='metadata_type_view', label=_('View metadata types')
|
||||
label=_('View metadata types'), name='metadata_type_view'
|
||||
)
|
||||
|
||||
@@ -5,13 +5,13 @@ from django.utils.translation import ugettext_lazy as _
|
||||
from mayan.apps.task_manager.classes import CeleryQueue
|
||||
|
||||
queue_metadata = CeleryQueue(
|
||||
name='metadata', label=_('Metadata')
|
||||
label=_('Metadata'), name='metadata'
|
||||
)
|
||||
queue_metadata.add_task_type(
|
||||
name='mayan.apps.metadata.tasks.task_remove_metadata_type',
|
||||
label=_('Remove metadata type')
|
||||
label=_('Remove metadata type'),
|
||||
name='mayan.apps.metadata.tasks.task_remove_metadata_type'
|
||||
)
|
||||
queue_metadata.add_task_type(
|
||||
name='mayan.apps.metadata.tasks.task_add_required_metadata_type',
|
||||
label=_('Add required metadata type')
|
||||
label=_('Add required metadata type'),
|
||||
name='mayan.apps.metadata.tasks.task_add_required_metadata_type'
|
||||
)
|
||||
|
||||
@@ -40,9 +40,9 @@ class DocumentTypeMetadataTypeSerializer(serializers.HyperlinkedModelSerializer)
|
||||
|
||||
def get_url(self, instance):
|
||||
return reverse(
|
||||
'rest_api:documenttypemetadatatype-detail', args=(
|
||||
instance.document_type.pk, instance.pk
|
||||
), request=self.context['request'], format=self.context['format']
|
||||
viewname='rest_api:documenttypemetadatatype-detail', kwargs={
|
||||
'document_type_pk': instance.document_type.pk, 'metadata_type': instance.pk
|
||||
}, request=self.context['request'], format=self.context['format']
|
||||
)
|
||||
|
||||
|
||||
@@ -61,9 +61,9 @@ class NewDocumentTypeMetadataTypeSerializer(serializers.ModelSerializer):
|
||||
|
||||
def get_url(self, instance):
|
||||
return reverse(
|
||||
'rest_api:documenttypemetadatatype-detail', args=(
|
||||
instance.document_type.pk, instance.pk
|
||||
), request=self.context['request'], format=self.context['format']
|
||||
viewname='rest_api:documenttypemetadatatype-detail', kwargs={
|
||||
'document_type': instance.document_type.pk, 'metadata_type': instance.pk
|
||||
}, request=self.context['request'], format=self.context['format']
|
||||
)
|
||||
|
||||
def validate(self, attrs):
|
||||
@@ -92,9 +92,10 @@ class WritableDocumentTypeMetadataTypeSerializer(serializers.ModelSerializer):
|
||||
|
||||
def get_url(self, instance):
|
||||
return reverse(
|
||||
'rest_api:documenttypemetadatatype-detail', args=(
|
||||
instance.document_type.pk, instance.pk
|
||||
), request=self.context['request'], format=self.context['format']
|
||||
viewname='rest_api:documenttypemetadatatype-detail', kwargs={
|
||||
'document_type_pk': instance.document_type.pk,
|
||||
'metadata_type': instance.pk
|
||||
}, request=self.context['request'], format=self.context['format']
|
||||
)
|
||||
|
||||
|
||||
@@ -110,9 +111,9 @@ class DocumentMetadataSerializer(serializers.HyperlinkedModelSerializer):
|
||||
|
||||
def get_url(self, instance):
|
||||
return reverse(
|
||||
'rest_api:documentmetadata-detail', args=(
|
||||
instance.document.pk, instance.pk
|
||||
), request=self.context['request'], format=self.context['format']
|
||||
viewname='rest_api:documentmetadata-detail', kwargs={
|
||||
'document_pk': instance.document.pk, 'metadata_pk': instance.pk
|
||||
}, request=self.context['request'], format=self.context['format']
|
||||
)
|
||||
|
||||
def validate(self, attrs):
|
||||
@@ -141,9 +142,9 @@ class NewDocumentMetadataSerializer(serializers.ModelSerializer):
|
||||
|
||||
def get_url(self, instance):
|
||||
return reverse(
|
||||
'rest_api:documentmetadata-detail', args=(
|
||||
instance.document.pk, instance.pk
|
||||
), request=self.context['request'], format=self.context['format']
|
||||
viewname='rest_api:documentmetadata-detail', kwargs={
|
||||
'document_pk': instance.document.pk, 'metadata_pk': instance.pk
|
||||
}, request=self.context['request'], format=self.context['format']
|
||||
)
|
||||
|
||||
def validate(self, attrs):
|
||||
|
||||
@@ -7,7 +7,7 @@ from mayan.apps.smart_settings import Namespace
|
||||
from .parsers import MetadataParser
|
||||
from .validators import MetadataValidator
|
||||
|
||||
namespace = Namespace(name='metadata', label=_('Metadata'))
|
||||
namespace = Namespace(label=_('Metadata'), name='metadata')
|
||||
|
||||
setting_available_validators = namespace.add_setting(
|
||||
global_name='METADATA_AVAILABLE_VALIDATORS',
|
||||
|
||||
@@ -33,15 +33,15 @@ class MetadataTestsMixin(object):
|
||||
|
||||
def _request_metadata_type_delete_view(self):
|
||||
return self.post(
|
||||
viewname='metadata:metadata_type_delete', args=(
|
||||
self.metadata_type.pk,
|
||||
),
|
||||
viewname='metadata:metadata_type_delete',
|
||||
kwargs={'metadata_type_id': self.metadata_type.pk}
|
||||
)
|
||||
|
||||
def _request_metadata_type_edit_view(self):
|
||||
return self.post(
|
||||
viewname='metadata:metadata_type_edit', args=(
|
||||
self.metadata_type.pk,), data={
|
||||
viewname='metadata:metadata_type_edit',
|
||||
kwargs={'metadata_type_id': self.metadata_type.pk},
|
||||
data={
|
||||
'label': TEST_METADATA_TYPE_LABEL_EDITED,
|
||||
'name': TEST_METADATA_TYPE_NAME_EDITED
|
||||
}
|
||||
@@ -53,7 +53,8 @@ class MetadataTestsMixin(object):
|
||||
|
||||
return self.post(
|
||||
viewname='metadata:metadata_type_document_types',
|
||||
args=(self.metadata_type.pk,), data={
|
||||
kwargs={'metadata_type_id': self.metadata_type.pk},
|
||||
data={
|
||||
'form-TOTAL_FORMS': '1',
|
||||
'form-INITIAL_FORMS': '0',
|
||||
'form-0-relationship_type': 'required',
|
||||
|
||||
@@ -38,13 +38,13 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
|
||||
def _request_get_document_metadata_add_view(self):
|
||||
return self.get(
|
||||
viewname='metadata:document_metadata_add',
|
||||
kwargs={'pk': self.document.pk},
|
||||
kwargs={'document_id': self.document.pk},
|
||||
)
|
||||
|
||||
def _request_post_document_metadata_add_view(self):
|
||||
return self.post(
|
||||
viewname='metadata:document_metadata_add',
|
||||
kwargs={'pk': self.document.pk},
|
||||
kwargs={'document_id': self.document.pk},
|
||||
data={'metadata_type': self.metadata_type.pk}
|
||||
)
|
||||
|
||||
@@ -109,14 +109,14 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
|
||||
|
||||
response = self.get(
|
||||
viewname='metadata:document_metadata_edit',
|
||||
kwargs={'pk': self.document.pk}
|
||||
kwargs={'document_id': self.document.pk}
|
||||
)
|
||||
|
||||
self.assertContains(response, 'Edit', status_code=200)
|
||||
|
||||
response = self.post(
|
||||
viewname='metadata:document_metadata_edit',
|
||||
kwargs={'pk': self.document.pk}, data={
|
||||
kwargs={'document_id': 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,
|
||||
@@ -136,13 +136,13 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
|
||||
def _request_get_document_document_metadata_remove_view(self):
|
||||
return self.get(
|
||||
viewname='metadata:document_metadata_remove',
|
||||
kwargs={'pk': self.document.pk}
|
||||
kwargs={'document_id': self.document.pk}
|
||||
)
|
||||
|
||||
def _request_post_document_document_metadata_remove_view(self):
|
||||
return self.post(
|
||||
viewname='metadata:document_metadata_remove',
|
||||
kwargs={'pk': self.document.pk}, data={
|
||||
kwargs={'document_id': self.document.pk}, data={
|
||||
'form-0-id': self.document_metadata.metadata_type.pk,
|
||||
'form-0-update': True,
|
||||
'form-TOTAL_FORMS': '1',
|
||||
@@ -338,7 +338,7 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
|
||||
|
||||
self.post(
|
||||
viewname='metadata:document_metadata_add',
|
||||
kwargs={'pk': self.document.pk}, data={
|
||||
kwargs={'document_id': self.document.pk}, data={
|
||||
'metadata_type': [self.metadata_type.pk, metadata_type_2.pk],
|
||||
}
|
||||
)
|
||||
@@ -385,7 +385,7 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie
|
||||
|
||||
response = self._request_metadata_type_delete_view()
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertQuerysetEqual(
|
||||
qs=MetadataType.objects.values('label', 'name'),
|
||||
values=[
|
||||
@@ -414,7 +414,7 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie
|
||||
|
||||
response = self._request_metadata_type_edit_view()
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertQuerysetEqual(
|
||||
qs=MetadataType.objects.values('label', 'name'),
|
||||
values=[
|
||||
@@ -472,8 +472,7 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie
|
||||
self.upload_document()
|
||||
|
||||
response = self._request_metadata_type_relationship_edit_view()
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
self.document_type.refresh_from_db()
|
||||
|
||||
@@ -489,8 +488,7 @@ class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericVie
|
||||
)
|
||||
|
||||
response = self._request_metadata_type_relationship_edit_view()
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
self.document_type.refresh_from_db()
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ class DocumentUploadMetadataTestCase(MetadataTypeTestMixin, GenericDocumentViewT
|
||||
)
|
||||
|
||||
def test_upload_interactive_with_unicode_metadata(self):
|
||||
url = furl(reverse('sources:upload_interactive'))
|
||||
url = furl(reverse(viewname='sources:upload_interactive'))
|
||||
url.args['metadata0_id'] = self.metadata_type.pk
|
||||
url.args['metadata0_value'] = TEST_METADATA_VALUE_UNICODE
|
||||
|
||||
@@ -60,7 +60,7 @@ class DocumentUploadMetadataTestCase(MetadataTypeTestMixin, GenericDocumentViewT
|
||||
)
|
||||
|
||||
def test_upload_interactive_with_ampersand_metadata(self):
|
||||
url = furl(reverse('sources:upload_interactive'))
|
||||
url = furl(reverse(viewname='sources:upload_interactive'))
|
||||
url.args['metadata0_id'] = self.metadata_type.pk
|
||||
url.args['metadata0_value'] = TEST_METADATA_VALUE_WITH_AMPERSAND
|
||||
|
||||
|
||||
@@ -17,8 +17,34 @@ from .views import (
|
||||
|
||||
urlpatterns = [
|
||||
url(
|
||||
regex=r'^documents/(?P<pk>\d+)/edit/$', name='document_metadata_edit',
|
||||
view=DocumentMetadataEditView.as_view()
|
||||
regex=r'^metadata_types/$', name='metadata_type_list',
|
||||
view=MetadataTypeListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^metadata_types/create/$', name='metadata_type_create',
|
||||
view=MetadataTypeCreateView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^metadata_types/(?P<metadata_type_id>\d+)/delete/$',
|
||||
name='metadata_type_delete', view=MetadataTypeDeleteView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^metadata_types/(?P<metadata_type_id>\d+)/edit/$',
|
||||
name='metadata_type_edit', view=MetadataTypeEditView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^metadata_types/(?P<metadata_type_id>\d+)/document_types/$',
|
||||
name='metadata_type_document_types',
|
||||
view=SetupMetadataTypesDocumentTypes.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^document_types/(?P<document_type_id>\d+)/metadata_types/$',
|
||||
name='document_type_metadata_types',
|
||||
view=SetupDocumentTypeMetadataTypes.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<document_id>\d+)/edit/$',
|
||||
name='document_metadata_edit', view=DocumentMetadataEditView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/multiple/edit/$',
|
||||
@@ -26,12 +52,13 @@ urlpatterns = [
|
||||
view=DocumentMetadataEditView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<pk>\d+)/view/$', name='document_metadata_view',
|
||||
regex=r'^documents/(?P<document_id>\d+)/view/$',
|
||||
name='document_metadata_view',
|
||||
view=DocumentMetadataListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<pk>\d+)/add/$', name='document_metadata_add',
|
||||
view=DocumentMetadataAddView.as_view()
|
||||
regex=r'^documents/(?P<document_id>\d+)/add/$',
|
||||
name='document_metadata_add', view=DocumentMetadataAddView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/multiple/add/$',
|
||||
@@ -39,7 +66,7 @@ urlpatterns = [
|
||||
view=DocumentMetadataAddView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<pk>\d+)/remove/$',
|
||||
regex=r'^documents/(?P<document_id>\d+)/remove/$',
|
||||
name='document_metadata_remove',
|
||||
view=DocumentMetadataRemoveView.as_view()
|
||||
),
|
||||
@@ -47,34 +74,7 @@ urlpatterns = [
|
||||
regex=r'^documents/multiple/remove/$',
|
||||
name='document_multiple_metadata_remove',
|
||||
view=DocumentMetadataRemoveView.as_view()
|
||||
),
|
||||
|
||||
url(
|
||||
regex=r'^types/list/$', name='metadata_type_list',
|
||||
view=MetadataTypeListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^types/create/$', name='metadata_type_create',
|
||||
view=MetadataTypeCreateView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^types/(?P<pk>\d+)/edit/$', name='metadata_type_edit',
|
||||
view=MetadataTypeEditView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^types/(?P<pk>\d+)/delete/$', name='metadata_type_delete',
|
||||
view=MetadataTypeDeleteView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^document_types/(?P<pk>\d+)/metadata_types/$',
|
||||
name='document_type_metadata_types',
|
||||
view=SetupDocumentTypeMetadataTypes.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^metadata_types/(?P<pk>\d+)/document_types/$',
|
||||
name='metadata_type_document_types',
|
||||
view=SetupMetadataTypesDocumentTypes.as_view()
|
||||
),
|
||||
)
|
||||
]
|
||||
|
||||
api_urls = [
|
||||
@@ -83,28 +83,28 @@ api_urls = [
|
||||
view=APIMetadataTypeListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^metadata_types/(?P<metadata_type_pk>\d+)/$',
|
||||
regex=r'^metadata_types/(?P<metadata_type_id>\d+)/$',
|
||||
name='metadatatype-detail',
|
||||
view=APIMetadataTypeView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^document_types/(?P<document_type_pk>\d+)/metadata_types/$',
|
||||
regex=r'^document_types/(?P<document_type_id>\d+)/metadata_types/$',
|
||||
name='documenttypemetadatatype-list',
|
||||
view=APIDocumentTypeMetadataTypeListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^document_types/(?P<document_type_pk>\d+)/metadata_types/(?P<metadata_type_pk>\d+)/$',
|
||||
regex=r'^document_types/(?P<document_type_id>\d+)/metadata_types/(?P<metadata_type_id>\d+)/$',
|
||||
name='documenttypemetadatatype-detail',
|
||||
view=APIDocumentTypeMetadataTypeView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<document_pk>\d+)/metadata/$',
|
||||
regex=r'^documents/(?P<document_id>\d+)/metadata/$',
|
||||
name='documentmetadata-list',
|
||||
view=APIDocumentMetadataListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<document_pk>\d+)/metadata/(?P<metadata_pk>\d+)/$',
|
||||
regex=r'^documents/(?P<document_id>\d+)/metadata/(?P<metadata_id>\d+)/$',
|
||||
name='documentmetadata-detail',
|
||||
view=APIDocumentMetadataView.as_view()
|
||||
),
|
||||
)
|
||||
]
|
||||
|
||||
@@ -45,6 +45,7 @@ class DocumentMetadataAddView(MultipleObjectFormActionView):
|
||||
form_class = DocumentMetadataAddForm
|
||||
model = Document
|
||||
object_permission = permission_document_metadata_add
|
||||
pk_url_kwarg = 'document_id'
|
||||
success_message = _('Metadata add request performed on %(count)d document')
|
||||
success_message_plural = _(
|
||||
'Metadata add request performed on %(count)d documents'
|
||||
@@ -62,9 +63,11 @@ class DocumentMetadataAddView(MultipleObjectFormActionView):
|
||||
|
||||
if len(set([document.document_type.pk for document in queryset])) > 1:
|
||||
messages.error(
|
||||
request, _('Selected documents must be of the same type.')
|
||||
message=_(
|
||||
'Selected documents must be of the same type.'
|
||||
), request=request
|
||||
)
|
||||
return HttpResponseRedirect(self.previous_url)
|
||||
return HttpResponseRedirect(redirect_to=self.previous_url)
|
||||
|
||||
return result
|
||||
|
||||
@@ -75,14 +78,14 @@ class DocumentMetadataAddView(MultipleObjectFormActionView):
|
||||
|
||||
if self.action_count == 1:
|
||||
return HttpResponseRedirect(
|
||||
reverse(
|
||||
redirect_to=reverse(
|
||||
viewname='metadata:document_metadata_edit',
|
||||
args=(queryset.first().pk,)
|
||||
kwargs={'document_id': queryset.first().pk}
|
||||
)
|
||||
)
|
||||
elif self.action_count > 1:
|
||||
return HttpResponseRedirect(
|
||||
'%s?%s' % (
|
||||
redirect_to='%s?%s' % (
|
||||
reverse(
|
||||
viewname='metadata:document_multiple_metadata_edit'
|
||||
), urlencode(
|
||||
@@ -106,9 +109,9 @@ class DocumentMetadataAddView(MultipleObjectFormActionView):
|
||||
result = {
|
||||
'submit_label': _('Add'),
|
||||
'title': ungettext(
|
||||
'Add metadata types to document',
|
||||
'Add metadata types to documents',
|
||||
queryset.count()
|
||||
singular='Add metadata types to document',
|
||||
plural='Add metadata types to documents',
|
||||
number=queryset.count()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -169,8 +172,7 @@ class DocumentMetadataAddView(MultipleObjectFormActionView):
|
||||
created = True
|
||||
except Exception as exception:
|
||||
messages.error(
|
||||
self.request,
|
||||
_(
|
||||
message=_(
|
||||
'Error adding metadata type '
|
||||
'"%(metadata_type)s" to document: '
|
||||
'%(document)s; %(exception)s'
|
||||
@@ -180,29 +182,30 @@ class DocumentMetadataAddView(MultipleObjectFormActionView):
|
||||
'exception': ', '.join(
|
||||
getattr(exception, 'messages', exception)
|
||||
)
|
||||
}
|
||||
},
|
||||
request=self.request
|
||||
)
|
||||
else:
|
||||
if created:
|
||||
messages.success(
|
||||
self.request,
|
||||
_(
|
||||
message=_(
|
||||
'Metadata type: %(metadata_type)s '
|
||||
'successfully added to document %(document)s.'
|
||||
) % {
|
||||
'metadata_type': metadata_type,
|
||||
'document': instance
|
||||
}
|
||||
},
|
||||
request=self.request
|
||||
)
|
||||
else:
|
||||
messages.warning(
|
||||
self.request, _(
|
||||
message=_(
|
||||
'Metadata type: %(metadata_type)s already '
|
||||
'present in document %(document)s.'
|
||||
) % {
|
||||
'metadata_type': metadata_type,
|
||||
'document': instance
|
||||
}
|
||||
}, request=self.request
|
||||
)
|
||||
|
||||
|
||||
@@ -210,6 +213,7 @@ class DocumentMetadataEditView(MultipleObjectFormActionView):
|
||||
form_class = DocumentMetadataFormSet
|
||||
model = Document
|
||||
object_permission = permission_document_metadata_edit
|
||||
pk_url_kwarg = 'document_id'
|
||||
success_message = _(
|
||||
'Metadata edit request performed on %(count)d document'
|
||||
)
|
||||
@@ -229,9 +233,11 @@ class DocumentMetadataEditView(MultipleObjectFormActionView):
|
||||
|
||||
if len(set([document.document_type.pk for document in queryset])) > 1:
|
||||
messages.error(
|
||||
request, _('Selected documents must be of the same type.')
|
||||
message=_(
|
||||
'Selected documents must be of the same type.'
|
||||
), request=request
|
||||
)
|
||||
return HttpResponseRedirect(self.previous_url)
|
||||
return HttpResponseRedirect(redirect_to=self.previous_url)
|
||||
|
||||
return result
|
||||
|
||||
@@ -242,14 +248,14 @@ class DocumentMetadataEditView(MultipleObjectFormActionView):
|
||||
|
||||
if self.action_count == 1:
|
||||
return HttpResponseRedirect(
|
||||
reverse(
|
||||
redirect_to=reverse(
|
||||
viewname='metadata:document_metadata_edit',
|
||||
args=(queryset.first().pk,)
|
||||
kwargs={'document_id': queryset.first().pk}
|
||||
)
|
||||
)
|
||||
elif self.action_count > 1:
|
||||
return HttpResponseRedirect(
|
||||
'%s?%s' % (
|
||||
redirect_to='%s?%s' % (
|
||||
reverse(
|
||||
viewname='metadata:document_multiple_metadata_edit'
|
||||
), urlencode(
|
||||
@@ -303,9 +309,9 @@ class DocumentMetadataEditView(MultipleObjectFormActionView):
|
||||
'no_results_title': _('There is no metadata to edit'),
|
||||
'submit_label': _('Edit'),
|
||||
'title': ungettext(
|
||||
'Edit document metadata',
|
||||
'Edit documents metadata',
|
||||
queryset.count()
|
||||
singular='Edit document metadata',
|
||||
plural='Edit documents metadata',
|
||||
number=queryset.count()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -371,36 +377,31 @@ class DocumentMetadataEditView(MultipleObjectFormActionView):
|
||||
exception_message = force_text(error)
|
||||
|
||||
messages.error(
|
||||
self.request, _(
|
||||
message=_(
|
||||
'Error editing metadata for document: '
|
||||
'%(document)s; %(exception)s.'
|
||||
) % {
|
||||
'document': instance,
|
||||
'exception': exception_message
|
||||
}
|
||||
}, request=self.request
|
||||
)
|
||||
else:
|
||||
messages.success(
|
||||
self.request,
|
||||
_(
|
||||
message=_(
|
||||
'Metadata for document %s edited successfully.'
|
||||
) % instance
|
||||
) % instance, request=self.request
|
||||
)
|
||||
|
||||
|
||||
class DocumentMetadataListView(SingleObjectListView):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_document_metadata_view,
|
||||
user=self.request.user, obj=self.get_document()
|
||||
)
|
||||
|
||||
return super(DocumentMetadataListView, self).dispatch(
|
||||
request, *args, **kwargs
|
||||
)
|
||||
|
||||
def get_document(self):
|
||||
return get_object_or_404(klass=Document, pk=self.kwargs['pk'])
|
||||
queryset = AccessControlList.objects.restrict_queryset(
|
||||
permission=permission_document_metadata_view,
|
||||
queryset=Document.objects.all(),
|
||||
user=self.request.user
|
||||
)
|
||||
|
||||
return get_object_or_404(klass=queryset, pk=self.kwargs['document_id'])
|
||||
|
||||
def get_extra_context(self):
|
||||
document = self.get_document()
|
||||
@@ -431,6 +432,7 @@ class DocumentMetadataRemoveView(MultipleObjectFormActionView):
|
||||
form_class = DocumentMetadataRemoveFormSet
|
||||
model = Document
|
||||
object_permission = permission_document_metadata_remove
|
||||
pk_url_kwarg = 'document_id'
|
||||
success_message = _(
|
||||
'Metadata remove request performed on %(count)d document'
|
||||
)
|
||||
@@ -450,9 +452,11 @@ class DocumentMetadataRemoveView(MultipleObjectFormActionView):
|
||||
|
||||
if len(set([document.document_type.pk for document in queryset])) > 1:
|
||||
messages.error(
|
||||
request, _('Selected documents must be of the same type.')
|
||||
message=_(
|
||||
'Selected documents must be of the same type.'
|
||||
), request=request
|
||||
)
|
||||
return HttpResponseRedirect(self.previous_url)
|
||||
return HttpResponseRedirect(redirect_to=self.previous_url)
|
||||
|
||||
return result
|
||||
|
||||
@@ -463,14 +467,14 @@ class DocumentMetadataRemoveView(MultipleObjectFormActionView):
|
||||
|
||||
if self.action_count == 1:
|
||||
return HttpResponseRedirect(
|
||||
reverse(
|
||||
redirect_to=reverse(
|
||||
viewname='metadata:document_metadata_edit',
|
||||
args=(queryset.first().pk,)
|
||||
kwargs={'document_id': queryset.first().pk}
|
||||
)
|
||||
)
|
||||
elif self.action_count > 1:
|
||||
return HttpResponseRedirect(
|
||||
'%s?%s' % (
|
||||
redirect_to='%s?%s' % (
|
||||
reverse(
|
||||
viewname='metadata:document_multiple_metadata_edit'
|
||||
), urlencode(
|
||||
@@ -495,9 +499,9 @@ class DocumentMetadataRemoveView(MultipleObjectFormActionView):
|
||||
'form_display_mode_table': True,
|
||||
'submit_label': _('Remove'),
|
||||
'title': ungettext(
|
||||
'Remove metadata types from the document',
|
||||
'Remove metadata types from the documents',
|
||||
queryset.count()
|
||||
singular='Remove metadata types from the document',
|
||||
plural='Remove metadata types from the documents',
|
||||
number=queryset.count()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -553,24 +557,22 @@ class DocumentMetadataRemoveView(MultipleObjectFormActionView):
|
||||
)
|
||||
document_metadata.delete(_user=self.request.user)
|
||||
messages.success(
|
||||
self.request,
|
||||
_(
|
||||
message=_(
|
||||
'Successfully remove metadata type "%(metadata_type)s" from document: %(document)s.'
|
||||
) % {
|
||||
'metadata_type': metadata_type,
|
||||
'document': instance
|
||||
}
|
||||
}, request=self.request
|
||||
)
|
||||
except Exception as exception:
|
||||
messages.error(
|
||||
self.request,
|
||||
_(
|
||||
message=_(
|
||||
'Error removing metadata type "%(metadata_type)s" from document: %(document)s; %(exception)s'
|
||||
) % {
|
||||
'metadata_type': metadata_type,
|
||||
'document': instance,
|
||||
'exception': ', '.join(exception.messages)
|
||||
}
|
||||
}, request=self.request
|
||||
)
|
||||
|
||||
|
||||
@@ -593,6 +595,7 @@ class MetadataTypeCreateView(SingleObjectCreateView):
|
||||
class MetadataTypeDeleteView(SingleObjectDeleteView):
|
||||
model = MetadataType
|
||||
object_permission = permission_metadata_type_delete
|
||||
pk_url_kwarg = 'metadata_type_id'
|
||||
post_action_redirect = reverse_lazy(
|
||||
viewname='metadata:metadata_type_list'
|
||||
)
|
||||
@@ -609,6 +612,7 @@ class MetadataTypeEditView(SingleObjectEditView):
|
||||
form_class = MetadataTypeForm
|
||||
model = MetadataType
|
||||
object_permission = permission_metadata_type_edit
|
||||
pk_url_kwarg = 'metadata_type_id'
|
||||
post_action_redirect = reverse_lazy(
|
||||
viewname='metadata:metadata_type_list'
|
||||
)
|
||||
@@ -663,12 +667,14 @@ class SetupDocumentTypeMetadataTypes(FormView):
|
||||
instance.save()
|
||||
except Exception as exception:
|
||||
messages.error(
|
||||
self.request,
|
||||
_('Error updating relationship; %s') % exception
|
||||
message=_('Error updating relationship; %s') % exception,
|
||||
request=self.request
|
||||
)
|
||||
else:
|
||||
messages.success(
|
||||
self.request, _('Relationships updated successfully')
|
||||
message=_(
|
||||
'Relationships updated successfully'
|
||||
), request=self.request
|
||||
)
|
||||
|
||||
return super(
|
||||
@@ -703,24 +709,27 @@ class SetupDocumentTypeMetadataTypes(FormView):
|
||||
initial = []
|
||||
|
||||
for element in self.get_queryset():
|
||||
initial.append({
|
||||
'document_type': obj,
|
||||
'main_model': self.main_model,
|
||||
'metadata_type': element,
|
||||
})
|
||||
initial.append(
|
||||
{
|
||||
'document_type': obj,
|
||||
'main_model': self.main_model,
|
||||
'metadata_type': element,
|
||||
}
|
||||
)
|
||||
return initial
|
||||
|
||||
def get_object(self):
|
||||
obj = get_object_or_404(klass=self.model, pk=self.kwargs['pk'])
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=(permission_metadata_type_edit,),
|
||||
user=self.request.user, obj=obj
|
||||
queryset = AccessControlList.objects.restrict_queryset(
|
||||
permission=permission_metadata_type_edit,
|
||||
queryset=self.model.objects.all(),
|
||||
user=self.request.user
|
||||
)
|
||||
return get_object_or_404(
|
||||
klass=queryset, pk=self.kwargs['document_type_id']
|
||||
)
|
||||
return obj
|
||||
|
||||
def get_post_action_redirect(self):
|
||||
return reverse('documents:document_type_list')
|
||||
return reverse(viewname='documents:document_type_list')
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = self.submodel.objects.all()
|
||||
@@ -749,12 +758,24 @@ class SetupMetadataTypesDocumentTypes(SetupDocumentTypeMetadataTypes):
|
||||
initial = []
|
||||
|
||||
for element in self.get_queryset():
|
||||
initial.append({
|
||||
'document_type': element,
|
||||
'main_model': self.main_model,
|
||||
'metadata_type': obj,
|
||||
})
|
||||
initial.append(
|
||||
{
|
||||
'document_type': element,
|
||||
'main_model': self.main_model,
|
||||
'metadata_type': obj,
|
||||
}
|
||||
)
|
||||
return initial
|
||||
|
||||
def get_object(self):
|
||||
queryset = AccessControlList.objects.restrict_queryset(
|
||||
permission=permission_metadata_type_edit,
|
||||
queryset=self.model.objects.all(),
|
||||
user=self.request.user
|
||||
)
|
||||
return get_object_or_404(
|
||||
klass=queryset, pk=self.kwargs['metadata_type_id']
|
||||
)
|
||||
|
||||
def get_post_action_redirect(self):
|
||||
return reverse(viewname='metadata:metadata_type_list')
|
||||
|
||||
Reference in New Issue
Block a user