Add from __future__ import unicode_literals, issue #37
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import logging
|
||||
|
||||
@@ -19,19 +19,19 @@ from rest_api.classes import APIEndPoint
|
||||
|
||||
from .api import get_metadata_string
|
||||
from .classes import DocumentMetadataHelper
|
||||
from .links import (metadata_add, metadata_edit, metadata_multiple_add,
|
||||
metadata_multiple_edit, metadata_multiple_remove,
|
||||
metadata_remove, metadata_view,
|
||||
setup_document_type_metadata,
|
||||
setup_document_type_metadata_required,
|
||||
setup_metadata_type_create, setup_metadata_type_delete,
|
||||
setup_metadata_type_edit, setup_metadata_type_list,
|
||||
link_documents_missing_required_metadata)
|
||||
from .links import (
|
||||
metadata_add, metadata_edit, metadata_multiple_add, metadata_multiple_edit,
|
||||
metadata_multiple_remove, metadata_remove, metadata_view,
|
||||
setup_document_type_metadata, setup_document_type_metadata_required,
|
||||
setup_metadata_type_create, setup_metadata_type_delete,
|
||||
setup_metadata_type_edit, setup_metadata_type_list,
|
||||
link_documents_missing_required_metadata
|
||||
)
|
||||
from .models import DocumentMetadata, DocumentTypeMetadataType, MetadataType
|
||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW)
|
||||
from .permissions import (
|
||||
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE, PERMISSION_METADATA_DOCUMENT_VIEW
|
||||
)
|
||||
from .tasks import task_add_required_metadata_type, task_remove_metadata_type
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -83,7 +83,7 @@ class_permissions(Document, [
|
||||
|
||||
register_model_list_columns(Document, [
|
||||
{
|
||||
'name': _(u'Metadata'), 'attribute': encapsulate(lambda x: get_metadata_string(x))
|
||||
'name': _('Metadata'), 'attribute': encapsulate(lambda x: get_metadata_string(x))
|
||||
},
|
||||
])
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
"""Metadata handling commonalities"""
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from urllib import unquote_plus
|
||||
|
||||
@@ -83,7 +82,7 @@ def metadata_repr(metadata_list):
|
||||
"""
|
||||
Return a printable representation of a metadata list
|
||||
"""
|
||||
return u', '.join(metadata_repr_as_list(metadata_list))
|
||||
return ', '.join(metadata_repr_as_list(metadata_list))
|
||||
|
||||
|
||||
def metadata_repr_as_list(metadata_list):
|
||||
@@ -93,7 +92,7 @@ def metadata_repr_as_list(metadata_list):
|
||||
output = []
|
||||
for metadata_dict in metadata_list:
|
||||
try:
|
||||
output.append(u'%s - %s' % (MetadataType.objects.get(
|
||||
output.append('%s - %s' % (MetadataType.objects.get(
|
||||
pk=metadata_dict['id']), metadata_dict.get('value', '')))
|
||||
except:
|
||||
pass
|
||||
@@ -105,7 +104,7 @@ def get_metadata_string(document):
|
||||
"""
|
||||
Return a formated representation of a document's metadata values
|
||||
"""
|
||||
return u', '.join([u'%s - %s' % (document_metadata.metadata_type, document_metadata.value) for document_metadata in document.metadata.all()])
|
||||
return ', '.join(['%s - %s' % (document_metadata.metadata_type, document_metadata.value) for document_metadata in document.metadata.all()])
|
||||
|
||||
|
||||
def convert_dict_to_dict_list(dictionary):
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.shortcuts import get_object_or_404
|
||||
@@ -8,26 +8,25 @@ from rest_framework.response import Response
|
||||
|
||||
from acls.models import AccessEntry
|
||||
from documents.models import Document, DocumentType
|
||||
from documents.permissions import (PERMISSION_DOCUMENT_TYPE_VIEW,
|
||||
PERMISSION_DOCUMENT_TYPE_EDIT)
|
||||
from documents.permissions import (
|
||||
PERMISSION_DOCUMENT_TYPE_VIEW, PERMISSION_DOCUMENT_TYPE_EDIT
|
||||
)
|
||||
|
||||
from permissions.models import Permission
|
||||
from rest_api.filters import MayanObjectPermissionsFilter
|
||||
from rest_api.permissions import MayanPermission
|
||||
|
||||
from .models import DocumentMetadata, MetadataType
|
||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||
PERMISSION_METADATA_TYPE_CREATE,
|
||||
PERMISSION_METADATA_TYPE_DELETE,
|
||||
PERMISSION_METADATA_TYPE_EDIT,
|
||||
PERMISSION_METADATA_TYPE_VIEW)
|
||||
from .serializers import (DocumentMetadataSerializer,
|
||||
DocumentNewMetadataSerializer,
|
||||
DocumentTypeNewMetadataTypeSerializer,
|
||||
MetadataTypeSerializer)
|
||||
from .permissions import (
|
||||
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT, PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||
PERMISSION_METADATA_TYPE_CREATE, PERMISSION_METADATA_TYPE_DELETE,
|
||||
PERMISSION_METADATA_TYPE_EDIT, PERMISSION_METADATA_TYPE_VIEW
|
||||
)
|
||||
from .serializers import (
|
||||
DocumentMetadataSerializer, DocumentNewMetadataSerializer,
|
||||
DocumentTypeNewMetadataTypeSerializer, MetadataTypeSerializer
|
||||
)
|
||||
|
||||
|
||||
class APIMetadataTypeListView(generics.ListCreateAPIView):
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from .models import MetadataType
|
||||
@@ -16,4 +18,4 @@ class DocumentMetadataHelper(object):
|
||||
try:
|
||||
return self.instance.metadata.get(metadata_type__name=name).value
|
||||
except MetadataType.DoesNotExist:
|
||||
raise AttributeError(_(u'\'metadata\' object has no attribute \'%s\'') % name)
|
||||
raise AttributeError(_('\'metadata\' object has no attribute \'%s\'') % name)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django import forms
|
||||
from django.core.exceptions import ValidationError
|
||||
@@ -34,7 +34,7 @@ class MetadataForm(forms.Form):
|
||||
# Otherwise we extract whatever single message the exception
|
||||
# included.
|
||||
try:
|
||||
message = u', '.join(exception.messages)
|
||||
message = ', '.join(exception.messages)
|
||||
except AttributeError:
|
||||
message = unicode(exception)
|
||||
|
||||
@@ -56,11 +56,11 @@ class MetadataForm(forms.Form):
|
||||
if 'initial' in kwargs:
|
||||
self.metadata_type = kwargs['initial'].pop('metadata_type', None)
|
||||
required = kwargs['initial'].pop('required', False)
|
||||
required_string = u''
|
||||
required_string = ''
|
||||
|
||||
if required:
|
||||
self.fields['value'].required = True
|
||||
required_string = u' (%s)' % _('Required')
|
||||
required_string = ' (%s)' % _('Required')
|
||||
else:
|
||||
self.fields['value'].required = False
|
||||
|
||||
@@ -86,17 +86,17 @@ class MetadataForm(forms.Form):
|
||||
except Exception as exception:
|
||||
self.fields['value'].initial = exception
|
||||
|
||||
id = forms.CharField(label=_(u'ID'), widget=forms.HiddenInput)
|
||||
id = forms.CharField(label=_('ID'), widget=forms.HiddenInput)
|
||||
|
||||
name = forms.CharField(label=_(u'Name'), required=False, widget=forms.TextInput(attrs={'readonly': 'readonly'}))
|
||||
value = forms.CharField(label=_(u'Value'), required=False)
|
||||
update = forms.BooleanField(initial=True, label=_(u'Update'), required=False)
|
||||
name = forms.CharField(label=_('Name'), required=False, widget=forms.TextInput(attrs={'readonly': 'readonly'}))
|
||||
value = forms.CharField(label=_('Value'), required=False)
|
||||
update = forms.BooleanField(initial=True, label=_('Update'), required=False)
|
||||
|
||||
MetadataFormSet = formset_factory(MetadataForm, extra=0)
|
||||
|
||||
|
||||
class AddMetadataForm(forms.Form):
|
||||
metadata_type = forms.ModelChoiceField(queryset=MetadataType.objects.all(), label=_(u'Metadata type'))
|
||||
metadata_type = forms.ModelChoiceField(queryset=MetadataType.objects.all(), label=_('Metadata type'))
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
document_type = kwargs.pop('document_type')
|
||||
@@ -105,7 +105,7 @@ class AddMetadataForm(forms.Form):
|
||||
|
||||
|
||||
class MetadataRemoveForm(MetadataForm):
|
||||
update = forms.BooleanField(initial=False, label=_(u'Remove'), required=False)
|
||||
update = forms.BooleanField(initial=False, label=_('Remove'), required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(MetadataRemoveForm, self).__init__(*args, **kwargs)
|
||||
|
||||
@@ -1,33 +1,31 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from documents.permissions import PERMISSION_DOCUMENT_TYPE_EDIT
|
||||
|
||||
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE,
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||
PERMISSION_METADATA_TYPE_CREATE,
|
||||
PERMISSION_METADATA_TYPE_DELETE,
|
||||
PERMISSION_METADATA_TYPE_EDIT,
|
||||
PERMISSION_METADATA_TYPE_VIEW)
|
||||
from .permissions import (
|
||||
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE, PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||
PERMISSION_METADATA_TYPE_CREATE, PERMISSION_METADATA_TYPE_DELETE,
|
||||
PERMISSION_METADATA_TYPE_EDIT, PERMISSION_METADATA_TYPE_VIEW
|
||||
)
|
||||
|
||||
|
||||
metadata_edit = {'text': _(u'Edit metadata'), 'view': 'metadata:metadata_edit', 'args': 'object.pk', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]}
|
||||
metadata_view = {'text': _(u'Metadata'), 'view': 'metadata:metadata_view', 'args': 'object.pk', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_DOCUMENT_VIEW]}
|
||||
metadata_multiple_edit = {'text': _(u'Edit metadata'), 'view': 'metadata:metadata_multiple_edit', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]}
|
||||
metadata_add = {'text': _(u'Add metadata'), 'view': 'metadata:metadata_add', 'args': 'object.pk', 'famfam': 'xhtml_add', 'permissions': [PERMISSION_METADATA_DOCUMENT_ADD]}
|
||||
metadata_multiple_add = {'text': _(u'Add metadata'), 'view': 'metadata:metadata_multiple_add', 'famfam': 'xhtml_add', 'permissions': [PERMISSION_METADATA_DOCUMENT_ADD]}
|
||||
metadata_remove = {'text': _(u'Remove metadata'), 'view': 'metadata:metadata_remove', 'args': 'object.pk', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_DOCUMENT_REMOVE]}
|
||||
metadata_multiple_remove = {'text': _(u'Remove metadata'), 'view': 'metadata:metadata_multiple_remove', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_DOCUMENT_REMOVE]}
|
||||
metadata_edit = {'text': _('Edit metadata'), 'view': 'metadata:metadata_edit', 'args': 'object.pk', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]}
|
||||
metadata_view = {'text': _('Metadata'), 'view': 'metadata:metadata_view', 'args': 'object.pk', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_DOCUMENT_VIEW]}
|
||||
metadata_multiple_edit = {'text': _('Edit metadata'), 'view': 'metadata:metadata_multiple_edit', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]}
|
||||
metadata_add = {'text': _('Add metadata'), 'view': 'metadata:metadata_add', 'args': 'object.pk', 'famfam': 'xhtml_add', 'permissions': [PERMISSION_METADATA_DOCUMENT_ADD]}
|
||||
metadata_multiple_add = {'text': _('Add metadata'), 'view': 'metadata:metadata_multiple_add', 'famfam': 'xhtml_add', 'permissions': [PERMISSION_METADATA_DOCUMENT_ADD]}
|
||||
metadata_remove = {'text': _('Remove metadata'), 'view': 'metadata:metadata_remove', 'args': 'object.pk', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_DOCUMENT_REMOVE]}
|
||||
metadata_multiple_remove = {'text': _('Remove metadata'), 'view': 'metadata:metadata_multiple_remove', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_DOCUMENT_REMOVE]}
|
||||
|
||||
setup_document_type_metadata = {'text': _(u'Optional metadata'), 'view': 'metadata:setup_document_type_metadata', 'args': 'document_type.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
|
||||
setup_document_type_metadata_required = {'text': _(u'Required metadata'), 'view': 'metadata:setup_document_type_metadata_required', 'args': 'document_type.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
|
||||
setup_document_type_metadata = {'text': _('Optional metadata'), 'view': 'metadata:setup_document_type_metadata', 'args': 'document_type.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
|
||||
setup_document_type_metadata_required = {'text': _('Required metadata'), 'view': 'metadata:setup_document_type_metadata_required', 'args': 'document_type.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
|
||||
|
||||
setup_metadata_type_list = {'text': _(u'Metadata types'), 'view': 'metadata:setup_metadata_type_list', 'famfam': 'xhtml_go', 'icon': 'xhtml.png', 'permissions': [PERMISSION_METADATA_TYPE_VIEW]}
|
||||
setup_metadata_type_edit = {'text': _(u'Edit'), 'view': 'metadata:setup_metadata_type_edit', 'args': 'object.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_METADATA_TYPE_EDIT]}
|
||||
setup_metadata_type_delete = {'text': _(u'Delete'), 'view': 'metadata:setup_metadata_type_delete', 'args': 'object.pk', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_TYPE_DELETE]}
|
||||
setup_metadata_type_create = {'text': _(u'Create new'), 'view': 'metadata:setup_metadata_type_create', 'famfam': 'xhtml_add', 'permissions': [PERMISSION_METADATA_TYPE_CREATE]}
|
||||
setup_metadata_type_list = {'text': _('Metadata types'), 'view': 'metadata:setup_metadata_type_list', 'famfam': 'xhtml_go', 'icon': 'xhtml.png', 'permissions': [PERMISSION_METADATA_TYPE_VIEW]}
|
||||
setup_metadata_type_edit = {'text': _('Edit'), 'view': 'metadata:setup_metadata_type_edit', 'args': 'object.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_METADATA_TYPE_EDIT]}
|
||||
setup_metadata_type_delete = {'text': _('Delete'), 'view': 'metadata:setup_metadata_type_delete', 'args': 'object.pk', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_TYPE_DELETE]}
|
||||
setup_metadata_type_create = {'text': _('Create new'), 'view': 'metadata:setup_metadata_type_create', 'famfam': 'xhtml_add', 'permissions': [PERMISSION_METADATA_TYPE_CREATE]}
|
||||
|
||||
link_documents_missing_required_metadata = {'text': _(u'Missing metadata'), 'view': 'metadata:documents_missing_required_metadata', 'icon': 'to_do_list.png'}
|
||||
link_documents_missing_required_metadata = {'text': _('Missing metadata'), 'view': 'metadata:documents_missing_required_metadata', 'icon': 'to_do_list.png'}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import models
|
||||
@@ -14,18 +14,18 @@ class MetadataType(models.Model):
|
||||
"""
|
||||
Define a type of metadata
|
||||
"""
|
||||
name = models.CharField(unique=True, max_length=48, verbose_name=_(u'Name'), help_text=_(u'Do not use python reserved words, or spaces.'))
|
||||
name = models.CharField(unique=True, max_length=48, verbose_name=_('Name'), help_text=_('Do not use python reserved words, or spaces.'))
|
||||
# TODO: normalize 'title' to 'label'
|
||||
title = models.CharField(max_length=48, verbose_name=_(u'Title'))
|
||||
title = models.CharField(max_length=48, verbose_name=_('Title'))
|
||||
default = models.CharField(max_length=128, blank=True, null=True,
|
||||
verbose_name=_(u'Default'),
|
||||
help_text=_(u'Enter a string to be evaluated.'))
|
||||
verbose_name=_('Default'),
|
||||
help_text=_('Enter a string to be evaluated.'))
|
||||
# TODO: Add enable_lookup boolean to allow users to switch the lookup on and
|
||||
# off without losing the lookup expression
|
||||
lookup = models.TextField(blank=True, null=True,
|
||||
verbose_name=_(u'Lookup'),
|
||||
help_text=_(u'Enter a string to be evaluated that returns an iterable.'))
|
||||
validation = models.CharField(blank=True, choices=zip(AVAILABLE_VALIDATORS, AVAILABLE_VALIDATORS), max_length=64, verbose_name=_(u'Validation function name'))
|
||||
verbose_name=_('Lookup'),
|
||||
help_text=_('Enter a string to be evaluated that returns an iterable.'))
|
||||
validation = models.CharField(blank=True, choices=zip(AVAILABLE_VALIDATORS, AVAILABLE_VALIDATORS), max_length=64, verbose_name=_('Validation function name'))
|
||||
# TODO: Find a different way to let users know what models and functions are
|
||||
# available now that we removed these from the help_text
|
||||
objects = MetadataTypeManager()
|
||||
@@ -38,8 +38,8 @@ class MetadataType(models.Model):
|
||||
|
||||
class Meta:
|
||||
ordering = ('title',)
|
||||
verbose_name = _(u'Metadata type')
|
||||
verbose_name_plural = _(u'Metadata types')
|
||||
verbose_name = _('Metadata type')
|
||||
verbose_name_plural = _('Metadata types')
|
||||
|
||||
|
||||
class DocumentMetadata(models.Model):
|
||||
@@ -47,9 +47,9 @@ class DocumentMetadata(models.Model):
|
||||
Link a document to a specific instance of a metadata type with it's
|
||||
current value
|
||||
"""
|
||||
document = models.ForeignKey(Document, related_name='metadata', verbose_name=_(u'Document'))
|
||||
metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'Type'))
|
||||
value = models.CharField(max_length=255, blank=True, null=True, verbose_name=_(u'Value'), db_index=True)
|
||||
document = models.ForeignKey(Document, related_name='metadata', verbose_name=_('Document'))
|
||||
metadata_type = models.ForeignKey(MetadataType, verbose_name=_('Type'))
|
||||
value = models.CharField(max_length=255, blank=True, null=True, verbose_name=_('Value'), db_index=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return unicode(self.metadata_type)
|
||||
@@ -68,13 +68,13 @@ class DocumentMetadata(models.Model):
|
||||
|
||||
class Meta:
|
||||
unique_together = ('document', 'metadata_type')
|
||||
verbose_name = _(u'Document metadata')
|
||||
verbose_name_plural = _(u'Document metadata')
|
||||
verbose_name = _('Document metadata')
|
||||
verbose_name_plural = _('Document metadata')
|
||||
|
||||
|
||||
class DocumentTypeMetadataType(models.Model):
|
||||
document_type = models.ForeignKey(DocumentType, related_name='metadata', verbose_name=_(u'Document type'))
|
||||
metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'Metadata type'))
|
||||
document_type = models.ForeignKey(DocumentType, related_name='metadata', verbose_name=_('Document type'))
|
||||
metadata_type = models.ForeignKey(MetadataType, verbose_name=_('Metadata type'))
|
||||
required = models.BooleanField(default=False, verbose_name=_('Required'))
|
||||
|
||||
def __unicode__(self):
|
||||
@@ -82,5 +82,5 @@ class DocumentTypeMetadataType(models.Model):
|
||||
|
||||
class Meta:
|
||||
unique_together = ('document_type', 'metadata_type')
|
||||
verbose_name = _(u'Document type metadata type options')
|
||||
verbose_name_plural = _(u'Document type metadata types options')
|
||||
verbose_name = _('Document type metadata type options')
|
||||
verbose_name_plural = _('Document type metadata types options')
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from permissions.models import Permission, PermissionNamespace
|
||||
|
||||
metadata_namespace = PermissionNamespace('metadata', _(u'Metadata'))
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT = Permission.objects.register(metadata_namespace, 'metadata_document_edit', _(u'Edit a document\'s metadata'))
|
||||
PERMISSION_METADATA_DOCUMENT_ADD = Permission.objects.register(metadata_namespace, 'metadata_document_add', _(u'Add metadata to a document'))
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE = Permission.objects.register(metadata_namespace, 'metadata_document_remove', _(u'Remove metadata from a document'))
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW = Permission.objects.register(metadata_namespace, 'metadata_document_view', _(u'View metadata from a document'))
|
||||
metadata_namespace = PermissionNamespace('metadata', _('Metadata'))
|
||||
PERMISSION_METADATA_DOCUMENT_EDIT = Permission.objects.register(metadata_namespace, 'metadata_document_edit', _('Edit a document\'s metadata'))
|
||||
PERMISSION_METADATA_DOCUMENT_ADD = Permission.objects.register(metadata_namespace, 'metadata_document_add', _('Add metadata to a document'))
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE = Permission.objects.register(metadata_namespace, 'metadata_document_remove', _('Remove metadata from a document'))
|
||||
PERMISSION_METADATA_DOCUMENT_VIEW = Permission.objects.register(metadata_namespace, 'metadata_document_view', _('View metadata from a document'))
|
||||
|
||||
metadata_setup_namespace = PermissionNamespace('metadata_setup', _(u'Metadata setup'))
|
||||
PERMISSION_METADATA_TYPE_EDIT = Permission.objects.register(metadata_setup_namespace, 'metadata_type_edit', _(u'Edit metadata types'))
|
||||
PERMISSION_METADATA_TYPE_CREATE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_create', _(u'Create new metadata types'))
|
||||
PERMISSION_METADATA_TYPE_DELETE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_delete', _(u'Delete metadata types'))
|
||||
PERMISSION_METADATA_TYPE_VIEW = Permission.objects.register(metadata_setup_namespace, 'metadata_type_view', _(u'View metadata types'))
|
||||
metadata_setup_namespace = PermissionNamespace('metadata_setup', _('Metadata setup'))
|
||||
PERMISSION_METADATA_TYPE_EDIT = Permission.objects.register(metadata_setup_namespace, 'metadata_type_edit', _('Edit metadata types'))
|
||||
PERMISSION_METADATA_TYPE_CREATE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_create', _('Create new metadata types'))
|
||||
PERMISSION_METADATA_TYPE_DELETE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_delete', _('Delete metadata types'))
|
||||
PERMISSION_METADATA_TYPE_VIEW = Permission.objects.register(metadata_setup_namespace, 'metadata_type_view', _('View metadata types'))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"""Configuration options for the metadata app"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from dateutil.parser import parse
|
||||
|
||||
@@ -20,12 +20,12 @@ default_available_validators = {
|
||||
}
|
||||
|
||||
register_settings(
|
||||
namespace=u'metadata',
|
||||
module=u'metadata.settings',
|
||||
namespace='metadata',
|
||||
module='metadata.settings',
|
||||
settings=[
|
||||
# Definition
|
||||
{'name': u'AVAILABLE_FUNCTIONS', 'global_name': u'METADATA_AVAILABLE_FUNCTIONS', 'default': default_available_functions},
|
||||
{'name': u'AVAILABLE_MODELS', 'global_name': u'METADATA_AVAILABLE_MODELS', 'default': default_available_models},
|
||||
{'name': u'AVAILABLE_VALIDATORS', 'global_name': u'METADATA_AVAILABLE_VALIDATORS', 'default': default_available_validators},
|
||||
{'name': 'AVAILABLE_FUNCTIONS', 'global_name': 'METADATA_AVAILABLE_FUNCTIONS', 'default': default_available_functions},
|
||||
{'name': 'AVAILABLE_MODELS', 'global_name': 'METADATA_AVAILABLE_MODELS', 'default': default_available_models},
|
||||
{'name': 'AVAILABLE_VALIDATORS', 'global_name': 'METADATA_AVAILABLE_VALIDATORS', 'default': default_available_validators},
|
||||
]
|
||||
)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf.urls import patterns, url
|
||||
|
||||
from .api_views import (APIDocumentMetadataListView, APIDocumentMetadataView,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
@@ -22,17 +22,16 @@ from common.utils import encapsulate, generate_choices_w_labels
|
||||
from common.views import assign_remove
|
||||
|
||||
from .api import save_metadata_list
|
||||
from .forms import (AddMetadataForm, MetadataFormSet, MetadataRemoveFormSet,
|
||||
MetadataTypeForm)
|
||||
from .forms import (
|
||||
AddMetadataForm, MetadataFormSet, MetadataRemoveFormSet, MetadataTypeForm
|
||||
)
|
||||
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_METADATA_TYPE_CREATE,
|
||||
PERMISSION_METADATA_TYPE_DELETE,
|
||||
PERMISSION_METADATA_TYPE_EDIT,
|
||||
PERMISSION_METADATA_TYPE_VIEW)
|
||||
from .permissions import (
|
||||
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_EDIT,
|
||||
PERMISSION_METADATA_DOCUMENT_REMOVE, PERMISSION_METADATA_DOCUMENT_VIEW,
|
||||
PERMISSION_METADATA_TYPE_CREATE, PERMISSION_METADATA_TYPE_DELETE,
|
||||
PERMISSION_METADATA_TYPE_EDIT, PERMISSION_METADATA_TYPE_VIEW
|
||||
)
|
||||
|
||||
|
||||
def metadata_edit(request, document_id=None, document_id_list=None):
|
||||
@@ -50,17 +49,17 @@ def metadata_edit(request, document_id=None, document_id_list=None):
|
||||
if document_id:
|
||||
raise Http404
|
||||
else:
|
||||
messages.error(request, _(u'Must provide at least one document.'))
|
||||
messages.error(request, _('Must provide at least one document.'))
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
|
||||
|
||||
if len(set([document.document_type.pk for document in documents])) > 1:
|
||||
messages.error(request, _(u'Only select documents of the same type.'))
|
||||
messages.error(request, _('Only select documents of the same type.'))
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
|
||||
|
||||
if set(documents.values_list('metadata__value' ,flat=True)) == set([None]):
|
||||
message = ungettext(
|
||||
u'The selected document doesn\'t have any metadata.',
|
||||
u'The selected documents don\'t have any metadata.',
|
||||
'The selected document doesn\'t have any metadata.',
|
||||
'The selected documents don\'t have any metadata.',
|
||||
len(documents)
|
||||
)
|
||||
messages.warning(request, message)
|
||||
@@ -87,7 +86,7 @@ def metadata_edit(request, document_id=None, document_id_list=None):
|
||||
for key, value in metadata.items():
|
||||
initial.append({
|
||||
'metadata_type': key,
|
||||
'value': u', '.join(value) if value else '',
|
||||
'value': ', '.join(value) if value else '',
|
||||
'required': key in document.document_type.metadata.filter(required=True),
|
||||
})
|
||||
|
||||
@@ -110,10 +109,10 @@ def metadata_edit(request, document_id=None, document_id_list=None):
|
||||
if settings.DEBUG:
|
||||
raise
|
||||
else:
|
||||
messages.error(request, _(u'Error editing metadata for document %(document)s; %(exception)s.') % {
|
||||
messages.error(request, _('Error editing metadata for document %(document)s; %(exception)s.') % {
|
||||
'document': document, 'exception': ', '.join(exception.messages)})
|
||||
else:
|
||||
messages.success(request, _(u'Metadata for document %s edited successfully.') % document)
|
||||
messages.success(request, _('Metadata for document %s edited successfully.') % document)
|
||||
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@@ -127,8 +126,8 @@ def metadata_edit(request, document_id=None, document_id_list=None):
|
||||
context['object'] = documents[0]
|
||||
|
||||
context['title'] = ungettext(
|
||||
u'Edit document metadata',
|
||||
u'Edit documents metadata',
|
||||
'Edit document metadata',
|
||||
'Edit documents metadata',
|
||||
len(documents)
|
||||
)
|
||||
|
||||
@@ -146,7 +145,7 @@ def metadata_add(request, document_id=None, document_id_list=None):
|
||||
elif document_id_list:
|
||||
documents = [get_object_or_404(Document.objects.select_related('document_type'), pk=document_id) for document_id in document_id_list.split(',')]
|
||||
if len(set([document.document_type.pk for document in documents])) > 1:
|
||||
messages.error(request, _(u'Only select documents of the same type.'))
|
||||
messages.error(request, _('Only select documents of the same type.'))
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
|
||||
|
||||
try:
|
||||
@@ -155,7 +154,7 @@ def metadata_add(request, document_id=None, document_id_list=None):
|
||||
documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_METADATA_DOCUMENT_ADD, request.user, documents)
|
||||
|
||||
if not documents:
|
||||
messages.error(request, _(u'Must provide at least one document.'))
|
||||
messages.error(request, _('Must provide at least one document.'))
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
|
||||
|
||||
for document in documents:
|
||||
@@ -171,28 +170,28 @@ def metadata_add(request, document_id=None, document_id_list=None):
|
||||
metadata_type = form.cleaned_data['metadata_type']
|
||||
for document in documents:
|
||||
try:
|
||||
document_metadata, created = DocumentMetadata.objects.get_or_create(document=document, metadata_type=metadata_type.metadata_type, defaults={'value': u''})
|
||||
document_metadata, created = DocumentMetadata.objects.get_or_create(document=document, metadata_type=metadata_type.metadata_type, defaults={'value': ''})
|
||||
except Exception as exception:
|
||||
if getattr(settings, 'DEBUG', False):
|
||||
raise
|
||||
else:
|
||||
messages.error(request, _(u'Error adding metadata type "%(metadata_type)s" to document: %(document)s; %(exception)s') % {
|
||||
messages.error(request, _('Error adding metadata type "%(metadata_type)s" to document: %(document)s; %(exception)s') % {
|
||||
'metadata_type': metadata_type, 'document': document, 'exception': ', '.join(getattr(exception, 'messages', exception))})
|
||||
else:
|
||||
if created:
|
||||
messages.success(request, _(u'Metadata type: %(metadata_type)s successfully added to document %(document)s.') % {
|
||||
messages.success(request, _('Metadata type: %(metadata_type)s successfully added to document %(document)s.') % {
|
||||
'metadata_type': metadata_type, 'document': document})
|
||||
else:
|
||||
messages.warning(request, _(u'Metadata type: %(metadata_type)s already present in document %(document)s.') % {
|
||||
messages.warning(request, _('Metadata type: %(metadata_type)s already present in document %(document)s.') % {
|
||||
'metadata_type': metadata_type, 'document': document})
|
||||
|
||||
if len(documents) == 1:
|
||||
return HttpResponseRedirect(u'%s?%s' % (
|
||||
return HttpResponseRedirect('%s?%s' % (
|
||||
reverse('metadata:metadata_edit', args=[document.pk]),
|
||||
urlencode({'next': next}))
|
||||
)
|
||||
elif len(documents) > 1:
|
||||
return HttpResponseRedirect(u'%s?%s' % (
|
||||
return HttpResponseRedirect('%s?%s' % (
|
||||
reverse('metadata:metadata_multiple_edit'),
|
||||
urlencode({'id_list': document_id_list, 'next': next}))
|
||||
)
|
||||
@@ -209,8 +208,8 @@ def metadata_add(request, document_id=None, document_id_list=None):
|
||||
context['object'] = documents[0]
|
||||
|
||||
context['title'] = ungettext(
|
||||
u'Add metadata types to document',
|
||||
u'Add metadata types to documents',
|
||||
'Add metadata types to document',
|
||||
'Add metadata types to documents',
|
||||
len(documents)
|
||||
)
|
||||
|
||||
@@ -237,17 +236,17 @@ def metadata_remove(request, document_id=None, document_id_list=None):
|
||||
if document_id:
|
||||
raise Http404
|
||||
else:
|
||||
messages.error(request, _(u'Must provide at least one document.'))
|
||||
messages.error(request, _('Must provide at least one document.'))
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
|
||||
|
||||
if len(set([document.document_type.pk for document in documents])) > 1:
|
||||
messages.error(request, _(u'Only select documents of the same type.'))
|
||||
messages.error(request, _('Only select documents of the same type.'))
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
|
||||
|
||||
if set(documents.values_list('metadata__value' ,flat=True)) == set([None]):
|
||||
message = ungettext(
|
||||
u'The selected document doesn\'t have any metadata.',
|
||||
u'The selected documents doesn\'t have any metadata.',
|
||||
'The selected document doesn\'t have any metadata.',
|
||||
'The selected documents doesn\'t have any metadata.',
|
||||
len(documents)
|
||||
)
|
||||
messages.warning(request, message)
|
||||
@@ -267,13 +266,13 @@ def metadata_remove(request, document_id=None, document_id_list=None):
|
||||
if value not in metadata[item.metadata_type]:
|
||||
metadata[item.metadata_type].append(value)
|
||||
else:
|
||||
metadata[item.metadata_type] = [value] if value else u''
|
||||
metadata[item.metadata_type] = [value] if value else ''
|
||||
|
||||
initial = []
|
||||
for key, value in metadata.items():
|
||||
initial.append({
|
||||
'metadata_type': key,
|
||||
'value': u', '.join(value)
|
||||
'value': ', '.join(value)
|
||||
})
|
||||
|
||||
formset = MetadataRemoveFormSet(initial=initial)
|
||||
@@ -288,10 +287,10 @@ def metadata_remove(request, document_id=None, document_id_list=None):
|
||||
try:
|
||||
document_metadata = DocumentMetadata.objects.get(document=document, metadata_type=metadata_type)
|
||||
document_metadata.delete()
|
||||
messages.success(request, _(u'Successfully remove metadata type "%(metadata_type)s" from document: %(document)s.') % {
|
||||
messages.success(request, _('Successfully remove metadata type "%(metadata_type)s" from document: %(document)s.') % {
|
||||
'metadata_type': metadata_type, 'document': document})
|
||||
except Exception as exception:
|
||||
messages.error(request, _(u'Error removing metadata type "%(metadata_type)s" from document: %(document)s; %(exception)s') % {
|
||||
messages.error(request, _('Error removing metadata type "%(metadata_type)s" from document: %(document)s; %(exception)s') % {
|
||||
'metadata_type': metadata_type, 'document': document, 'exception': ', '.join(exception.messages)})
|
||||
|
||||
return HttpResponseRedirect(next)
|
||||
@@ -306,8 +305,8 @@ def metadata_remove(request, document_id=None, document_id_list=None):
|
||||
context['object'] = documents[0]
|
||||
|
||||
context['title'] = ungettext(
|
||||
u'Remove metadata types from the document',
|
||||
u'Remove metadata types from the documents',
|
||||
'Remove metadata types from the document',
|
||||
'Remove metadata types from the documents',
|
||||
len(documents)
|
||||
)
|
||||
|
||||
@@ -328,11 +327,11 @@ def metadata_view(request, document_id):
|
||||
AccessEntry.objects.check_access(PERMISSION_METADATA_DOCUMENT_VIEW, request.user, document)
|
||||
|
||||
return render_to_response('main/generic_list.html', {
|
||||
'title': _(u'Document metadata'),
|
||||
'title': _('Document metadata'),
|
||||
'object_list': document.metadata.all(),
|
||||
'extra_columns': [
|
||||
{'name': _(u'Value'), 'attribute': 'value'},
|
||||
{'name': _(u'Required'), 'attribute': encapsulate(lambda x: x.metadata_type in document.document_type.metadata.filter(required=True))}
|
||||
{'name': _('Value'), 'attribute': 'value'},
|
||||
{'name': _('Required'), 'attribute': encapsulate(lambda x: x.metadata_type in document.document_type.metadata.filter(required=True))}
|
||||
],
|
||||
'hide_link': True,
|
||||
'object': document,
|
||||
@@ -371,11 +370,11 @@ def setup_metadata_type_list(request):
|
||||
|
||||
context = {
|
||||
'object_list': MetadataType.objects.all(),
|
||||
'title': _(u'Metadata types'),
|
||||
'title': _('Metadata types'),
|
||||
'hide_link': True,
|
||||
'extra_columns': [
|
||||
{
|
||||
'name': _(u'Internal name'),
|
||||
'name': _('Internal name'),
|
||||
'attribute': 'name',
|
||||
},
|
||||
]
|
||||
@@ -395,16 +394,16 @@ def setup_metadata_type_edit(request, metadatatype_id):
|
||||
if form.is_valid():
|
||||
try:
|
||||
form.save()
|
||||
messages.success(request, _(u'Metadata type edited successfully'))
|
||||
messages.success(request, _('Metadata type edited successfully'))
|
||||
return HttpResponseRedirect(reverse('metadata:setup_metadata_type_list'))
|
||||
except Exception as exception:
|
||||
messages.error(request, _(u'Error editing metadata type; %s') % exception)
|
||||
messages.error(request, _('Error editing metadata type; %s') % exception)
|
||||
pass
|
||||
else:
|
||||
form = MetadataTypeForm(instance=metadata_type)
|
||||
|
||||
return render_to_response('main/generic_form.html', {
|
||||
'title': _(u'Edit metadata type: %s') % metadata_type,
|
||||
'title': _('Edit metadata type: %s') % metadata_type,
|
||||
'form': form,
|
||||
'object': metadata_type,
|
||||
}, context_instance=RequestContext(request))
|
||||
@@ -417,13 +416,13 @@ def setup_metadata_type_create(request):
|
||||
form = MetadataTypeForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, _(u'Metadata type created successfully'))
|
||||
messages.success(request, _('Metadata type created successfully'))
|
||||
return HttpResponseRedirect(reverse('metadata:setup_metadata_type_list'))
|
||||
else:
|
||||
form = MetadataTypeForm()
|
||||
|
||||
return render_to_response('main/generic_form.html', {
|
||||
'title': _(u'Create metadata type'),
|
||||
'title': _('Create metadata type'),
|
||||
'form': form,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@@ -441,9 +440,9 @@ def setup_metadata_type_delete(request, metadatatype_id):
|
||||
if request.method == 'POST':
|
||||
try:
|
||||
metadata_type.delete()
|
||||
messages.success(request, _(u'Metadata type: %s deleted successfully.') % metadata_type)
|
||||
messages.success(request, _('Metadata type: %s deleted successfully.') % metadata_type)
|
||||
except Exception as exception:
|
||||
messages.error(request, _(u'Metadata type: %(metadata_type)s delete error: %(error)s') % {
|
||||
messages.error(request, _('Metadata type: %(metadata_type)s delete error: %(error)s') % {
|
||||
'metadata_type': metadata_type, 'error': exception})
|
||||
|
||||
return HttpResponseRedirect(next)
|
||||
@@ -453,7 +452,7 @@ def setup_metadata_type_delete(request, metadatatype_id):
|
||||
'next': next,
|
||||
'previous': previous,
|
||||
'object': metadata_type,
|
||||
'title': _(u'Are you sure you wish to delete the metadata type: %s?') % metadata_type,
|
||||
'title': _('Are you sure you wish to delete the metadata type: %s?') % metadata_type,
|
||||
}
|
||||
|
||||
return render_to_response('main/generic_confirm.html', context,
|
||||
@@ -474,7 +473,7 @@ def setup_document_type_metadata(request, document_type_id):
|
||||
extra_context={
|
||||
'document_type': document_type,
|
||||
'navigation_object_name': 'document_type',
|
||||
'main_title': _(u'Optional metadata types for document type: %s') % document_type,
|
||||
'main_title': _('Optional metadata types for document type: %s') % document_type,
|
||||
},
|
||||
decode_content_type=True,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user