From 46d4bd34e5fbfa4f582360d4d90515ae6e560407 Mon Sep 17 00:00:00 2001 From: Robin Tissot <tissotrobin@gmail.com> Date: Mon, 10 May 2021 17:46:54 +0200 Subject: [PATCH] Update api with projects. --- app/apps/api/serializers.py | 20 +++++++++-- app/apps/api/urls.py | 4 ++- app/apps/api/views.py | 15 +++++++- .../migrations/0047_auto_20210510_1512.py | 36 +++++++++++++++++++ 4 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 app/apps/core/migrations/0047_auto_20210510_1512.py diff --git a/app/apps/api/serializers.py b/app/apps/api/serializers.py index 220b4642..8076d780 100644 --- a/app/apps/api/serializers.py +++ b/app/apps/api/serializers.py @@ -11,7 +11,8 @@ from easy_thumbnails.files import get_thumbnailer from api.fields import DisplayChoiceField from users.models import User -from core.models import (Document, +from core.models import (Project, + Document, DocumentPart, Block, Line, @@ -58,6 +59,12 @@ class ScriptSerializer(serializers.ModelSerializer): fields = '__all__' +class ProjectSerializer(serializers.ModelSerializer): + class Meta: + model = Project + fields = '__all__' + + class PartMoveSerializer(serializers.ModelSerializer): index = serializers.IntegerField() @@ -112,11 +119,18 @@ class DocumentSerializer(serializers.ModelSerializer): valid_block_types = BlockTypeSerializer(many=True, read_only=True) valid_line_types = LineTypeSerializer(many=True, read_only=True) parts_count = serializers.SerializerMethodField() + project = serializers.SlugRelatedField(slug_field='slug', + queryset=Project.objects.all()) class Meta: model = Document - fields = ('pk', 'name', 'transcriptions', 'main_script', 'read_direction', - 'valid_block_types', 'valid_line_types', 'parts_count') + fields = ('pk', 'name', 'project', 'transcriptions', 'main_script', 'read_direction', + 'valid_block_types', 'valid_line_types', 'parts_count', + 'created_at', 'updated_at') + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['project'].queryset = Project.objects.for_user(self.context['user']) def get_parts_count(self, document): return document.parts.count() diff --git a/app/apps/api/urls.py b/app/apps/api/urls.py index 928ec985..e2a8c20f 100644 --- a/app/apps/api/urls.py +++ b/app/apps/api/urls.py @@ -2,7 +2,8 @@ from django.urls import include, path from rest_framework_nested import routers from rest_framework.authtoken import views -from api.views import (DocumentViewSet, +from api.views import (ProjectViewSet, + DocumentViewSet, UserViewSet, PartViewSet, DocumentTranscriptionViewSet, @@ -16,6 +17,7 @@ from api.views import (DocumentViewSet, router = routers.DefaultRouter() router.register(r'scripts', ScriptViewSet) +router.register(r'projects', ProjectViewSet) 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 f33ba76d..1870d0e1 100644 --- a/app/apps/api/views.py +++ b/app/apps/api/views.py @@ -16,6 +16,7 @@ from rest_framework.pagination import PageNumberPagination from rest_framework.serializers import PrimaryKeyRelatedField from api.serializers import (UserOnboardingSerializer, + ProjectSerializer, DocumentSerializer, PartDetailSerializer, PartSerializer, @@ -35,7 +36,8 @@ from api.serializers import (UserOnboardingSerializer, TranscribeSerializer, OcrModelSerializer) -from core.models import (Document, +from core.models import (Project, + Document, DocumentPart, Block, Line, @@ -75,6 +77,12 @@ class ScriptViewSet(ReadOnlyModelViewSet): serializer_class = ScriptSerializer +class ProjectViewSet(ModelViewSet): + queryset = Project.objects.all() + serializer_class = ProjectSerializer + paginate_by = 10 + + class DocumentViewSet(ModelViewSet): queryset = Document.objects.all() serializer_class = DocumentSerializer @@ -86,6 +94,11 @@ class DocumentViewSet(ModelViewSet): Prefetch('valid_line_types', queryset=LineType.objects.order_by('name')), ) + def get_serializer_context(self): + context = super().get_serializer_context() + context['user'] = self.request.user + return context + def form_error(self, msg): return Response({'status': 'error', 'error': msg}, status=400) diff --git a/app/apps/core/migrations/0047_auto_20210510_1512.py b/app/apps/core/migrations/0047_auto_20210510_1512.py new file mode 100644 index 00000000..e0b7560b --- /dev/null +++ b/app/apps/core/migrations/0047_auto_20210510_1512.py @@ -0,0 +1,36 @@ +# Generated by Django 2.2.20 on 2021-05-10 15:12 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0046_data_share_doc_to_proj'), + ] + + operations = [ + migrations.AlterModelOptions( + name='project', + options={'ordering': ('-updated_at',)}, + ), + migrations.RemoveField( + model_name='document', + name='shared_with_groups', + ), + migrations.RemoveField( + model_name='document', + name='shared_with_users', + ), + migrations.AlterField( + model_name='document', + name='project', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='core.Project'), + ), + migrations.AlterField( + model_name='document', + name='workflow_state', + field=models.PositiveSmallIntegerField(choices=[(0, 'Draft'), (2, 'Published'), (3, 'Archived')], default=0), + ), + ] -- GitLab