From 5bd89e8ad1a97092722b741ff96aa56207c336a3 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Fri, 5 Jul 2024 17:07:22 -0400 Subject: [PATCH] refactor: extract TypeDict annotations into typing module --- program/serializers.py | 80 ++++++------------------------------------ program/typing.py | 69 +++++++++++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 70 deletions(-) diff --git a/program/serializers.py b/program/serializers.py index 3b95b4bd..66fd50f9 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -19,7 +19,6 @@ # import re -from typing import Literal, NotRequired, TypedDict from drf_jsonschema_serializer import JSONSchemaField from rest_framework import serializers @@ -52,7 +51,17 @@ from program.models import ( Type, UserProfile, ) -from program.typing import NestedEpisode, NestedSchedule, NestedShow +from program.typing import ( + Logo, + NestedEpisode, + NestedSchedule, + NestedShow, + RadioCBASettings, + RadioImageRequirementsSettings, + RadioPlayoutSettings, + RadioProgramSettings, + RadioStationSettings, +) from program.utils import update_links SOLUTION_CHOICES = { @@ -278,12 +287,6 @@ class PPOIField(serializers.CharField): return f"{left}x{top}" -class Thumbnail(TypedDict): - width: float - height: float - url: str - - class ImageSerializer(serializers.ModelSerializer): license_id = serializers.PrimaryKeyRelatedField( allow_null=True, @@ -1174,67 +1177,6 @@ class NoteSerializer(serializers.ModelSerializer): return instance -class RadioCBASettings(TypedDict): - api_key: NotRequired[str] - domains: list[str] - - -class ProgramFallback(TypedDict): - default_pool: str - show_id: int | None - - -class MicroProgram(TypedDict): - show_id: int | None - - -class RadioProgramSettings(TypedDict): - fallback: ProgramFallback - micro: MicroProgram - - -class PlayoutPools(TypedDict): - fallback: str | None - - -class RadioPlayoutSettings(TypedDict): - line_in_channels: dict[str, str] - pools: PlayoutPools - - -class Logo(TypedDict): - url: str - height: int - width: int - - -class RadioStationSettings(TypedDict): - name: str - logo: Logo | None - website: str - - -class ImageFrame(TypedDict): - aspect_ratio: tuple[int, int] | tuple[float, float] - shape: Literal["rect", "round"] - - -class ImageRequirements(TypedDict): - frame: ImageFrame - - -# done this way, because the keys have dots (".") -RadioImageRequirementsSettings = TypedDict( - "RadioImageRequirementsSettings", - { - "host.image": ImageRequirements, - "note.image": ImageRequirements, - "show.image": ImageRequirements, - "show.logo": ImageRequirements, - }, -) - - class RadioSettingsSerializer(serializers.ModelSerializer): cba = serializers.SerializerMethodField() image_requirements = serializers.SerializerMethodField() diff --git a/program/typing.py b/program/typing.py index 32e8412e..0375987e 100644 --- a/program/typing.py +++ b/program/typing.py @@ -1,4 +1,4 @@ -from typing import TypedDict +from typing import Literal, NotRequired, TypedDict class NestedTimeslot(TypedDict): @@ -38,3 +38,70 @@ class TimerangeEntry(TypedDict): schedule: NestedSchedule | None show: NestedShow timeslot: NestedTimeslot + + +class Thumbnail(TypedDict): + width: float + height: float + url: str + + +class RadioCBASettings(TypedDict): + api_key: NotRequired[str] + domains: list[str] + + +class ProgramFallback(TypedDict): + default_pool: str + show_id: int | None + + +class MicroProgram(TypedDict): + show_id: int | None + + +class RadioProgramSettings(TypedDict): + fallback: ProgramFallback + micro: MicroProgram + + +class PlayoutPools(TypedDict): + fallback: str | None + + +class RadioPlayoutSettings(TypedDict): + line_in_channels: dict[str, str] + pools: PlayoutPools + + +class Logo(TypedDict): + url: str + height: int + width: int + + +class RadioStationSettings(TypedDict): + name: str + logo: Logo | None + website: str + + +class ImageFrame(TypedDict): + aspect_ratio: tuple[int, int] | tuple[float, float] + shape: Literal["rect", "round"] + + +class ImageRequirements(TypedDict): + frame: ImageFrame + + +# done this way, because the keys have dots (".") +RadioImageRequirementsSettings = TypedDict( + "RadioImageRequirementsSettings", + { + "host.image": ImageRequirements, + "note.image": ImageRequirements, + "show.image": ImageRequirements, + "show.logo": ImageRequirements, + }, +) -- GitLab