From 0386594fbf891c2acc20c15200fa52375c7047da Mon Sep 17 00:00:00 2001 From: Robin Tissot <tissotrobin@gmail.com> Date: Fri, 23 Apr 2021 10:30:01 +0200 Subject: [PATCH] Adds main_script and read direction to the document api endpoint. --- app/apps/api/serializers.py | 22 +++++++++++++++++++++- app/apps/api/urls.py | 2 ++ app/apps/api/views.py | 10 +++++++++- app/apps/core/models.py | 3 ++- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/app/apps/api/serializers.py b/app/apps/api/serializers.py index 081a3cf0..f99a1713 100644 --- a/app/apps/api/serializers.py +++ b/app/apps/api/serializers.py @@ -19,6 +19,7 @@ from core.models import (Document, LineTranscription, BlockType, LineType, + Script, OcrModel) from core.tasks import (segtrain, train, segment, transcribe) @@ -51,6 +52,12 @@ class ImageField(serializers.ImageField): return data +class ScriptSerializer(serializers.ModelSerializer): + class Meta: + model = Script + fields = '__all__' + + class PartMoveSerializer(serializers.ModelSerializer): index = serializers.IntegerField() @@ -99,6 +106,7 @@ class LineTypeSerializer(serializers.ModelSerializer): class DocumentSerializer(serializers.ModelSerializer): + main_script = serializers.CharField(source='main_script.name') transcriptions = TranscriptionSerializer(many=True, read_only=True) valid_block_types = BlockTypeSerializer(many=True, read_only=True) valid_line_types = LineTypeSerializer(many=True, read_only=True) @@ -106,12 +114,24 @@ class DocumentSerializer(serializers.ModelSerializer): class Meta: model = Document - fields = ('pk', 'name', 'transcriptions', + fields = ('pk', 'name', 'transcriptions', 'main_script', 'read_direction', 'valid_block_types', 'valid_line_types', 'parts_count') def get_parts_count(self, document): return document.parts.count() + def validate_main_script(self, value): + try: + return Script.objects.get(name=value) + except Script.DoesNotExist: + raise serializers.ValidationError('This script does not exists in the database.') + + def update(self, instance, validated_data): + instance.name = validated_data.get('name', instance.name) + instance.main_script = validated_data.get('main_script')['name'] or instance.main_script + instance.read_direction = validated_data.get('read_direction', instance.read_direction) + return instance + class PartSerializer(serializers.ModelSerializer): image = ImageField(required=False, thumbnails=['card', 'large']) diff --git a/app/apps/api/urls.py b/app/apps/api/urls.py index 5c68c751..928ec985 100644 --- a/app/apps/api/urls.py +++ b/app/apps/api/urls.py @@ -11,9 +11,11 @@ from api.views import (DocumentViewSet, BlockTypeViewSet, LineTypeViewSet, LineTranscriptionViewSet, + ScriptViewSet, OcrModelViewSet) router = routers.DefaultRouter() +router.register(r'scripts', ScriptViewSet) router.register(r'documents', DocumentViewSet) router.register(r'user', UserViewSet) router.register(r'types/block', BlockTypeViewSet) diff --git a/app/apps/api/views.py b/app/apps/api/views.py index 23722ea8..f33ba76d 100644 --- a/app/apps/api/views.py +++ b/app/apps/api/views.py @@ -11,7 +11,7 @@ from django.urls import reverse from rest_framework.decorators import action from rest_framework.response import Response from rest_framework import status -from rest_framework.viewsets import ModelViewSet +from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet from rest_framework.pagination import PageNumberPagination from rest_framework.serializers import PrimaryKeyRelatedField @@ -31,6 +31,7 @@ from api.serializers import (UserOnboardingSerializer, SegmentSerializer, TrainSerializer, SegTrainSerializer, + ScriptSerializer, TranscribeSerializer, OcrModelSerializer) @@ -43,6 +44,7 @@ from core.models import (Document, Transcription, LineTranscription, OcrModel, + Script, AlreadyProcessingException) from core.tasks import recalculate_masks @@ -67,6 +69,12 @@ class UserViewSet(ModelViewSet): return Response(status=status.HTTP_200_OK) +class ScriptViewSet(ReadOnlyModelViewSet): + queryset = Script.objects.all() + paginate_by = 20 + serializer_class = ScriptSerializer + + class DocumentViewSet(ModelViewSet): queryset = Document.objects.all() serializer_class = DocumentSerializer diff --git a/app/apps/core/models.py b/app/apps/core/models.py index 680f26f3..9299c1bc 100644 --- a/app/apps/core/models.py +++ b/app/apps/core/models.py @@ -187,7 +187,8 @@ class Document(models.Model): read_direction = models.CharField( max_length=3, choices=READ_DIRECTION_CHOICES, - default=READ_DIRECTION_LTR + default=READ_DIRECTION_LTR, + help_text=_("The read direction describes the order of the elements in the document, in opposition with the text direction which describes the order of the words in a line and is set by the script.") ) typology = models.ForeignKey(DocumentType, null=True, blank=True, on_delete=models.SET_NULL) -- GitLab