From 5466dcdad36d318136f766c414b6e09352a00933 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 8 Jun 2016 01:37:15 -0400 Subject: [PATCH] Convert metadata app to use organizations. --- mayan/apps/metadata/admin.py | 4 +- mayan/apps/metadata/api.py | 10 +-- mayan/apps/metadata/api_views.py | 16 ++--- mayan/apps/metadata/forms.py | 4 +- mayan/apps/metadata/handlers.py | 2 +- mayan/apps/metadata/managers.py | 29 +++++++++ .../0008_metadatatype_organization.py | 21 ++++++ mayan/apps/metadata/models.py | 43 ++++++++---- mayan/apps/metadata/serializers.py | 2 +- mayan/apps/metadata/tasks.py | 6 +- mayan/apps/metadata/tests/test_api.py | 64 ++++++------------ mayan/apps/metadata/tests/test_models.py | 9 ++- .../metadata/tests/test_organization_views.py | 65 +++++++++++++++++++ mayan/apps/metadata/tests/test_views.py | 6 +- mayan/apps/metadata/views.py | 44 +++++++------ 15 files changed, 222 insertions(+), 103 deletions(-) create mode 100644 mayan/apps/metadata/migrations/0008_metadatatype_organization.py create mode 100644 mayan/apps/metadata/tests/test_organization_views.py diff --git a/mayan/apps/metadata/admin.py b/mayan/apps/metadata/admin.py index 8af71031b4..06f22d84da 100644 --- a/mayan/apps/metadata/admin.py +++ b/mayan/apps/metadata/admin.py @@ -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' ) diff --git a/mayan/apps/metadata/api.py b/mayan/apps/metadata/api.py index 397ac35db9..789eee037e 100644 --- a/mayan/apps/metadata/api.py +++ b/mayan/apps/metadata/api.py @@ -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 ) diff --git a/mayan/apps/metadata/api_views.py b/mayan/apps/metadata/api_views.py index 569a95277d..81d952e12c 100644 --- a/mayan/apps/metadata/api_views.py +++ b/mayan/apps/metadata/api_views.py @@ -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: diff --git a/mayan/apps/metadata/forms.py b/mayan/apps/metadata/forms.py index e40ea1aab4..97062946a8 100644 --- a/mayan/apps/metadata/forms.py +++ b/mayan/apps/metadata/forms.py @@ -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 ) diff --git a/mayan/apps/metadata/handlers.py b/mayan/apps/metadata/handlers.py index da408481e4..d141ff4f4a 100644 --- a/mayan/apps/metadata/handlers.py +++ b/mayan/apps/metadata/handlers.py @@ -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 diff --git a/mayan/apps/metadata/managers.py b/mayan/apps/metadata/managers.py index 5f2fcd3dae..8453b2ed9a 100644 --- a/mayan/apps/metadata/managers.py +++ b/mayan/apps/metadata/managers.py @@ -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() + ) diff --git a/mayan/apps/metadata/migrations/0008_metadatatype_organization.py b/mayan/apps/metadata/migrations/0008_metadatatype_organization.py new file mode 100644 index 0000000000..55af7c1c26 --- /dev/null +++ b/mayan/apps/metadata/migrations/0008_metadatatype_organization.py @@ -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'), + ), + ] diff --git a/mayan/apps/metadata/models.py b/mayan/apps/metadata/models.py index 8ff7609517..5ce1c65ad8 100644 --- a/mayan/apps/metadata/models.py +++ b/mayan/apps/metadata/models.py @@ -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) diff --git a/mayan/apps/metadata/serializers.py b/mayan/apps/metadata/serializers.py index 828a7792d5..4d9b5f8900 100644 --- a/mayan/apps/metadata/serializers.py +++ b/mayan/apps/metadata/serializers.py @@ -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( diff --git a/mayan/apps/metadata/tasks.py b/mayan/apps/metadata/tasks.py index ebf0f6d596..6d53a3fcd0 100644 --- a/mayan/apps/metadata/tasks.py +++ b/mayan/apps/metadata/tasks.py @@ -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) diff --git a/mayan/apps/metadata/tests/test_api.py b/mayan/apps/metadata/tests/test_api.py index da70c338f2..1b17a25885 100644 --- a/mayan/apps/metadata/tests/test_api.py +++ b/mayan/apps/metadata/tests/test_api.py @@ -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 ) diff --git a/mayan/apps/metadata/tests/test_models.py b/mayan/apps/metadata/tests/test_models.py index 3d96286a64..9a2ac94213 100644 --- a/mayan/apps/metadata/tests/test_models.py +++ b/mayan/apps/metadata/tests/test_models.py @@ -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( diff --git a/mayan/apps/metadata/tests/test_organization_views.py b/mayan/apps/metadata/tests/test_organization_views.py new file mode 100644 index 0000000000..0a387e0258 --- /dev/null +++ b/mayan/apps/metadata/tests/test_organization_views.py @@ -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 + ) diff --git a/mayan/apps/metadata/tests/test_views.py b/mayan/apps/metadata/tests/test_views.py index 47caf82b3e..db741ff623 100644 --- a/mayan/apps/metadata/tests/test_views.py +++ b/mayan/apps/metadata/tests/test_views.py @@ -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 ) diff --git a/mayan/apps/metadata/views.py b/mayan/apps/metadata/views.py index 62631129b0..ba1a9e3b3a 100644 --- a/mayan/apps/metadata/views.py +++ b/mayan/apps/metadata/views.py @@ -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 )