diff --git a/arkindex/documents/models.py b/arkindex/documents/models.py index 26ca7659d8da55717ab9ddfb5e347ade6f62e039..825043879fd35785f4daf19d682bff892f2b8d80 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 3fe4e8936233bec55fe6aba83a5b066b639a123c..2d27bbe05fb52c2e516c9290bfcc5646c48f9154 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 91cc9b76a8af95b4236aa617466c3b32ccd9ccd0..a0a1bd84123f5f2685347c459da8b8ea687437f9 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 a4681b6373e75769e85b8db5c8c8d8b8e7bbe979..965e90f251d5a082dda57f3df308f507e32cbc1c 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 652c9653abd93be0983d38aaffebe51d2a487a72..77cbbce5e8b43e81a022fcd81641163c16521f74 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 25dbfc5c62ac1d68791df693c305f2927e29cb6e..2b9ae3d87380913f0de34cd6d5f3051076cebf89 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] )