1919from __future__ import annotations
2020
2121import copy
22+ from dataclasses import dataclass
2223from enum import Enum
23- from typing import TYPE_CHECKING , List , Optional , TypedDict , Union
24+ from typing import TYPE_CHECKING , List , Optional , Union
2425
2526from tidalapi .types import JsonObj
2627
@@ -45,14 +46,11 @@ class MixType(Enum):
4546 history_yearly = "HISTORY_YEARLY_MIX"
4647
4748
48- class ImageDetails (TypedDict ):
49- url : str
50-
51-
52- class ImageResponse (TypedDict ):
53- SMALL : ImageDetails
54- MEDIUM : ImageDetails
55- LARGE : ImageDetails
49+ @dataclass
50+ class ImageResponse :
51+ small : str
52+ medium : str
53+ large : str
5654
5755
5856class Mix :
@@ -111,7 +109,12 @@ def parse(self, json_obj: JsonObj) -> "Mix":
111109 self .mix_type = MixType (json_obj ["mixType" ])
112110 self .content_behaviour = json_obj ["contentBehavior" ]
113111 self .short_subtitle = json_obj ["shortSubtitle" ]
114- self .images = json_obj ["images" ]
112+ images = json_obj ["images" ]
113+ self .images = ImageResponse (
114+ small = images ["SMALL" ]["url" ],
115+ mediumimages ["MEDIUM" ]["url" ],
116+ large = images ["LARGE" ]["url" ],
117+ )
115118
116119 return copy .copy (self )
117120
@@ -140,10 +143,10 @@ def image(self, dimensions: int) -> str:
140143 raise ValueError ("No images present." )
141144
142145 if dimensions == 320 :
143- return self .images [ "SMALL" ][ "url" ]
146+ return self .images . small
144147 elif dimensions == 640 :
145- return self .images [ "MEDIUM" ][ "url" ]
148+ return self .images . medium
146149 elif dimensions == 1500 :
147- return self .images [ "LARGE" ][ "url" ]
150+ return self .images . large
148151
149152 raise ValueError (f"Invalid resolution { dimensions } x { dimensions } " )
0 commit comments