From c3a100b01116cf503e9f708618a0b2feadcc02b7 Mon Sep 17 00:00:00 2001 From: KK Date: Mon, 9 Sep 2024 15:02:18 +0200 Subject: [PATCH] refactor(api): rename, reorder, remove code Reorder code, rename variables, classes for clarity (e.g. pluralise where multiples are expected), update class references for consistency (imports, inheritance), remove leftover function for retrieving Choices labels. --- apis_ontology/api/serializers.py | 36 +++++++++----------------------- apis_ontology/api/views.py | 19 ++++++++--------- 2 files changed, 19 insertions(+), 36 deletions(-) diff --git a/apis_ontology/api/serializers.py b/apis_ontology/api/serializers.py index b5d00d9..ab85a21 100644 --- a/apis_ontology/api/serializers.py +++ b/apis_ontology/api/serializers.py @@ -21,20 +21,16 @@ ) -def get_choices_labels(values: list, text_choices): - """ - Return labels for enumeration type TextChoices. - - :param values: an array of (valid) TextChoices values - :param text_choices: the TextChoices class against which to match the values - :return: a list of labels - """ - labels = [] +class RelatedWorksDict(TypedDict): + id: int + title: str + subtitle: str | None + relation_type: str - for v in values: - labels.append(text_choices(v).label) - return labels +class NameAndIdSerializer(serializers.Serializer): + id = serializers.IntegerField() + name = serializers.CharField() class PlaceDataSerializerMin(serializers.ModelSerializer): @@ -90,13 +86,8 @@ class Meta: ] -class SimpleDetailSerializer(serializers.Serializer): - id = serializers.IntegerField() - name = serializers.CharField() - - class ExpressionDataDetailSerializer(ExpressionDataSerializer): - publisher = SimpleDetailSerializer(required=False, allow_null=True) + publisher = NameAndIdSerializer(required=False, allow_null=True) place_of_publication = PlaceDataSerializerMin( required=False, allow_null=True, many=True ) @@ -118,13 +109,6 @@ class Meta: ] -class RelatedWorksDict(TypedDict): - id: int - title: str - subtitle: str | None - relation_type: str - - class CharacterDataSerializer(serializers.ModelSerializer): fictionality = serializers.ListField( child=serializers.CharField(allow_null=True), required=False, allow_empty=True @@ -195,7 +179,7 @@ class WorkDetailSerializer(serializers.ModelSerializer): ) related_works = serializers.SerializerMethodField() characters = CharacterDataSerializer( - source="character_data", + source="related_characters", required=False, allow_empty=True, many=True, diff --git a/apis_ontology/api/views.py b/apis_ontology/api/views.py index f6a232d..9f53fc7 100644 --- a/apis_ontology/api/views.py +++ b/apis_ontology/api/views.py @@ -9,8 +9,7 @@ from django.db.models import OuterRef, Q from django.db.models.functions import JSONObject from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import pagination, permissions, viewsets -from rest_framework.mixins import RetrieveModelMixin +from rest_framework import mixins, pagination, permissions, viewsets from apis_ontology.models import ( Archive, @@ -215,7 +214,7 @@ def get_queryset(self): triple_set_from_subj__prop__name_reverse__in=["has publisher"], ).values("name") - expression_place = Place.objects.filter( + expression_places = Place.objects.filter( triple_set_from_obj__subj_id=OuterRef("pk"), triple_set_from_obj__prop__name_forward__in=["is published in"], ).values_list("name") @@ -226,7 +225,7 @@ def get_queryset(self): triple_set_from_obj__prop__name_reverse__in=["realises"], ).annotate( publisher=Subquery(expression_publisher[:1]), - place=ArraySubquery(expression_place), + place=ArraySubquery(expression_places), ) ).values( json=JSONObject( @@ -251,7 +250,7 @@ def get_queryset(self): .values("language") ) - facet_topic = Topic.objects.filter( + facet_topics = Topic.objects.filter( triple_set_from_obj__subj_id=OuterRef("pk"), triple_set_from_obj__prop__name_forward__in=["is about topic"], ).values_list("name") @@ -262,7 +261,7 @@ def get_queryset(self): expression_data=ArraySubquery(related_expressions), work_type=ArraySubquery(work_types), facet_language=ArraySubquery(facet_languages), - facet_topic=ArraySubquery(facet_topic), + facet_topic=ArraySubquery(facet_topics), ) .order_by("title", "subtitle") ) @@ -270,7 +269,7 @@ def get_queryset(self): return works -class WorkDetailViewSet(RetrieveModelMixin, viewsets.GenericViewSet): +class WorkDetailViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet): """API endpoint which returns full Work objects. The full result set is meant to populate the detail view of the @@ -326,7 +325,7 @@ def get_queryset(self): ) ) - expression_place = related_places.filter( + expression_places = related_places.filter( triple_set_from_obj__subj_id=OuterRef("pk"), triple_set_from_obj__prop__name_forward__in=["is published in"], ).distinct() @@ -337,7 +336,7 @@ def get_queryset(self): triple_set_from_obj__prop__name_reverse__in=["realises"], ).annotate( publisher=Subquery(expression_publisher), - place=ArraySubquery(expression_place), + place=ArraySubquery(expression_places), ) ).values( json=JSONObject( @@ -461,7 +460,7 @@ def get_queryset(self): .annotate( expression_data=ArraySubquery(related_expressions), work_type=ArraySubquery(work_types), - character_data=ArraySubquery(related_characters), + related_characters=ArraySubquery(related_characters), related_physical_objects=ArraySubquery(related_physical_objects), related_topics=ArraySubquery(topics), related_persons=ArraySubquery(related_persons),