diff --git a/program/serializers.py b/program/serializers.py index ceb359c9eea675d279a072308053afe902efe6c7..7e9619817551fd3b3ec6e8ddfe2b800706abc4cb 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -19,7 +19,7 @@ # import re -from typing import TypedDict +from typing import NotRequired, TypedDict from drf_jsonschema_serializer import JSONSchemaField from rest_framework import serializers @@ -1085,6 +1085,25 @@ class NoteSerializer(serializers.ModelSerializer): return instance +class RadioCBASettings(TypedDict): + api_key: NotRequired[str] + domains: list[str] + + +class RadioProgrammeSettings(TypedDict): + fallback_show_id: int | None + + +class RadioPlayoutSettings(TypedDict): + line_in_channels: dict[str, str] + + +class RadioStationSettings(TypedDict): + name: str + logo_id: int | None + website: str + + class RadioSettingsSerializer(serializers.ModelSerializer): cba = serializers.SerializerMethodField() playout = serializers.SerializerMethodField() @@ -1096,7 +1115,7 @@ class RadioSettingsSerializer(serializers.ModelSerializer): fields = read_only_fields model = RadioSettings - def get_cba(self, obj) -> dict[str, str] | dict[str, list[str]]: + def get_cba(self, obj) -> RadioCBASettings: if self.context.get("request").user.is_authenticated: return { "api_key": obj.cba_api_key, @@ -1106,15 +1125,15 @@ class RadioSettingsSerializer(serializers.ModelSerializer): return {"domains": obj.cba_domains} @staticmethod - def get_programme(obj) -> dict[str, int]: + def get_programme(obj) -> RadioProgrammeSettings: return {"fallback_show_id": obj.fallback_show.id if obj.fallback_show else None} @staticmethod - def get_playout(obj) -> dict[str, dict[str, str]]: + def get_playout(obj) -> RadioPlayoutSettings: return {"line_in_channels": obj.line_in_channels} @staticmethod - def get_station(obj) -> dict[str, int | str]: + def get_station(obj) -> RadioStationSettings: return { "name": obj.station_name, "logo_id": obj.station_logo.id if obj.station_logo else None,