Convert metadata app to use organizations.
This commit is contained in:
@@ -2,11 +2,13 @@ from __future__ import unicode_literals
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
from organizations.admin import OrganizationAdminMixin
|
||||
|
||||
from .models import MetadataType
|
||||
|
||||
|
||||
@admin.register(MetadataType)
|
||||
class MetadataTypeAdmin(admin.ModelAdmin):
|
||||
class MetadataTypeAdmin(OrganizationAdminMixin, admin.ModelAdmin):
|
||||
list_display = (
|
||||
'name', 'label', 'default', 'lookup', 'validation', 'parser'
|
||||
)
|
||||
|
||||
@@ -49,7 +49,7 @@ def save_metadata(metadata_dict, document, create=False):
|
||||
"""
|
||||
if create:
|
||||
# Use matched metadata now to create document metadata
|
||||
document_metadata, created = DocumentMetadata.objects.get_or_create(
|
||||
document_metadata, created = DocumentMetadata.on_organization.get_or_create(
|
||||
document=document,
|
||||
metadata_type=get_object_or_404(
|
||||
MetadataType,
|
||||
@@ -57,7 +57,7 @@ def save_metadata(metadata_dict, document, create=False):
|
||||
)
|
||||
else:
|
||||
try:
|
||||
document_metadata = DocumentMetadata.objects.get(
|
||||
document_metadata = DocumentMetadata.on_organization.get(
|
||||
document=document,
|
||||
metadata_type=get_object_or_404(
|
||||
MetadataType,
|
||||
@@ -92,7 +92,7 @@ def metadata_repr_as_list(metadata_list):
|
||||
output = []
|
||||
for metadata_dict in metadata_list:
|
||||
try:
|
||||
output.append('%s - %s' % (MetadataType.objects.get(
|
||||
output.append('%s - %s' % (MetadataType.on_organization.get(
|
||||
pk=metadata_dict['id']), metadata_dict.get('value', '')))
|
||||
except:
|
||||
pass
|
||||
@@ -107,9 +107,9 @@ def set_bulk_metadata(document, metadata_dictionary):
|
||||
]
|
||||
|
||||
for metadata_type_name, value in metadata_dictionary.items():
|
||||
metadata_type = MetadataType.objects.get(name=metadata_type_name)
|
||||
metadata_type = MetadataType.on_organization.get(name=metadata_type_name)
|
||||
|
||||
if metadata_type in document_type_metadata_types:
|
||||
DocumentMetadata.objects.get_or_create(
|
||||
DocumentMetadata.on_organization.get_or_create(
|
||||
document=document, metadata_type=metadata_type, value=value
|
||||
)
|
||||
|
||||
@@ -31,7 +31,7 @@ from .serializers import (
|
||||
|
||||
class APIMetadataTypeListView(generics.ListCreateAPIView):
|
||||
serializer_class = MetadataTypeSerializer
|
||||
queryset = MetadataType.objects.all()
|
||||
queryset = MetadataType.on_organization.all()
|
||||
|
||||
permission_classes = (MayanPermission,)
|
||||
filter_backends = (MayanObjectPermissionsFilter,)
|
||||
@@ -53,7 +53,7 @@ class APIMetadataTypeListView(generics.ListCreateAPIView):
|
||||
|
||||
class APIMetadataTypeView(generics.RetrieveUpdateDestroyAPIView):
|
||||
serializer_class = MetadataTypeSerializer
|
||||
queryset = MetadataType.objects.all()
|
||||
queryset = MetadataType.on_organization.all()
|
||||
|
||||
permission_classes = (MayanPermission,)
|
||||
mayan_object_permissions = {
|
||||
@@ -92,7 +92,7 @@ class APIDocumentMetadataListView(generics.ListCreateAPIView):
|
||||
permission_classes = (MayanPermission,)
|
||||
|
||||
def get_document(self):
|
||||
return get_object_or_404(Document, pk=self.kwargs['pk'])
|
||||
return get_object_or_404(Document.on_organization, pk=self.kwargs['pk'])
|
||||
|
||||
def get_queryset(self):
|
||||
document = self.get_document()
|
||||
@@ -151,7 +151,7 @@ class APIDocumentMetadataListView(generics.ListCreateAPIView):
|
||||
|
||||
class APIDocumentMetadataView(generics.RetrieveUpdateDestroyAPIView):
|
||||
serializer_class = DocumentMetadataSerializer
|
||||
queryset = DocumentMetadata.objects.all()
|
||||
queryset = DocumentMetadata.on_organization.all()
|
||||
|
||||
permission_classes = (MayanPermission,)
|
||||
mayan_object_permissions = {
|
||||
@@ -220,7 +220,7 @@ class APIDocumentTypeMetadataTypeOptionalListView(generics.ListCreateAPIView):
|
||||
|
||||
def get_queryset(self):
|
||||
document_type = get_object_or_404(
|
||||
DocumentType, pk=self.kwargs['document_type_pk']
|
||||
DocumentType.on_organization, pk=self.kwargs['document_type_pk']
|
||||
)
|
||||
try:
|
||||
Permission.check_permissions(
|
||||
@@ -253,7 +253,7 @@ class APIDocumentTypeMetadataTypeOptionalListView(generics.ListCreateAPIView):
|
||||
Add an optional metadata type to a document type.
|
||||
"""
|
||||
document_type = get_object_or_404(
|
||||
DocumentType, pk=self.kwargs['document_type_pk']
|
||||
DocumentType.on_organization, pk=self.kwargs['document_type_pk']
|
||||
)
|
||||
|
||||
try:
|
||||
@@ -270,7 +270,7 @@ class APIDocumentTypeMetadataTypeOptionalListView(generics.ListCreateAPIView):
|
||||
|
||||
if serializer.is_valid():
|
||||
metadata_type = get_object_or_404(
|
||||
MetadataType, pk=serializer.data['metadata_type_pk']
|
||||
MetadataType.on_organization, pk=serializer.data['metadata_type_pk']
|
||||
)
|
||||
document_type_metadata_type = document_type.metadata.create(
|
||||
metadata_type=metadata_type, required=self.required_metadata
|
||||
@@ -313,7 +313,7 @@ class APIDocumentTypeMetadataTypeView(views.APIView):
|
||||
"""
|
||||
|
||||
document_type_metadata_type = get_object_or_404(
|
||||
DocumentTypeMetadataType, pk=self.kwargs['pk']
|
||||
DocumentTypeMetadataType.on_organization, pk=self.kwargs['pk']
|
||||
)
|
||||
|
||||
try:
|
||||
|
||||
@@ -109,13 +109,13 @@ MetadataFormSet = formset_factory(MetadataForm, extra=0)
|
||||
|
||||
class AddMetadataForm(forms.Form):
|
||||
metadata_type = forms.ModelChoiceField(
|
||||
queryset=MetadataType.objects.all(), label=_('Metadata type')
|
||||
queryset=MetadataType.on_organization.all(), label=_('Metadata type')
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
document_type = kwargs.pop('document_type')
|
||||
super(AddMetadataForm, self).__init__(*args, **kwargs)
|
||||
self.fields['metadata_type'].queryset = MetadataType.objects.filter(
|
||||
self.fields['metadata_type'].queryset = MetadataType.on_organization.filter(
|
||||
pk__in=document_type.metadata.values_list(
|
||||
'metadata_type', flat=True
|
||||
)
|
||||
|
||||
@@ -44,7 +44,7 @@ def post_post_document_type_change_metadata(sender, instance, **kwargs):
|
||||
|
||||
# Add new document type metadata types to document
|
||||
for document_type_metadata_type in instance.document_type.metadata.filter(required=True):
|
||||
DocumentMetadata.objects.create(
|
||||
DocumentMetadata.on_organization.create(
|
||||
document=instance,
|
||||
metadata_type=document_type_metadata_type.metadata_type,
|
||||
value=None
|
||||
|
||||
@@ -1,6 +1,35 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.apps import apps
|
||||
from django.db import models
|
||||
|
||||
|
||||
class MetadataTypeManager(models.Manager):
|
||||
def get_by_natural_key(self, name):
|
||||
return self.get(name=name)
|
||||
|
||||
|
||||
class OrganizationDocumentMetadataManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
Document = apps.get_model('documents', 'Document')
|
||||
MetadataType = apps.get_model('metadata', 'MetadataType')
|
||||
|
||||
return super(
|
||||
OrganizationDocumentMetadataManager, self
|
||||
).get_queryset().filter(
|
||||
document__in=Document.on_organization.all(),
|
||||
metadata_type__in=MetadataType.on_organization.all()
|
||||
)
|
||||
|
||||
|
||||
class OrganizationDocumentTypeMetadataTypeManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
DocumentType = apps.get_model('documents', 'DocumentType')
|
||||
MetadataType = apps.get_model('metadata', 'MetadataType')
|
||||
|
||||
return super(
|
||||
OrganizationDocumentTypeMetadataTypeManager, self
|
||||
).get_queryset().filter(
|
||||
document_type__in=DocumentType.objects.all(),
|
||||
metadata_type__in=MetadataType.on_organization.all()
|
||||
)
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import organizations.shortcuts
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('organizations', '0002_add_data_default_organization'),
|
||||
('metadata', '0007_auto_20150918_0800'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='metadatatype',
|
||||
name='organization',
|
||||
field=models.ForeignKey(default=organizations.shortcuts.get_current_organization, to='organizations.Organization'),
|
||||
),
|
||||
]
|
||||
@@ -10,9 +10,15 @@ from django.utils.module_loading import import_string
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from documents.models import Document, DocumentType
|
||||
from organizations.models import Organization
|
||||
from organizations.managers import CurrentOrganizationManager
|
||||
from organizations.shortcuts import get_current_organization
|
||||
|
||||
from .classes import MetadataLookup
|
||||
from .managers import MetadataTypeManager
|
||||
from .managers import (
|
||||
MetadataTypeManager, OrganizationDocumentMetadataManager,
|
||||
OrganizationDocumentTypeMetadataTypeManager
|
||||
)
|
||||
from .settings import setting_available_parsers, setting_available_validators
|
||||
|
||||
|
||||
@@ -35,7 +41,9 @@ class MetadataType(models.Model):
|
||||
"""
|
||||
Define a type of metadata
|
||||
"""
|
||||
|
||||
organization = models.ForeignKey(
|
||||
Organization, default=get_current_organization
|
||||
)
|
||||
name = models.CharField(
|
||||
max_length=48,
|
||||
help_text=_(
|
||||
@@ -79,6 +87,12 @@ class MetadataType(models.Model):
|
||||
)
|
||||
|
||||
objects = MetadataTypeManager()
|
||||
on_organization = CurrentOrganizationManager()
|
||||
|
||||
class Meta:
|
||||
ordering = ('label',)
|
||||
verbose_name = _('Metadata type')
|
||||
verbose_name_plural = _('Metadata types')
|
||||
|
||||
def __str__(self):
|
||||
return self.label
|
||||
@@ -86,11 +100,6 @@ class MetadataType(models.Model):
|
||||
def natural_key(self):
|
||||
return (self.name,)
|
||||
|
||||
class Meta:
|
||||
ordering = ('label',)
|
||||
verbose_name = _('Metadata type')
|
||||
verbose_name_plural = _('Metadata types')
|
||||
|
||||
@staticmethod
|
||||
def comma_splitter(string):
|
||||
splitter = shlex.shlex(string.encode('utf-8'), posix=True)
|
||||
@@ -158,6 +167,14 @@ class DocumentMetadata(models.Model):
|
||||
verbose_name=_('Value')
|
||||
)
|
||||
|
||||
objects = models.Manager()
|
||||
on_organization = OrganizationDocumentMetadataManager()
|
||||
|
||||
class Meta:
|
||||
unique_together = ('document', 'metadata_type')
|
||||
verbose_name = _('Document metadata')
|
||||
verbose_name_plural = _('Document metadata')
|
||||
|
||||
def __str__(self):
|
||||
return unicode(self.metadata_type)
|
||||
|
||||
@@ -184,11 +201,6 @@ class DocumentMetadata(models.Model):
|
||||
document_type=self.document.document_type, value=self.value
|
||||
)
|
||||
|
||||
class Meta:
|
||||
unique_together = ('document', 'metadata_type')
|
||||
verbose_name = _('Document metadata')
|
||||
verbose_name_plural = _('Document metadata')
|
||||
|
||||
@property
|
||||
def is_required(self):
|
||||
return self.metadata_type.get_required_for(
|
||||
@@ -207,10 +219,13 @@ class DocumentTypeMetadataType(models.Model):
|
||||
)
|
||||
required = models.BooleanField(default=False, verbose_name=_('Required'))
|
||||
|
||||
def __str__(self):
|
||||
return unicode(self.metadata_type)
|
||||
objects = models.Manager()
|
||||
on_organization = OrganizationDocumentTypeMetadataTypeManager()
|
||||
|
||||
class Meta:
|
||||
unique_together = ('document_type', 'metadata_type')
|
||||
verbose_name = _('Document type metadata type options')
|
||||
verbose_name_plural = _('Document type metadata types options')
|
||||
|
||||
def __str__(self):
|
||||
return unicode(self.metadata_type)
|
||||
|
||||
@@ -47,7 +47,7 @@ class DocumentNewMetadataSerializer(serializers.Serializer):
|
||||
)
|
||||
|
||||
def create(self, validated_data):
|
||||
metadata_type = MetadataType.objects.get(
|
||||
metadata_type = MetadataType.on_organization.get(
|
||||
pk=validated_data['metadata_type_pk']
|
||||
)
|
||||
instance = self.document.metadata.create(
|
||||
|
||||
@@ -15,7 +15,7 @@ def task_remove_metadata_type(document_type_id, metadata_type_id):
|
||||
app_label='metadata', model_name='DocumentMetadata'
|
||||
)
|
||||
|
||||
DocumentMetadata.objects.filter(
|
||||
DocumentMetadata.on_organization.filter(
|
||||
document__document_type__id=document_type_id,
|
||||
metadata_type__id=metadata_type_id
|
||||
).delete()
|
||||
@@ -31,7 +31,7 @@ def task_add_required_metadata_type(document_type_id, metadata_type_id):
|
||||
app_label='metadata', model_name='MetadataType'
|
||||
)
|
||||
|
||||
metadata_type = MetadataType.objects.get(pk=metadata_type_id)
|
||||
metadata_type = MetadataType.on_organization.get(pk=metadata_type_id)
|
||||
|
||||
for document in DocumentType.objects.get(pk=document_type_id).documents.all():
|
||||
for document in DocumentType.on_organization.get(pk=document_type_id).documents.all():
|
||||
document.metadata.create(metadata_type=metadata_type)
|
||||
|
||||
@@ -4,10 +4,9 @@ from django.contrib.auth import get_user_model
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.test import override_settings
|
||||
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
from documents.models import DocumentType
|
||||
from documents.tests import TEST_DOCUMENT_TYPE, TEST_SMALL_DOCUMENT_PATH
|
||||
from rest_api.tests import GenericAPITestCase
|
||||
from user_management.tests.literals import (
|
||||
TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME
|
||||
)
|
||||
@@ -23,19 +22,12 @@ TEST_METADATA_VALUE = 'test value'
|
||||
TEST_METADATA_VALUE_EDITED = 'test value edited'
|
||||
|
||||
|
||||
class MetadataTypeAPITestCase(APITestCase):
|
||||
class MetadataTypeAPITestCase(GenericAPITestCase):
|
||||
def setUp(self):
|
||||
self.admin_user = get_user_model().objects.create_superuser(
|
||||
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
|
||||
password=TEST_ADMIN_PASSWORD
|
||||
)
|
||||
|
||||
self.client.login(
|
||||
username=TEST_ADMIN_USERNAME, password=TEST_ADMIN_PASSWORD
|
||||
)
|
||||
super(MetadataTypeAPITestCase, self).setUp()
|
||||
|
||||
def tearDown(self):
|
||||
self.admin_user.delete()
|
||||
super(MetadataTypeAPITestCase, self).tearDown()
|
||||
|
||||
def test_metadata_type_create(self):
|
||||
response = self.client.post(
|
||||
@@ -45,7 +37,7 @@ class MetadataTypeAPITestCase(APITestCase):
|
||||
}
|
||||
)
|
||||
|
||||
metadata_type = MetadataType.objects.first()
|
||||
metadata_type = MetadataType.on_organization.first()
|
||||
|
||||
self.assertEqual(response.status_code, 201)
|
||||
self.assertEqual(response.data['id'], metadata_type.pk)
|
||||
@@ -56,7 +48,7 @@ class MetadataTypeAPITestCase(APITestCase):
|
||||
self.assertEqual(metadata_type.name, TEST_METADATA_TYPE_NAME)
|
||||
|
||||
def test_metadata_type_delete(self):
|
||||
metadata_type = MetadataType.objects.create(
|
||||
metadata_type = MetadataType.on_organization.create(
|
||||
label=TEST_METADATA_TYPE_LABEL, name=TEST_METADATA_TYPE_NAME
|
||||
)
|
||||
|
||||
@@ -66,10 +58,10 @@ class MetadataTypeAPITestCase(APITestCase):
|
||||
|
||||
self.assertEqual(response.status_code, 204)
|
||||
|
||||
self.assertEqual(MetadataType.objects.count(), 0)
|
||||
self.assertEqual(MetadataType.on_organization.count(), 0)
|
||||
|
||||
def test_metadata_type_edit(self):
|
||||
metadata_type = MetadataType.objects.create(
|
||||
metadata_type = MetadataType.on_organization.create(
|
||||
label=TEST_METADATA_TYPE_LABEL, name=TEST_METADATA_TYPE_NAME
|
||||
)
|
||||
|
||||
@@ -89,28 +81,21 @@ class MetadataTypeAPITestCase(APITestCase):
|
||||
self.assertEqual(metadata_type.name, TEST_METADATA_TYPE_NAME_2)
|
||||
|
||||
|
||||
class DocumentTypeMetadataTypeAPITestCase(APITestCase):
|
||||
class DocumentTypeMetadataTypeAPITestCase(GenericAPITestCase):
|
||||
def setUp(self):
|
||||
self.admin_user = get_user_model().objects.create_superuser(
|
||||
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
|
||||
password=TEST_ADMIN_PASSWORD
|
||||
)
|
||||
super(DocumentTypeMetadataTypeAPITestCase, self).setUp()
|
||||
|
||||
self.client.login(
|
||||
username=TEST_ADMIN_USERNAME, password=TEST_ADMIN_PASSWORD
|
||||
)
|
||||
|
||||
self.document_type = DocumentType.objects.create(
|
||||
self.document_type = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE
|
||||
)
|
||||
|
||||
self.metadata_type = MetadataType.objects.create(
|
||||
self.metadata_type = MetadataType.on_organization.create(
|
||||
label=TEST_METADATA_TYPE_LABEL, name=TEST_METADATA_TYPE_NAME
|
||||
)
|
||||
|
||||
def tearDown(self):
|
||||
self.admin_user.delete()
|
||||
self.document_type.delete()
|
||||
super(DocumentTypeMetadataTypeAPITestCase, self).tearDown()
|
||||
|
||||
def test_document_type_metadata_type_optional_create(self):
|
||||
response = self.client.post(
|
||||
@@ -122,7 +107,7 @@ class DocumentTypeMetadataTypeAPITestCase(APITestCase):
|
||||
|
||||
self.assertEqual(response.status_code, 201)
|
||||
|
||||
document_type_metadata_type = DocumentTypeMetadataType.objects.filter(
|
||||
document_type_metadata_type = DocumentTypeMetadataType.on_organization.filter(
|
||||
document_type=self.document_type, required=False
|
||||
).first()
|
||||
|
||||
@@ -142,7 +127,7 @@ class DocumentTypeMetadataTypeAPITestCase(APITestCase):
|
||||
|
||||
self.assertEqual(response.status_code, 201)
|
||||
|
||||
document_type_metadata_type = DocumentTypeMetadataType.objects.filter(
|
||||
document_type_metadata_type = DocumentTypeMetadataType.on_organization.filter(
|
||||
document_type=self.document_type, required=True
|
||||
).first()
|
||||
|
||||
@@ -169,23 +154,16 @@ class DocumentTypeMetadataTypeAPITestCase(APITestCase):
|
||||
self.assertEqual(self.document_type.metadata.all().count(), 0)
|
||||
|
||||
|
||||
class DocumentMetadataAPITestCase(APITestCase):
|
||||
class DocumentMetadataAPITestCase(GenericAPITestCase):
|
||||
@override_settings(OCR_AUTO_OCR=False)
|
||||
def setUp(self):
|
||||
self.admin_user = get_user_model().objects.create_superuser(
|
||||
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
|
||||
password=TEST_ADMIN_PASSWORD
|
||||
)
|
||||
super(DocumentMetadataAPITestCase, self).setUp()
|
||||
|
||||
self.client.login(
|
||||
username=TEST_ADMIN_USERNAME, password=TEST_ADMIN_PASSWORD
|
||||
)
|
||||
|
||||
self.document_type = DocumentType.objects.create(
|
||||
self.document_type = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE
|
||||
)
|
||||
|
||||
self.metadata_type = MetadataType.objects.create(
|
||||
self.metadata_type = MetadataType.on_organization.create(
|
||||
label=TEST_METADATA_TYPE_LABEL, name=TEST_METADATA_TYPE_NAME
|
||||
)
|
||||
|
||||
@@ -199,8 +177,8 @@ class DocumentMetadataAPITestCase(APITestCase):
|
||||
)
|
||||
|
||||
def tearDown(self):
|
||||
self.admin_user.delete()
|
||||
self.document_type.delete()
|
||||
super(DocumentMetadataAPITestCase, self).tearDown()
|
||||
|
||||
def test_document_metadata_create(self):
|
||||
response = self.client.post(
|
||||
@@ -213,7 +191,7 @@ class DocumentMetadataAPITestCase(APITestCase):
|
||||
}
|
||||
)
|
||||
|
||||
document_metadata = DocumentMetadata.objects.get(
|
||||
document_metadata = DocumentMetadata.on_organization.get(
|
||||
document=self.document
|
||||
)
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ from django.test import TestCase, override_settings
|
||||
|
||||
from documents.models import DocumentType
|
||||
from documents.tests import TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE
|
||||
from organizations.tests import OrganizationTestCase
|
||||
|
||||
from ..models import MetadataType, DocumentMetadata
|
||||
|
||||
@@ -18,13 +19,14 @@ from .literals import (
|
||||
|
||||
|
||||
@override_settings(OCR_AUTO_OCR=False)
|
||||
class MetadataTestCase(TestCase):
|
||||
class MetadataTestCase(OrganizationTestCase):
|
||||
def setUp(self):
|
||||
self.document_type = DocumentType.objects.create(
|
||||
super(MetadataTestCase, self).setUp()
|
||||
self.document_type = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE
|
||||
)
|
||||
|
||||
self.metadata_type = MetadataType.objects.create(
|
||||
self.metadata_type = MetadataType.on_organization.create(
|
||||
name=TEST_METADATA_TYPE_NAME, label=TEST_METADATA_TYPE_LABEL
|
||||
)
|
||||
|
||||
@@ -37,6 +39,7 @@ class MetadataTestCase(TestCase):
|
||||
|
||||
def tearDown(self):
|
||||
self.document_type.delete()
|
||||
super(MetadataTestCase, self).tearDown()
|
||||
|
||||
def test_no_default(self):
|
||||
document_metadata = DocumentMetadata(
|
||||
|
||||
65
mayan/apps/metadata/tests/test_organization_views.py
Normal file
65
mayan/apps/metadata/tests/test_organization_views.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from organizations.tests.test_organization_views import OrganizationViewTestCase
|
||||
|
||||
from ..models import MetadataType
|
||||
|
||||
from .literals import (
|
||||
TEST_DOCUMENT_METADATA_VALUE_2, TEST_METADATA_TYPE_LABEL,
|
||||
TEST_METADATA_TYPE_LABEL_2, TEST_METADATA_TYPE_NAME,
|
||||
TEST_METADATA_TYPE_NAME_2
|
||||
)
|
||||
|
||||
|
||||
class MetadataOrganizationViewTestCase(OrganizationViewTestCase):
|
||||
def create_metadata_type(self):
|
||||
with self.settings(ORGANIZATION_ID=self.organization_a.pk):
|
||||
self.metadata_type = MetadataType.on_organization.create(
|
||||
name=TEST_METADATA_TYPE_NAME, label=TEST_METADATA_TYPE_LABEL
|
||||
)
|
||||
|
||||
def test_metadata_type_creation(self):
|
||||
with self.settings(ORGANIZATION_ID=self.organization_a.pk):
|
||||
response = self.post(
|
||||
'metadata:setup_metadata_type_create', data={
|
||||
'label': TEST_METADATA_TYPE_LABEL,
|
||||
'name': TEST_METADATA_TYPE_NAME
|
||||
}, follow=True
|
||||
)
|
||||
|
||||
self.assertContains(response, text='created', status_code=200)
|
||||
|
||||
with self.settings(ORGANIZATION_ID=self.organization_b.pk):
|
||||
self.assertEqual(MetadataType.on_organization.count(), 0)
|
||||
|
||||
def test_metadata_type_delete(self):
|
||||
self.create_metadata_type()
|
||||
|
||||
with self.settings(ORGANIZATION_ID=self.organization_b.pk):
|
||||
response = self.post(
|
||||
'metadata:setup_metadata_type_delete',
|
||||
args=(self.metadata_type.pk,), follow=True
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
with self.settings(ORGANIZATION_ID=self.organization_a.pk):
|
||||
self.assertEqual(MetadataType.on_organization.count(), 1)
|
||||
|
||||
def test_metadata_type_edit(self):
|
||||
self.create_metadata_type()
|
||||
|
||||
with self.settings(ORGANIZATION_ID=self.organization_b.pk):
|
||||
response = self.post(
|
||||
'metadata:setup_metadata_type_edit',
|
||||
args=(self.metadata_type.pk,), data={
|
||||
'label': TEST_METADATA_TYPE_LABEL_2,
|
||||
}
|
||||
)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
with self.settings(ORGANIZATION_ID=self.organization_a.pk):
|
||||
self.metadata_type.refresh_from_db()
|
||||
self.assertEqual(
|
||||
self.metadata_type.label, TEST_METADATA_TYPE_LABEL
|
||||
)
|
||||
@@ -30,7 +30,7 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase):
|
||||
def setUp(self):
|
||||
super(DocumentMetadataTestCase, self).setUp()
|
||||
|
||||
self.metadata_type = MetadataType.objects.create(
|
||||
self.metadata_type = MetadataType.on_organization.create(
|
||||
name=TEST_METADATA_TYPE_NAME, label=TEST_METADATA_TYPE_LABEL
|
||||
)
|
||||
|
||||
@@ -94,11 +94,11 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase):
|
||||
permission_metadata_document_edit.stored_permission
|
||||
)
|
||||
|
||||
document_type_2 = DocumentType.objects.create(
|
||||
document_type_2 = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE_2
|
||||
)
|
||||
|
||||
metadata_type_2 = MetadataType.objects.create(
|
||||
metadata_type_2 = MetadataType.on_organization.create(
|
||||
name=TEST_METADATA_TYPE_NAME_2, label=TEST_METADATA_TYPE_LABEL_2
|
||||
)
|
||||
|
||||
|
||||
@@ -36,11 +36,11 @@ from .permissions import (
|
||||
|
||||
def metadata_edit(request, document_id=None, document_id_list=None):
|
||||
if document_id:
|
||||
documents = Document.objects.filter(pk=document_id)
|
||||
documents = Document.on_organization.filter(pk=document_id)
|
||||
if not documents:
|
||||
raise Document.DoesNotExist
|
||||
elif document_id_list:
|
||||
documents = Document.objects.filter(pk__in=document_id_list)
|
||||
documents = Document.on_organization.filter(pk__in=document_id_list)
|
||||
|
||||
try:
|
||||
Permission.check_permissions(
|
||||
@@ -186,11 +186,11 @@ def metadata_multiple_edit(request):
|
||||
|
||||
def metadata_add(request, document_id=None, document_id_list=None):
|
||||
if document_id:
|
||||
documents = Document.objects.filter(pk=document_id)
|
||||
documents = Document.on_organization.filter(pk=document_id)
|
||||
if not documents:
|
||||
raise Document.DoesNotExist
|
||||
elif document_id_list:
|
||||
documents = Document.objects.select_related('document_type').filter(pk__in=document_id_list)
|
||||
documents = Document.on_organization.select_related('document_type').filter(pk__in=document_id_list)
|
||||
if len(set([document.document_type.pk for document in documents])) > 1:
|
||||
messages.error(
|
||||
request, _('Only select documents of the same type.')
|
||||
@@ -241,7 +241,7 @@ 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_metadata, created = DocumentMetadata.on_organization.get_or_create(
|
||||
document=document,
|
||||
metadata_type=metadata_type,
|
||||
defaults={'value': ''}
|
||||
@@ -331,11 +331,11 @@ def metadata_multiple_add(request):
|
||||
|
||||
def metadata_remove(request, document_id=None, document_id_list=None):
|
||||
if document_id:
|
||||
documents = Document.objects.filter(pk=document_id)
|
||||
documents = Document.on_organization.filter(pk=document_id)
|
||||
if not documents:
|
||||
raise Document.DoesNotExist
|
||||
elif document_id_list:
|
||||
documents = Document.objects.filter(pk__in=document_id_list)
|
||||
documents = Document.on_organization.filter(pk__in=document_id_list)
|
||||
|
||||
try:
|
||||
Permission.check_permissions(
|
||||
@@ -416,10 +416,10 @@ def metadata_remove(request, document_id=None, document_id_list=None):
|
||||
for form in formset.forms:
|
||||
if form.cleaned_data['update']:
|
||||
metadata_type = get_object_or_404(
|
||||
MetadataType, pk=form.cleaned_data['id']
|
||||
MetadataType.on_organization, pk=form.cleaned_data['id']
|
||||
)
|
||||
try:
|
||||
document_metadata = DocumentMetadata.objects.get(
|
||||
document_metadata = DocumentMetadata.on_organization.get(
|
||||
document=document, metadata_type=metadata_type
|
||||
)
|
||||
document_metadata.delete()
|
||||
@@ -494,7 +494,7 @@ class DocumentMetadataListView(SingleObjectListView):
|
||||
)
|
||||
|
||||
def get_document(self):
|
||||
return get_object_or_404(Document, pk=self.kwargs['pk'])
|
||||
return get_object_or_404(Document.on_organization, pk=self.kwargs['pk'])
|
||||
|
||||
def get_extra_context(self):
|
||||
document = self.get_document()
|
||||
@@ -512,13 +512,14 @@ class DocumentMetadataListView(SingleObjectListView):
|
||||
class MetadataTypeCreateView(SingleObjectCreateView):
|
||||
extra_context = {'title': _('Create metadata type')}
|
||||
form_class = MetadataTypeForm
|
||||
model = MetadataType
|
||||
post_action_redirect = reverse_lazy('metadata:setup_metadata_type_list')
|
||||
view_permission = permission_metadata_type_create
|
||||
|
||||
def get_queryset(self):
|
||||
return MetadataType.on_organization.all()
|
||||
|
||||
|
||||
class MetadataTypeDeleteView(SingleObjectDeleteView):
|
||||
model = MetadataType
|
||||
post_action_redirect = reverse_lazy('metadata:setup_metadata_type_list')
|
||||
view_permission = permission_metadata_type_delete
|
||||
|
||||
@@ -529,10 +530,12 @@ class MetadataTypeDeleteView(SingleObjectDeleteView):
|
||||
'title': _('Delete the metadata type: %s?') % self.get_object(),
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
return MetadataType.on_organization.all()
|
||||
|
||||
|
||||
class MetadataTypeEditView(SingleObjectEditView):
|
||||
form_class = MetadataTypeForm
|
||||
model = MetadataType
|
||||
post_action_redirect = reverse_lazy('metadata:setup_metadata_type_list')
|
||||
view_permission = permission_metadata_type_edit
|
||||
|
||||
@@ -542,13 +545,13 @@ class MetadataTypeEditView(SingleObjectEditView):
|
||||
'title': _('Edit metadata type: %s') % self.get_object(),
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
return MetadataType.on_organization.all()
|
||||
|
||||
|
||||
class MetadataTypeListView(SingleObjectListView):
|
||||
view_permission = permission_metadata_type_view
|
||||
|
||||
def get_queryset(self):
|
||||
return MetadataType.objects.all()
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'extra_columns': (
|
||||
@@ -561,6 +564,9 @@ class MetadataTypeListView(SingleObjectListView):
|
||||
'title': _('Metadata types'),
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
return MetadataType.on_organization.all()
|
||||
|
||||
|
||||
class SetupDocumentTypeMetadataOptionalView(AssignRemoveView):
|
||||
decode_content_type = True
|
||||
@@ -572,12 +578,12 @@ class SetupDocumentTypeMetadataOptionalView(AssignRemoveView):
|
||||
self.get_object().metadata.create(metadata_type=item, required=False)
|
||||
|
||||
def get_object(self):
|
||||
return get_object_or_404(DocumentType, pk=self.kwargs['pk'])
|
||||
return get_object_or_404(DocumentType.on_organization, pk=self.kwargs['pk'])
|
||||
|
||||
def left_list(self):
|
||||
return AssignRemoveView.generate_choices(
|
||||
set(MetadataType.objects.all()) - set(
|
||||
MetadataType.objects.filter(
|
||||
set(MetadataType.on_organization.all()) - set(
|
||||
MetadataType.on_organization.filter(
|
||||
id__in=self.get_object().metadata.values_list(
|
||||
'metadata_type', flat=True
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user