spotify-apimatic-sdk 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. spotify_apimatic_sdk-1.0.0.dist-info/METADATA +150 -0
  2. spotify_apimatic_sdk-1.0.0.dist-info/RECORD +186 -0
  3. spotify_apimatic_sdk-1.0.0.dist-info/WHEEL +5 -0
  4. spotify_apimatic_sdk-1.0.0.dist-info/licenses/LICENSE +30 -0
  5. spotify_apimatic_sdk-1.0.0.dist-info/top_level.txt +1 -0
  6. spotifywebapi/__init__.py +12 -0
  7. spotifywebapi/api_helper.py +19 -0
  8. spotifywebapi/configuration.py +318 -0
  9. spotifywebapi/controllers/__init__.py +20 -0
  10. spotifywebapi/controllers/albums_controller.py +498 -0
  11. spotifywebapi/controllers/artists_controller.py +327 -0
  12. spotifywebapi/controllers/audiobooks_controller.py +441 -0
  13. spotifywebapi/controllers/base_controller.py +67 -0
  14. spotifywebapi/controllers/categories_controller.py +161 -0
  15. spotifywebapi/controllers/chapters_controller.py +157 -0
  16. spotifywebapi/controllers/episodes_controller.py +390 -0
  17. spotifywebapi/controllers/genres_controller.py +84 -0
  18. spotifywebapi/controllers/markets_controller.py +82 -0
  19. spotifywebapi/controllers/o_auth_authorization_controller.py +156 -0
  20. spotifywebapi/controllers/player_controller.py +807 -0
  21. spotifywebapi/controllers/playlists_controller.py +851 -0
  22. spotifywebapi/controllers/search_controller.py +123 -0
  23. spotifywebapi/controllers/shows_controller.py +439 -0
  24. spotifywebapi/controllers/tracks_controller.py +821 -0
  25. spotifywebapi/controllers/users_controller.py +649 -0
  26. spotifywebapi/exceptions/__init__.py +11 -0
  27. spotifywebapi/exceptions/api_exception.py +36 -0
  28. spotifywebapi/exceptions/bad_request_exception.py +56 -0
  29. spotifywebapi/exceptions/forbidden_exception.py +56 -0
  30. spotifywebapi/exceptions/not_found_exception.py +56 -0
  31. spotifywebapi/exceptions/o_auth_provider_exception.py +73 -0
  32. spotifywebapi/exceptions/too_many_requests_exception.py +56 -0
  33. spotifywebapi/exceptions/unauthorized_exception.py +56 -0
  34. spotifywebapi/http/__init__.py +11 -0
  35. spotifywebapi/http/api_response.py +67 -0
  36. spotifywebapi/http/auth/__init__.py +5 -0
  37. spotifywebapi/http/auth/o_auth_2.py +336 -0
  38. spotifywebapi/http/http_call_back.py +20 -0
  39. spotifywebapi/http/http_client_provider.py +23 -0
  40. spotifywebapi/http/http_method_enum.py +25 -0
  41. spotifywebapi/http/http_request.py +55 -0
  42. spotifywebapi/http/http_response.py +45 -0
  43. spotifywebapi/http/proxy_settings.py +50 -0
  44. spotifywebapi/models/__init__.py +142 -0
  45. spotifywebapi/models/album_base.py +264 -0
  46. spotifywebapi/models/album_group_enum.py +51 -0
  47. spotifywebapi/models/album_object.py +375 -0
  48. spotifywebapi/models/album_restriction_object.py +109 -0
  49. spotifywebapi/models/album_type_enum.py +62 -0
  50. spotifywebapi/models/artist_discography_album_object.py +298 -0
  51. spotifywebapi/models/artist_object.py +335 -0
  52. spotifywebapi/models/audio_analysis_object.py +266 -0
  53. spotifywebapi/models/audio_features_object.py +518 -0
  54. spotifywebapi/models/audiobook_base.py +353 -0
  55. spotifywebapi/models/audiobook_object.py +369 -0
  56. spotifywebapi/models/author_object.py +85 -0
  57. spotifywebapi/models/categories.py +162 -0
  58. spotifywebapi/models/category_object.py +117 -0
  59. spotifywebapi/models/chapter_base.py +392 -0
  60. spotifywebapi/models/chapter_object.py +408 -0
  61. spotifywebapi/models/chapter_restriction_object.py +113 -0
  62. spotifywebapi/models/context_object.py +181 -0
  63. spotifywebapi/models/copyright_object.py +130 -0
  64. spotifywebapi/models/currently_playing_context_object.py +314 -0
  65. spotifywebapi/models/currently_playing_object.py +241 -0
  66. spotifywebapi/models/cursor_object.py +108 -0
  67. spotifywebapi/models/cursor_paged_artists.py +75 -0
  68. spotifywebapi/models/cursor_paging_object.py +183 -0
  69. spotifywebapi/models/cursor_paging_play_history_object.py +214 -0
  70. spotifywebapi/models/cursor_paging_simplified_artist_object.py +213 -0
  71. spotifywebapi/models/device_object.py +278 -0
  72. spotifywebapi/models/disallows_object.py +314 -0
  73. spotifywebapi/models/episode_base.py +394 -0
  74. spotifywebapi/models/episode_object.py +665 -0
  75. spotifywebapi/models/episode_restriction_object.py +112 -0
  76. spotifywebapi/models/error_object.py +85 -0
  77. spotifywebapi/models/explicit_content_settings_object.py +110 -0
  78. spotifywebapi/models/external_id_object.py +156 -0
  79. spotifywebapi/models/external_url_object.py +107 -0
  80. spotifywebapi/models/followers_object.py +134 -0
  81. spotifywebapi/models/image_object.py +168 -0
  82. spotifywebapi/models/include_external_enum.py +45 -0
  83. spotifywebapi/models/item_type_1_enum.py +56 -0
  84. spotifywebapi/models/item_type_2_enum.py +45 -0
  85. spotifywebapi/models/item_type_3_enum.py +45 -0
  86. spotifywebapi/models/item_type_enum.py +58 -0
  87. spotifywebapi/models/linked_track_object.py +205 -0
  88. spotifywebapi/models/many_albums.py +76 -0
  89. spotifywebapi/models/many_artists.py +76 -0
  90. spotifywebapi/models/many_audio_features.py +77 -0
  91. spotifywebapi/models/many_audiobooks.py +77 -0
  92. spotifywebapi/models/many_chapters.py +77 -0
  93. spotifywebapi/models/many_devices.py +76 -0
  94. spotifywebapi/models/many_episodes.py +77 -0
  95. spotifywebapi/models/many_genres.py +69 -0
  96. spotifywebapi/models/many_simplified_shows.py +74 -0
  97. spotifywebapi/models/many_tracks.py +76 -0
  98. spotifywebapi/models/markets.py +85 -0
  99. spotifywebapi/models/me_albums_request.py +90 -0
  100. spotifywebapi/models/me_episodes_request.py +73 -0
  101. spotifywebapi/models/me_episodes_request_1.py +89 -0
  102. spotifywebapi/models/me_following_request.py +74 -0
  103. spotifywebapi/models/me_following_request_1.py +90 -0
  104. spotifywebapi/models/me_player_play_request.py +165 -0
  105. spotifywebapi/models/me_player_request.py +103 -0
  106. spotifywebapi/models/me_shows_request.py +89 -0
  107. spotifywebapi/models/me_tracks_request.py +74 -0
  108. spotifywebapi/models/me_tracks_request_1.py +90 -0
  109. spotifywebapi/models/meta.py +227 -0
  110. spotifywebapi/models/mode_enum.py +52 -0
  111. spotifywebapi/models/narrator_object.py +85 -0
  112. spotifywebapi/models/o_auth_provider_error_enum.py +67 -0
  113. spotifywebapi/models/o_auth_scope_enum.py +98 -0
  114. spotifywebapi/models/o_auth_token.py +113 -0
  115. spotifywebapi/models/paged_albums.py +75 -0
  116. spotifywebapi/models/paged_categories.py +74 -0
  117. spotifywebapi/models/paging_artist_discography_album_object.py +163 -0
  118. spotifywebapi/models/paging_artist_object.py +162 -0
  119. spotifywebapi/models/paging_featured_playlist_object.py +113 -0
  120. spotifywebapi/models/paging_object.py +142 -0
  121. spotifywebapi/models/paging_playlist_object.py +163 -0
  122. spotifywebapi/models/paging_playlist_track_object.py +163 -0
  123. spotifywebapi/models/paging_saved_album_object.py +163 -0
  124. spotifywebapi/models/paging_saved_audiobook_object.py +163 -0
  125. spotifywebapi/models/paging_saved_episode_object.py +163 -0
  126. spotifywebapi/models/paging_saved_show_object.py +163 -0
  127. spotifywebapi/models/paging_saved_track_object.py +163 -0
  128. spotifywebapi/models/paging_simplified_album_object.py +163 -0
  129. spotifywebapi/models/paging_simplified_audiobook_object.py +162 -0
  130. spotifywebapi/models/paging_simplified_chapter_object.py +162 -0
  131. spotifywebapi/models/paging_simplified_episode_object.py +162 -0
  132. spotifywebapi/models/paging_simplified_show_object.py +160 -0
  133. spotifywebapi/models/paging_simplified_track_object.py +163 -0
  134. spotifywebapi/models/paging_track_object.py +162 -0
  135. spotifywebapi/models/play_history_object.py +141 -0
  136. spotifywebapi/models/playlist_object.py +425 -0
  137. spotifywebapi/models/playlist_owner_object.py +238 -0
  138. spotifywebapi/models/playlist_snapshot_id.py +85 -0
  139. spotifywebapi/models/playlist_track_object.py +171 -0
  140. spotifywebapi/models/playlist_tracks_ref_object.py +109 -0
  141. spotifywebapi/models/playlist_user_object.py +231 -0
  142. spotifywebapi/models/playlists_followers_request.py +86 -0
  143. spotifywebapi/models/playlists_request.py +160 -0
  144. spotifywebapi/models/playlists_tracks_request.py +121 -0
  145. spotifywebapi/models/playlists_tracks_request_1.py +188 -0
  146. spotifywebapi/models/playlists_tracks_request_2.py +109 -0
  147. spotifywebapi/models/private_user_object.py +379 -0
  148. spotifywebapi/models/public_user_object.py +268 -0
  149. spotifywebapi/models/queue_object.py +118 -0
  150. spotifywebapi/models/reason_enum.py +65 -0
  151. spotifywebapi/models/recommendation_seed_object.py +208 -0
  152. spotifywebapi/models/recommendations_object.py +96 -0
  153. spotifywebapi/models/release_date_precision_enum.py +62 -0
  154. spotifywebapi/models/resume_point_object.py +131 -0
  155. spotifywebapi/models/saved_album_object.py +118 -0
  156. spotifywebapi/models/saved_audiobook_object.py +118 -0
  157. spotifywebapi/models/saved_episode_object.py +116 -0
  158. spotifywebapi/models/saved_show_object.py +116 -0
  159. spotifywebapi/models/saved_track_object.py +118 -0
  160. spotifywebapi/models/search_items.py +256 -0
  161. spotifywebapi/models/section_object.py +362 -0
  162. spotifywebapi/models/segment_object.py +307 -0
  163. spotifywebapi/models/show_base.py +550 -0
  164. spotifywebapi/models/show_object.py +319 -0
  165. spotifywebapi/models/simplified_album_object.py +468 -0
  166. spotifywebapi/models/simplified_artist_object.py +228 -0
  167. spotifywebapi/models/simplified_playlist_object.py +398 -0
  168. spotifywebapi/models/simplified_track_object.py +494 -0
  169. spotifywebapi/models/time_interval_object.py +132 -0
  170. spotifywebapi/models/track.py +697 -0
  171. spotifywebapi/models/track_1.py +85 -0
  172. spotifywebapi/models/track_object.py +605 -0
  173. spotifywebapi/models/track_restriction_object.py +112 -0
  174. spotifywebapi/models/type_2_enum.py +56 -0
  175. spotifywebapi/models/type_3_enum.py +56 -0
  176. spotifywebapi/models/type_4_enum.py +56 -0
  177. spotifywebapi/models/type_5_enum.py +56 -0
  178. spotifywebapi/models/type_6_enum.py +56 -0
  179. spotifywebapi/models/type_8_enum.py +42 -0
  180. spotifywebapi/models/type_9_enum.py +42 -0
  181. spotifywebapi/models/type_enum.py +56 -0
  182. spotifywebapi/models/users_playlists_request.py +154 -0
  183. spotifywebapi/spotifywebapi_client.py +198 -0
  184. spotifywebapi/utilities/__init__.py +6 -0
  185. spotifywebapi/utilities/file_wrapper.py +45 -0
  186. spotifywebapi/utilities/union_type_lookup.py +113 -0
@@ -0,0 +1,665 @@
1
+ """spotifywebapi.
2
+
3
+ This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
4
+ """
5
+
6
+ # ruff: noqa: E501
7
+ from spotifywebapi.api_helper import APIHelper
8
+ from spotifywebapi.models.episode_restriction_object import (
9
+ EpisodeRestrictionObject,
10
+ )
11
+ from spotifywebapi.models.external_url_object import (
12
+ ExternalUrlObject,
13
+ )
14
+ from spotifywebapi.models.image_object import (
15
+ ImageObject,
16
+ )
17
+ from spotifywebapi.models.release_date_precision_enum import (
18
+ ReleaseDatePrecisionEnum,
19
+ )
20
+ from spotifywebapi.models.resume_point_object import (
21
+ ResumePointObject,
22
+ )
23
+ from spotifywebapi.models.show_base import ShowBase
24
+ from spotifywebapi.models.type_5_enum import (
25
+ Type5Enum,
26
+ )
27
+
28
+
29
+ class EpisodeObject(object):
30
+ """Implementation of the 'EpisodeObject' model.
31
+
32
+ Attributes:
33
+ audio_preview_url (str): A URL to a 30 second preview (MP3 format) of the
34
+ episode. `null` if not available.
35
+ description (str): A description of the episode. HTML tags are stripped away
36
+ from this field, use `html_description` field in case HTML tags are
37
+ needed.
38
+ html_description (str): A description of the episode. This field may contain
39
+ HTML tags.
40
+ duration_ms (int): The episode length in milliseconds.
41
+ explicit (bool): Whether or not the episode has explicit content (true = yes
42
+ it does; false = no it does not OR unknown).
43
+ external_urls (ExternalUrlObject): External URLs for this episode.
44
+ href (str): A link to the Web API endpoint providing full details of the
45
+ episode.
46
+ id (str): The [Spotify ID](/documentation/web-api/concepts/spotify-uris-ids)
47
+ for the episode.
48
+ images (List[ImageObject]): The cover art for the episode in various sizes,
49
+ widest first.
50
+ is_externally_hosted (bool): True if the episode is hosted outside of
51
+ Spotify's CDN.
52
+ is_playable (bool): True if the episode is playable in the given market.
53
+ Otherwise false.
54
+ language (str): The language used in the episode, identified by a [ISO
55
+ 639](https://en.wikipedia.org/wiki/ISO_639) code. This field is
56
+ deprecated and might be removed in the future. Please use the `languages`
57
+ field instead.
58
+ languages (List[str]): A list of the languages used in the episode,
59
+ identified by their [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639)
60
+ code.
61
+ name (str): The name of the episode.
62
+ release_date (str): The date the episode was first released, for example
63
+ `"1981-12-15"`. Depending on the precision, it might be shown as `"1981"`
64
+ or `"1981-12"`.
65
+ release_date_precision (ReleaseDatePrecisionEnum): The precision with which
66
+ `release_date` value is known.
67
+ resume_point (ResumePointObject): The user's most recent position in the
68
+ episode. Set if the supplied access token is a user token and has the
69
+ scope 'user-read-playback-position'.
70
+ mtype (Type5Enum): The object type.
71
+ uri (str): The [Spotify
72
+ URI](/documentation/web-api/concepts/spotify-uris-ids) for the episode.
73
+ restrictions (EpisodeRestrictionObject): Included in the response when a
74
+ content restriction is applied.
75
+ show (ShowBase): The show on which the episode belongs.
76
+
77
+ """
78
+
79
+ # Create a mapping from Model property names to API property names
80
+ _names = {
81
+ "audio_preview_url": "audio_preview_url",
82
+ "description": "description",
83
+ "html_description": "html_description",
84
+ "duration_ms": "duration_ms",
85
+ "explicit": "explicit",
86
+ "external_urls": "external_urls",
87
+ "href": "href",
88
+ "id": "id",
89
+ "images": "images",
90
+ "is_externally_hosted": "is_externally_hosted",
91
+ "is_playable": "is_playable",
92
+ "languages": "languages",
93
+ "name": "name",
94
+ "release_date": "release_date",
95
+ "release_date_precision": "release_date_precision",
96
+ "mtype": "type",
97
+ "uri": "uri",
98
+ "show": "show",
99
+ "language": "language",
100
+ "resume_point": "resume_point",
101
+ "restrictions": "restrictions",
102
+ }
103
+
104
+ _optionals = [
105
+ "language",
106
+ "resume_point",
107
+ "restrictions",
108
+ ]
109
+
110
+ _nullables = [
111
+ "audio_preview_url",
112
+ ]
113
+
114
+ def __init__(
115
+ self,
116
+ audio_preview_url=None,
117
+ description=None,
118
+ html_description=None,
119
+ duration_ms=None,
120
+ explicit=None,
121
+ external_urls=None,
122
+ href=None,
123
+ id=None,
124
+ images=None,
125
+ is_externally_hosted=None,
126
+ is_playable=None,
127
+ languages=None,
128
+ name=None,
129
+ release_date=None,
130
+ release_date_precision=None,
131
+ mtype=None,
132
+ uri=None,
133
+ show=None,
134
+ language=APIHelper.SKIP,
135
+ resume_point=APIHelper.SKIP,
136
+ restrictions=APIHelper.SKIP):
137
+ """Initialize a EpisodeObject instance."""
138
+ # Initialize members of the class
139
+ self.audio_preview_url = audio_preview_url
140
+ self.description = description
141
+ self.html_description = html_description
142
+ self.duration_ms = duration_ms
143
+ self.explicit = explicit
144
+ self.external_urls = external_urls
145
+ self.href = href
146
+ self.id = id
147
+ self.images = images
148
+ self.is_externally_hosted = is_externally_hosted
149
+ self.is_playable = is_playable
150
+ if language is not APIHelper.SKIP:
151
+ self.language = language
152
+ self.languages = languages
153
+ self.name = name
154
+ self.release_date = release_date
155
+ self.release_date_precision = release_date_precision
156
+ if resume_point is not APIHelper.SKIP:
157
+ self.resume_point = resume_point
158
+ self.mtype = mtype
159
+ self.uri = uri
160
+ if restrictions is not APIHelper.SKIP:
161
+ self.restrictions = restrictions
162
+ self.show = show
163
+
164
+ @classmethod
165
+ def from_dictionary(cls,
166
+ dictionary):
167
+ """Create an instance of this model from a dictionary
168
+
169
+ Args:
170
+ dictionary (dictionary): A dictionary representation of the object
171
+ as obtained from the deserialization of the server's response. The
172
+ keys MUST match property names in the API description.
173
+
174
+ Returns:
175
+ object: An instance of this structure class.
176
+
177
+ """
178
+ if not isinstance(dictionary, dict) or dictionary is None:
179
+ return None
180
+
181
+ # Extract variables from the dictionary
182
+ audio_preview_url =\
183
+ dictionary.get("audio_preview_url")\
184
+ if dictionary.get("audio_preview_url")\
185
+ else None
186
+ description =\
187
+ dictionary.get("description")\
188
+ if dictionary.get("description")\
189
+ else None
190
+ html_description =\
191
+ dictionary.get("html_description")\
192
+ if dictionary.get("html_description")\
193
+ else None
194
+ duration_ms =\
195
+ dictionary.get("duration_ms")\
196
+ if dictionary.get("duration_ms")\
197
+ else None
198
+ explicit =\
199
+ dictionary.get("explicit")\
200
+ if "explicit" in dictionary.keys()\
201
+ else None
202
+ external_urls =\
203
+ ExternalUrlObject.from_dictionary(
204
+ dictionary.get("external_urls"))\
205
+ if dictionary.get("external_urls") else None
206
+ href =\
207
+ dictionary.get("href")\
208
+ if dictionary.get("href")\
209
+ else None
210
+ id =\
211
+ dictionary.get("id")\
212
+ if dictionary.get("id")\
213
+ else None
214
+ images = None
215
+ if dictionary.get("images") is not None:
216
+ images = [
217
+ ImageObject.from_dictionary(x)
218
+ for x in dictionary.get("images")
219
+ ]
220
+ is_externally_hosted =\
221
+ dictionary.get("is_externally_hosted")\
222
+ if "is_externally_hosted" in dictionary.keys()\
223
+ else None
224
+ is_playable =\
225
+ dictionary.get("is_playable")\
226
+ if "is_playable" in dictionary.keys()\
227
+ else None
228
+ languages =\
229
+ dictionary.get("languages")\
230
+ if dictionary.get("languages")\
231
+ else None
232
+ name =\
233
+ dictionary.get("name")\
234
+ if dictionary.get("name")\
235
+ else None
236
+ release_date =\
237
+ dictionary.get("release_date")\
238
+ if dictionary.get("release_date")\
239
+ else None
240
+ release_date_precision =\
241
+ dictionary.get("release_date_precision")\
242
+ if dictionary.get("release_date_precision")\
243
+ else None
244
+ mtype =\
245
+ dictionary.get("type")\
246
+ if dictionary.get("type")\
247
+ else None
248
+ uri =\
249
+ dictionary.get("uri")\
250
+ if dictionary.get("uri")\
251
+ else None
252
+ show =\
253
+ ShowBase.from_dictionary(
254
+ dictionary.get("show"))\
255
+ if dictionary.get("show") else None
256
+ language =\
257
+ dictionary.get("language")\
258
+ if dictionary.get("language")\
259
+ else APIHelper.SKIP
260
+ resume_point =\
261
+ ResumePointObject.from_dictionary(
262
+ dictionary.get("resume_point"))\
263
+ if "resume_point" in dictionary.keys()\
264
+ else APIHelper.SKIP
265
+ restrictions =\
266
+ EpisodeRestrictionObject.from_dictionary(
267
+ dictionary.get("restrictions"))\
268
+ if "restrictions" in dictionary.keys()\
269
+ else APIHelper.SKIP
270
+
271
+ # Return an object of this model
272
+ return cls(audio_preview_url,
273
+ description,
274
+ html_description,
275
+ duration_ms,
276
+ explicit,
277
+ external_urls,
278
+ href,
279
+ id,
280
+ images,
281
+ is_externally_hosted,
282
+ is_playable,
283
+ languages,
284
+ name,
285
+ release_date,
286
+ release_date_precision,
287
+ mtype,
288
+ uri,
289
+ show,
290
+ language,
291
+ resume_point,
292
+ restrictions)
293
+
294
+ @classmethod
295
+ def validate(cls, dictionary):
296
+ """Validate dictionary against class required properties
297
+
298
+ Args:
299
+ dictionary (dictionary): A dictionary representation of the object
300
+ as obtained from the deserialization of the server's response. The
301
+ keys MUST match property names in the API description.
302
+
303
+ Returns:
304
+ boolean : if dictionary is valid contains required properties.
305
+
306
+ """
307
+ if isinstance(dictionary, cls):
308
+ return APIHelper.is_valid_type(
309
+ value=dictionary.audio_preview_url,
310
+ type_callable=lambda value:
311
+ isinstance(
312
+ value,
313
+ str,
314
+ ),
315
+ is_value_nullable=True) \
316
+ and APIHelper.is_valid_type(
317
+ value=dictionary.description,
318
+ type_callable=lambda value:
319
+ isinstance(
320
+ value,
321
+ str,
322
+ )) \
323
+ and APIHelper.is_valid_type(
324
+ value=dictionary.html_description,
325
+ type_callable=lambda value:
326
+ isinstance(
327
+ value,
328
+ str,
329
+ )) \
330
+ and APIHelper.is_valid_type(
331
+ value=dictionary.duration_ms,
332
+ type_callable=lambda value:
333
+ isinstance(
334
+ value,
335
+ int,
336
+ )) \
337
+ and APIHelper.is_valid_type(
338
+ value=dictionary.explicit,
339
+ type_callable=lambda value:
340
+ isinstance(
341
+ value,
342
+ bool,
343
+ )) \
344
+ and APIHelper.is_valid_type(
345
+ value=dictionary.external_urls,
346
+ type_callable=lambda value:
347
+ ExternalUrlObject.validate(value),
348
+ is_model_dict=True) \
349
+ and APIHelper.is_valid_type(
350
+ value=dictionary.href,
351
+ type_callable=lambda value:
352
+ isinstance(
353
+ value,
354
+ str,
355
+ )) \
356
+ and APIHelper.is_valid_type(
357
+ value=dictionary.id,
358
+ type_callable=lambda value:
359
+ isinstance(
360
+ value,
361
+ str,
362
+ )) \
363
+ and APIHelper.is_valid_type(
364
+ value=dictionary.images,
365
+ type_callable=lambda value:
366
+ ImageObject.validate(value),
367
+ is_model_dict=True,
368
+ is_inner_model_dict=True) \
369
+ and APIHelper.is_valid_type(
370
+ value=dictionary.is_externally_hosted,
371
+ type_callable=lambda value:
372
+ isinstance(
373
+ value,
374
+ bool,
375
+ )) \
376
+ and APIHelper.is_valid_type(
377
+ value=dictionary.is_playable,
378
+ type_callable=lambda value:
379
+ isinstance(
380
+ value,
381
+ bool,
382
+ )) \
383
+ and APIHelper.is_valid_type(
384
+ value=dictionary.languages,
385
+ type_callable=lambda value:
386
+ isinstance(
387
+ value,
388
+ str,
389
+ )) \
390
+ and APIHelper.is_valid_type(
391
+ value=dictionary.name,
392
+ type_callable=lambda value:
393
+ isinstance(
394
+ value,
395
+ str,
396
+ )) \
397
+ and APIHelper.is_valid_type(
398
+ value=dictionary.release_date,
399
+ type_callable=lambda value:
400
+ isinstance(
401
+ value,
402
+ str,
403
+ )) \
404
+ and APIHelper.is_valid_type(
405
+ value=dictionary.release_date_precision,
406
+ type_callable=lambda value:
407
+ ReleaseDatePrecisionEnum.validate(value)) \
408
+ and APIHelper.is_valid_type(
409
+ value=dictionary.mtype,
410
+ type_callable=lambda value:
411
+ Type5Enum.validate(value)) \
412
+ and APIHelper.is_valid_type(
413
+ value=dictionary.uri,
414
+ type_callable=lambda value:
415
+ isinstance(
416
+ value,
417
+ str,
418
+ )) \
419
+ and APIHelper.is_valid_type(
420
+ value=dictionary.show,
421
+ type_callable=lambda value:
422
+ ShowBase.validate(value),
423
+ is_model_dict=True)
424
+
425
+ if not isinstance(dictionary, dict):
426
+ return False
427
+
428
+ return APIHelper.is_valid_type(
429
+ value=dictionary.get("audio_preview_url"),
430
+ type_callable=lambda value:
431
+ isinstance(
432
+ value,
433
+ str,
434
+ ),
435
+ is_value_nullable=True) \
436
+ and APIHelper.is_valid_type(
437
+ value=dictionary.get("description"),
438
+ type_callable=lambda value:
439
+ isinstance(
440
+ value,
441
+ str,
442
+ )) \
443
+ and APIHelper.is_valid_type(
444
+ value=dictionary.get("html_description"),
445
+ type_callable=lambda value:
446
+ isinstance(
447
+ value,
448
+ str,
449
+ )) \
450
+ and APIHelper.is_valid_type(
451
+ value=dictionary.get("duration_ms"),
452
+ type_callable=lambda value:
453
+ isinstance(
454
+ value,
455
+ int,
456
+ )) \
457
+ and APIHelper.is_valid_type(
458
+ value=dictionary.get("explicit"),
459
+ type_callable=lambda value:
460
+ isinstance(
461
+ value,
462
+ bool,
463
+ )) \
464
+ and APIHelper.is_valid_type(
465
+ value=dictionary.get("external_urls"),
466
+ type_callable=lambda value:
467
+ ExternalUrlObject.validate(value),
468
+ is_model_dict=True) \
469
+ and APIHelper.is_valid_type(
470
+ value=dictionary.get("href"),
471
+ type_callable=lambda value:
472
+ isinstance(
473
+ value,
474
+ str,
475
+ )) \
476
+ and APIHelper.is_valid_type(
477
+ value=dictionary.get("id"),
478
+ type_callable=lambda value:
479
+ isinstance(
480
+ value,
481
+ str,
482
+ )) \
483
+ and APIHelper.is_valid_type(
484
+ value=dictionary.get("images"),
485
+ type_callable=lambda value:
486
+ ImageObject.validate(value),
487
+ is_model_dict=True,
488
+ is_inner_model_dict=True) \
489
+ and APIHelper.is_valid_type(
490
+ value=dictionary.get("is_externally_hosted"),
491
+ type_callable=lambda value:
492
+ isinstance(
493
+ value,
494
+ bool,
495
+ )) \
496
+ and APIHelper.is_valid_type(
497
+ value=dictionary.get("is_playable"),
498
+ type_callable=lambda value:
499
+ isinstance(
500
+ value,
501
+ bool,
502
+ )) \
503
+ and APIHelper.is_valid_type(
504
+ value=dictionary.get("languages"),
505
+ type_callable=lambda value:
506
+ isinstance(
507
+ value,
508
+ str,
509
+ )) \
510
+ and APIHelper.is_valid_type(
511
+ value=dictionary.get("name"),
512
+ type_callable=lambda value:
513
+ isinstance(
514
+ value,
515
+ str,
516
+ )) \
517
+ and APIHelper.is_valid_type(
518
+ value=dictionary.get("release_date"),
519
+ type_callable=lambda value:
520
+ isinstance(
521
+ value,
522
+ str,
523
+ )) \
524
+ and APIHelper.is_valid_type(
525
+ value=dictionary.get("release_date_precision"),
526
+ type_callable=lambda value:
527
+ ReleaseDatePrecisionEnum.validate(value)) \
528
+ and APIHelper.is_valid_type(
529
+ value=dictionary.get("type"),
530
+ type_callable=lambda value:
531
+ Type5Enum.validate(value)) \
532
+ and APIHelper.is_valid_type(
533
+ value=dictionary.get("uri"),
534
+ type_callable=lambda value:
535
+ isinstance(
536
+ value,
537
+ str,
538
+ )) \
539
+ and APIHelper.is_valid_type(
540
+ value=dictionary.get("show"),
541
+ type_callable=lambda value:
542
+ ShowBase.validate(value),
543
+ is_model_dict=True)
544
+
545
+ def __repr__(self):
546
+ """Return a unambiguous string representation."""
547
+ _audio_preview_url=self.audio_preview_url
548
+ _description=self.description
549
+ _html_description=self.html_description
550
+ _duration_ms=self.duration_ms
551
+ _explicit=self.explicit
552
+ _external_urls=self.external_urls
553
+ _href=self.href
554
+ _id=self.id
555
+ _images=self.images
556
+ _is_externally_hosted=self.is_externally_hosted
557
+ _is_playable=self.is_playable
558
+ _language=(
559
+ self.language
560
+ if hasattr(self, "language")
561
+ else None
562
+ )
563
+ _languages=self.languages
564
+ _name=self.name
565
+ _release_date=self.release_date
566
+ _release_date_precision=self.release_date_precision
567
+ _resume_point=(
568
+ self.resume_point
569
+ if hasattr(self, "resume_point")
570
+ else None
571
+ )
572
+ _mtype=self.mtype
573
+ _uri=self.uri
574
+ _restrictions=(
575
+ self.restrictions
576
+ if hasattr(self, "restrictions")
577
+ else None
578
+ )
579
+ _show=self.show
580
+ return (
581
+ f"{self.__class__.__name__}("
582
+ f"audio_preview_url={_audio_preview_url!r}, "
583
+ f"description={_description!r}, "
584
+ f"html_description={_html_description!r}, "
585
+ f"duration_ms={_duration_ms!r}, "
586
+ f"explicit={_explicit!r}, "
587
+ f"external_urls={_external_urls!r}, "
588
+ f"href={_href!r}, "
589
+ f"id={_id!r}, "
590
+ f"images={_images!r}, "
591
+ f"is_externally_hosted={_is_externally_hosted!r}, "
592
+ f"is_playable={_is_playable!r}, "
593
+ f"language={_language!r}, "
594
+ f"languages={_languages!r}, "
595
+ f"name={_name!r}, "
596
+ f"release_date={_release_date!r}, "
597
+ f"release_date_precision={_release_date_precision!r}, "
598
+ f"resume_point={_resume_point!r}, "
599
+ f"mtype={_mtype!r}, "
600
+ f"uri={_uri!r}, "
601
+ f"restrictions={_restrictions!r}, "
602
+ f"show={_show!r}, "
603
+ f")"
604
+ )
605
+
606
+ def __str__(self):
607
+ """Return a human-readable string representation."""
608
+ _audio_preview_url=self.audio_preview_url
609
+ _description=self.description
610
+ _html_description=self.html_description
611
+ _duration_ms=self.duration_ms
612
+ _explicit=self.explicit
613
+ _external_urls=self.external_urls
614
+ _href=self.href
615
+ _id=self.id
616
+ _images=self.images
617
+ _is_externally_hosted=self.is_externally_hosted
618
+ _is_playable=self.is_playable
619
+ _language=(
620
+ self.language
621
+ if hasattr(self, "language")
622
+ else None
623
+ )
624
+ _languages=self.languages
625
+ _name=self.name
626
+ _release_date=self.release_date
627
+ _release_date_precision=self.release_date_precision
628
+ _resume_point=(
629
+ self.resume_point
630
+ if hasattr(self, "resume_point")
631
+ else None
632
+ )
633
+ _mtype=self.mtype
634
+ _uri=self.uri
635
+ _restrictions=(
636
+ self.restrictions
637
+ if hasattr(self, "restrictions")
638
+ else None
639
+ )
640
+ _show=self.show
641
+ return (
642
+ f"{self.__class__.__name__}("
643
+ f"audio_preview_url={_audio_preview_url!s}, "
644
+ f"description={_description!s}, "
645
+ f"html_description={_html_description!s}, "
646
+ f"duration_ms={_duration_ms!s}, "
647
+ f"explicit={_explicit!s}, "
648
+ f"external_urls={_external_urls!s}, "
649
+ f"href={_href!s}, "
650
+ f"id={_id!s}, "
651
+ f"images={_images!s}, "
652
+ f"is_externally_hosted={_is_externally_hosted!s}, "
653
+ f"is_playable={_is_playable!s}, "
654
+ f"language={_language!s}, "
655
+ f"languages={_languages!s}, "
656
+ f"name={_name!s}, "
657
+ f"release_date={_release_date!s}, "
658
+ f"release_date_precision={_release_date_precision!s}, "
659
+ f"resume_point={_resume_point!s}, "
660
+ f"mtype={_mtype!s}, "
661
+ f"uri={_uri!s}, "
662
+ f"restrictions={_restrictions!s}, "
663
+ f"show={_show!s}, "
664
+ f")"
665
+ )