diff --git a/app/apps/api/serializers.py b/app/apps/api/serializers.py index 081a3cf0c5b6919bc2282b334289f17d6dbb57df..f99a17131bfbf5a7c439562facb2f3b5e714c8be 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 5c68c75144c91691322606062c09a3df48437534..928ec985a8265e478e0bdf05e380b396641746cc 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 23722ea8683c7e712fc6e4761100ada5eac108f5..f33ba76d4db9f3d9c3e0acd681d53083e812252e 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 680f26f313b5a88b18c3f5133f0737c4cf062fef..9299c1bcd024634896fdecc6d9dfc2630aeef831 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)