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:
Roberto Rosario
2019-01-21 03:31:19 -04:00
parent 09edab5027
commit 166183dff9
15 changed files with 252 additions and 230 deletions

View File

@@ -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(

View File

@@ -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'
)

View File

@@ -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)

View File

@@ -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'
)

View File

@@ -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

View File

@@ -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

View File

@@ -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'
)

View File

@@ -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'
)

View File

@@ -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):

View File

@@ -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',

View File

@@ -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',

View File

@@ -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()

View File

@@ -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

View File

@@ -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()
),
)
]

View File

@@ -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')