Skip to content

Commit 5bec3aa

Browse files
authored
Fix generic type in album tracks (#328)
* Fix generic type in album tracks * Fix generic type in album tracks
1 parent bcb454a commit 5bec3aa

File tree

2 files changed

+610
-29109
lines changed

2 files changed

+610
-29109
lines changed

src/spotifyaio/models.py

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
from dataclasses import dataclass, field
66
from datetime import datetime # noqa: TCH003
77
from enum import StrEnum
8-
from typing import Annotated, Any, cast
8+
from typing import Annotated, Any
99

1010
from mashumaro import field_options
1111
from mashumaro.mixins.orjson import DataClassORJSONMixin
12-
from mashumaro.types import Discriminator, SerializationStrategy
12+
from mashumaro.types import Discriminator # noqa: TCH002
1313

1414

1515
class DeviceType(StrEnum):
@@ -104,18 +104,6 @@ class SimplifiedArtist(DataClassORJSONMixin):
104104
uri: str
105105

106106

107-
class ItemsSerializationStrategy(SerializationStrategy):
108-
"""Serialization strategy for objects encapsulated in items."""
109-
110-
def serialize(self, value: list[Any]) -> list[Any]:
111-
"""Serialize optional string."""
112-
return value
113-
114-
def deserialize(self, value: dict[str, Any]) -> list[Any]:
115-
"""Deserialize optional string."""
116-
return cast(list[Any], value.get("items", []))
117-
118-
119107
@dataclass
120108
class SimplifiedAlbum(DataClassORJSONMixin):
121109
"""Album model."""
@@ -143,9 +131,13 @@ def __pre_deserialize__(cls, d: dict[str, Any]) -> dict[str, Any]:
143131
class Album(SimplifiedAlbum):
144132
"""Album model."""
145133

146-
tracks: list[SimplifiedTrack] = field(
147-
metadata=field_options(serialization_strategy=ItemsSerializationStrategy())
148-
)
134+
tracks: list[SimplifiedTrack]
135+
136+
@classmethod
137+
def __pre_deserialize__(cls, d: dict[str, Any]) -> dict[str, Any]:
138+
"""Pre deserialize hook."""
139+
tracks = d.get("tracks", {}).pop("items", [])
140+
return {**d, "tracks": tracks}
149141

150142

151143
@dataclass
@@ -520,6 +512,10 @@ class Episode(SimplifiedEpisode, Item):
520512
class Show(SimplifiedShow):
521513
"""Show model."""
522514

523-
episodes: list[SimplifiedEpisode] = field(
524-
metadata=field_options(serialization_strategy=ItemsSerializationStrategy())
525-
)
515+
episodes: list[SimplifiedEpisode]
516+
517+
@classmethod
518+
def __pre_deserialize__(cls, d: dict[str, Any]) -> dict[str, Any]:
519+
"""Pre deserialize hook."""
520+
episodes = d.get("episodes", {}).pop("items", [])
521+
return {**d, "episodes": episodes}

0 commit comments

Comments
 (0)