|
5 | 5 | from dataclasses import dataclass, field |
6 | 6 | from datetime import datetime # noqa: TCH003 |
7 | 7 | from enum import StrEnum |
8 | | -from typing import Annotated, Any, cast |
| 8 | +from typing import Annotated, Any |
9 | 9 |
|
10 | 10 | from mashumaro import field_options |
11 | 11 | from mashumaro.mixins.orjson import DataClassORJSONMixin |
12 | | -from mashumaro.types import Discriminator, SerializationStrategy |
| 12 | +from mashumaro.types import Discriminator # noqa: TCH002 |
13 | 13 |
|
14 | 14 |
|
15 | 15 | class DeviceType(StrEnum): |
@@ -104,18 +104,6 @@ class SimplifiedArtist(DataClassORJSONMixin): |
104 | 104 | uri: str |
105 | 105 |
|
106 | 106 |
|
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 | | - |
119 | 107 | @dataclass |
120 | 108 | class SimplifiedAlbum(DataClassORJSONMixin): |
121 | 109 | """Album model.""" |
@@ -143,9 +131,13 @@ def __pre_deserialize__(cls, d: dict[str, Any]) -> dict[str, Any]: |
143 | 131 | class Album(SimplifiedAlbum): |
144 | 132 | """Album model.""" |
145 | 133 |
|
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} |
149 | 141 |
|
150 | 142 |
|
151 | 143 | @dataclass |
@@ -520,6 +512,10 @@ class Episode(SimplifiedEpisode, Item): |
520 | 512 | class Show(SimplifiedShow): |
521 | 513 | """Show model.""" |
522 | 514 |
|
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