From f1ab5f157c44c8a385c2072acb015ff460dcff48 Mon Sep 17 00:00:00 2001 From: Erwan Rouchet <rouchet@teklia.com> Date: Mon, 8 Jun 2020 12:24:55 +0200 Subject: [PATCH] Update default corpora types --- arkindex/documents/models.py | 7 ++++ arkindex/documents/serializers/elements.py | 10 +----- arkindex/documents/tests/test_corpus.py | 26 +++++++++----- arkindex/project/default_corpus.py | 42 ++++++++++++++++------ arkindex/users/api.py | 8 ++--- arkindex/users/tests/test_registration.py | 11 ++++-- 6 files changed, 69 insertions(+), 35 deletions(-) diff --git a/arkindex/documents/models.py b/arkindex/documents/models.py index 26ca7659d8..825043879f 100644 --- a/arkindex/documents/models.py +++ b/arkindex/documents/models.py @@ -6,6 +6,7 @@ from django.core.exceptions import ValidationError from enumfields import EnumField, Enum from arkindex_common.enums import TranscriptionType, MetaType, EntityType from arkindex_common.ml_tool import MLToolType +from arkindex.project.default_corpus import DEFAULT_CORPUS_TYPES from arkindex.project.models import IndexableModel from arkindex.project.fields import ArrayField from arkindex.project.elastic import ESTranscription, ESElement, ESEntity @@ -81,6 +82,12 @@ class Corpus(IndexableModel): return rights + def create_default_types(self): + self.types.bulk_create( + ElementType(corpus=self, **values) + for values in DEFAULT_CORPUS_TYPES + ) + class ElementType(models.Model): id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False) diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py index 3fe4e89362..2d27bbe05f 100644 --- a/arkindex/documents/serializers/elements.py +++ b/arkindex/documents/serializers/elements.py @@ -78,15 +78,7 @@ class CorpusSerializer(serializers.ModelSerializer): can_write=True, can_admin=True, ) - corpus.types.create( - folder=True, - slug='folder', - display_name='Folder', - ) - corpus.types.create( - slug='page', - display_name='Page', - ) + corpus.create_default_types() return corpus diff --git a/arkindex/documents/tests/test_corpus.py b/arkindex/documents/tests/test_corpus.py index 91cc9b76a8..a0a1bd8412 100644 --- a/arkindex/documents/tests/test_corpus.py +++ b/arkindex/documents/tests/test_corpus.py @@ -6,6 +6,7 @@ from django.urls import reverse from rest_framework import status from arkindex.documents.models import Corpus, Element, Right +from arkindex.project.default_corpus import DEFAULT_CORPUS_TYPES from arkindex.project.tests import FixtureAPITestCase import datetime import mock @@ -279,14 +280,23 @@ class TestCorpus(FixtureAPITestCase): right = corpus.corpus_right.get(user=self.user) self.assertTrue(right.can_write) self.assertTrue(right.can_admin) - self.assertEqual(corpus.types.count(), 2) - folder, page = corpus.types.order_by('slug') - self.assertEqual(folder.slug, 'folder') - self.assertEqual(folder.display_name, 'Folder') - self.assertTrue(folder.folder) - self.assertEqual(page.slug, 'page') - self.assertEqual(page.display_name, 'Page') - self.assertFalse(page.folder) + + # Assert defaults types are set on the new corpus + self.assertCountEqual( + list(corpus.types.values( + 'slug', + 'display_name', + 'folder', + 'default_view', + 'allowed_transcription' + )), + [{ + 'folder': False, + 'default_view': False, + 'allowed_transcription': None, + **values + } for values in DEFAULT_CORPUS_TYPES] + ) def test_create_requires_login(self): response = self.client.post(reverse('api:corpus'), { diff --git a/arkindex/project/default_corpus.py b/arkindex/project/default_corpus.py index a4681b6373..965e90f251 100644 --- a/arkindex/project/default_corpus.py +++ b/arkindex/project/default_corpus.py @@ -1,19 +1,41 @@ # Default corpus attributes +from arkindex_common.enums import TranscriptionType + DEFAULT_CORPUS_TYPES = [ { - 'slug': 'volume', - 'display_name': 'Volume', + 'slug': 'folder', + 'display_name': 'Folder', 'folder': True, - 'default_view': True - }, { + 'default_view': True, + }, + { 'slug': 'page', - 'display_name': 'Page' - }, { + 'display_name': 'Page', + }, + { 'slug': 'text_line', - 'display_name': 'Text line' - }, { - 'slug': 'text', - 'display_name': 'Text' + 'display_name': 'Text line', + 'allowed_transcription': TranscriptionType.Line, + }, + { + 'slug': 'illustration', + 'display_name': 'Illustration', + }, + { + 'slug': 'decoration', + 'display_name': 'Decoration', + }, + { + 'slug': 'chart', + 'display_name': 'Chart', + }, + { + 'slug': 'table', + 'display_name': 'Table', + }, + { + 'slug': 'signature', + 'display_name': 'Signature', } ] diff --git a/arkindex/users/api.py b/arkindex/users/api.py index 652c9653ab..77cbbce5e8 100644 --- a/arkindex/users/api.py +++ b/arkindex/users/api.py @@ -15,8 +15,7 @@ from rest_framework.generics import \ from rest_framework.response import Response from rest_framework.exceptions import AuthenticationFailed, ValidationError, PermissionDenied from arkindex.project.permissions import IsAuthenticatedOrReadOnly, IsVerified -from arkindex.project.default_corpus import DEFAULT_CORPUS_TYPES -from arkindex.documents.models import Corpus, ElementType +from arkindex.documents.models import Corpus from arkindex.users.providers import oauth_providers, get_provider from arkindex.users.models import User, OAuthStatus, UserScope, Scope from arkindex.users.serializers import ( @@ -246,10 +245,7 @@ class UserEmailVerification(APIView): can_write=True ) # Add default types - corpus.types.bulk_create([ - ElementType(corpus=corpus, **values) - for values in DEFAULT_CORPUS_TYPES - ]) + corpus.create_default_types() # Redirtect to home page url = '/' diff --git a/arkindex/users/tests/test_registration.py b/arkindex/users/tests/test_registration.py index 25dbfc5c62..2b9ae3d873 100644 --- a/arkindex/users/tests/test_registration.py +++ b/arkindex/users/tests/test_registration.py @@ -111,11 +111,18 @@ class TestRegistration(FixtureAPITestCase): list(new_corpus) ) # Assert defaults types are set on the new corpus - self.assertListEqual( - list(new_corpus.get().types.values('slug', 'display_name', 'folder', 'default_view')), + self.assertCountEqual( + list(new_corpus.get().types.values( + 'slug', + 'display_name', + 'folder', + 'default_view', + 'allowed_transcription' + )), [{ 'folder': False, 'default_view': False, + 'allowed_transcription': None, **values } for values in DEFAULT_CORPUS_TYPES] ) -- GitLab