Skip to content

Commit

Permalink
Fix translated fields in OpenAPI docs
Browse files Browse the repository at this point in the history
  • Loading branch information
juuso-j committed Jul 3, 2024
1 parent 37e36af commit ee8415b
Showing 1 changed file with 42 additions and 11 deletions.
53 changes: 42 additions & 11 deletions services/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@
from django.utils import timezone, translation
from django.utils.module_loading import import_string
from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import extend_schema
from drf_spectacular.utils import (
extend_schema,
extend_schema_field,
extend_schema_serializer,
)
from modeltranslation.translator import NotRegistered, translator
from mptt.utils import drilldown_tree_for_node
from munigeo import api as munigeo_api
Expand Down Expand Up @@ -92,6 +96,17 @@ def register_view(klass, name, basename=None):
logger = logging.getLogger(__name__)


class TranslationsSerializer(serializers.Serializer):
fi = serializers.CharField(required=False)
sv = serializers.CharField(required=False)
en = serializers.CharField(required=False)


@extend_schema_field(TranslationsSerializer)
class TranslationsField(serializers.CharField):
pass


class MPTTModelSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
super(MPTTModelSerializer, self).__init__(*args, **kwargs)
Expand Down Expand Up @@ -210,6 +225,13 @@ def to_representation(self, obj):
return ret


class ServicesTranslatedModelSerializer(TranslatedModelSerializer):
def __init__(self, *args, **kwargs):
super(ServicesTranslatedModelSerializer, self).__init__(*args, **kwargs)
for field_name in self.translated_fields:
self.fields[field_name] = TranslationsField()


def root_services(services):
tree_ids = set(s.tree_id for s in services)
return map(
Expand Down Expand Up @@ -274,7 +296,7 @@ def to_representation(self, obj):


class DepartmentSerializer(
TranslatedModelSerializer, MPTTModelSerializer, JSONAPISerializer
ServicesTranslatedModelSerializer, MPTTModelSerializer, JSONAPISerializer
):
id = serializers.SerializerMethodField("get_uuid")
parent = serializers.SerializerMethodField()
Expand All @@ -296,7 +318,7 @@ def get_parent(self, obj):


class ServiceNodeSerializer(
TranslatedModelSerializer, MPTTModelSerializer, JSONAPISerializer
ServicesTranslatedModelSerializer, MPTTModelSerializer, JSONAPISerializer
):
children = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

Expand Down Expand Up @@ -350,7 +372,7 @@ class Meta:
)


class ServiceSerializer(TranslatedModelSerializer, JSONAPISerializer):
class ServiceSerializer(ServicesTranslatedModelSerializer, JSONAPISerializer):
def to_representation(self, obj):
ret = super(ServiceSerializer, self).to_representation(obj)
ret["unit_count"] = {"municipality": {}}
Expand Down Expand Up @@ -392,7 +414,7 @@ class Meta:
fields = ["name", "root_service_node"]


class ServiceDetailsSerializer(TranslatedModelSerializer, JSONAPISerializer):
class ServiceDetailsSerializer(ServicesTranslatedModelSerializer, JSONAPISerializer):
def to_representation(self, obj):
ret = super(ServiceDetailsSerializer, self).to_representation(obj)
service_data = RelatedServiceSerializer(obj.service).data
Expand Down Expand Up @@ -496,7 +518,9 @@ def choicefield_string(choices, key, obj):
return None


class UnitConnectionSerializer(TranslatedModelSerializer, serializers.ModelSerializer):
class UnitConnectionSerializer(
ServicesTranslatedModelSerializer, serializers.ModelSerializer
):
section_type = serializers.SerializerMethodField()

class Meta:
Expand All @@ -515,7 +539,9 @@ class UnitConnectionViewSet(viewsets.ReadOnlyModelViewSet):
register_view(UnitConnectionViewSet, "unit_connection")


class UnitEntranceSerializer(TranslatedModelSerializer, munigeo_api.GeoModelSerializer):
class UnitEntranceSerializer(
ServicesTranslatedModelSerializer, munigeo_api.GeoModelSerializer
):
location = serializers.SerializerMethodField()

class Meta:
Expand All @@ -526,7 +552,11 @@ def get_location(self, obj):
return munigeo_api.geom_to_json(obj.location, self.srs)


class UnitEntranceViewSet(munigeo_api.GeoModelAPIView, viewsets.ReadOnlyModelViewSet):
class UnitEntranceViewSet(
ServicesTranslatedModelSerializer,
munigeo_api.GeoModelAPIView,
viewsets.ReadOnlyModelViewSet,
):
queryset = UnitEntrance.objects.all()
serializer_class = UnitEntranceSerializer

Expand Down Expand Up @@ -613,7 +643,7 @@ def get_queryset(self):


class UnitSerializer(
TranslatedModelSerializer, munigeo_api.GeoModelSerializer, JSONAPISerializer
ServicesTranslatedModelSerializer, munigeo_api.GeoModelSerializer, JSONAPISerializer
):
connections = UnitConnectionSerializer(many=True)
entrances = UnitEntranceSerializer(many=True)
Expand Down Expand Up @@ -1170,6 +1200,7 @@ def list(self, request, *args, **kwargs):
)


@extend_schema_serializer(deprecate_fields=["service_point_id"])
class AdministrativeDivisionSerializer(munigeo_api.AdministrativeDivisionSerializer):
def to_representation(self, obj):
ret = super(AdministrativeDivisionSerializer, self).to_representation(obj)
Expand Down Expand Up @@ -1277,7 +1308,7 @@ class PostalCodeAreaViewSet(munigeo_api.PostalCodeAreaViewSet):
register_view(PostalCodeAreaViewSet, "postalcodearea")


class AnnouncementSerializer(TranslatedModelSerializer, JSONAPISerializer):
class AnnouncementSerializer(ServicesTranslatedModelSerializer, JSONAPISerializer):
class Meta:
model = Announcement
exclude = ["id", "active"]
Expand All @@ -1291,7 +1322,7 @@ class AnnouncementViewSet(viewsets.ReadOnlyModelViewSet):
register_view(AnnouncementViewSet, "announcement")


class ErrorMessageSerializer(TranslatedModelSerializer, JSONAPISerializer):
class ErrorMessageSerializer(ServicesTranslatedModelSerializer, JSONAPISerializer):
class Meta:
model = ErrorMessage
exclude = ["id", "active"]
Expand Down

0 comments on commit ee8415b

Please sign in to comment.