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,353 @@
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.author_object import (
9
+ AuthorObject,
10
+ )
11
+ from spotifywebapi.models.copyright_object import (
12
+ CopyrightObject,
13
+ )
14
+ from spotifywebapi.models.external_url_object import (
15
+ ExternalUrlObject,
16
+ )
17
+ from spotifywebapi.models.image_object import (
18
+ ImageObject,
19
+ )
20
+ from spotifywebapi.models.narrator_object import (
21
+ NarratorObject,
22
+ )
23
+
24
+
25
+ class AudiobookBase(object):
26
+ """Implementation of the 'AudiobookBase' model.
27
+
28
+ Attributes:
29
+ authors (List[AuthorObject]): The author(s) for the audiobook.
30
+ available_markets (List[str]): A list of the countries in which the audiobook
31
+ can be played, identified by their [ISO 3166-1
32
+ alpha-2](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) code.
33
+ copyrights (List[CopyrightObject]): The copyright statements of the audiobook.
34
+ description (str): A description of the audiobook. HTML tags are stripped
35
+ away from this field, use `html_description` field in case HTML tags are
36
+ needed.
37
+ html_description (str): A description of the audiobook. This field may
38
+ contain HTML tags.
39
+ edition (str): The edition of the audiobook.
40
+ explicit (bool): Whether or not the audiobook has explicit content (true =
41
+ yes it does; false = no it does not OR unknown).
42
+ external_urls (ExternalUrlObject): External URLs for this audiobook.
43
+ href (str): A link to the Web API endpoint providing full details of the
44
+ audiobook.
45
+ id (str): The [Spotify ID](/documentation/web-api/concepts/spotify-uris-ids)
46
+ for the audiobook.
47
+ images (List[ImageObject]): The cover art for the audiobook in various sizes,
48
+ widest first.
49
+ languages (List[str]): A list of the languages used in the audiobook,
50
+ identified by their [ISO 639](https://en.wikipedia.org/wiki/ISO_639) code.
51
+ media_type (str): The media type of the audiobook.
52
+ name (str): The name of the audiobook.
53
+ narrators (List[NarratorObject]): The narrator(s) for the audiobook.
54
+ publisher (str): The publisher of the audiobook.
55
+ mtype (Type9Enum): The object type.
56
+ uri (str): The [Spotify
57
+ URI](/documentation/web-api/concepts/spotify-uris-ids) for the audiobook.
58
+ total_chapters (int): The number of chapters in this audiobook.
59
+
60
+ """
61
+
62
+ # Create a mapping from Model property names to API property names
63
+ _names = {
64
+ "authors": "authors",
65
+ "available_markets": "available_markets",
66
+ "copyrights": "copyrights",
67
+ "description": "description",
68
+ "html_description": "html_description",
69
+ "explicit": "explicit",
70
+ "external_urls": "external_urls",
71
+ "href": "href",
72
+ "id": "id",
73
+ "images": "images",
74
+ "languages": "languages",
75
+ "media_type": "media_type",
76
+ "name": "name",
77
+ "narrators": "narrators",
78
+ "publisher": "publisher",
79
+ "mtype": "type",
80
+ "uri": "uri",
81
+ "total_chapters": "total_chapters",
82
+ "edition": "edition",
83
+ }
84
+
85
+ _optionals = [
86
+ "edition",
87
+ ]
88
+
89
+ def __init__(
90
+ self,
91
+ authors=None,
92
+ available_markets=None,
93
+ copyrights=None,
94
+ description=None,
95
+ html_description=None,
96
+ explicit=None,
97
+ external_urls=None,
98
+ href=None,
99
+ id=None,
100
+ images=None,
101
+ languages=None,
102
+ media_type=None,
103
+ name=None,
104
+ narrators=None,
105
+ publisher=None,
106
+ mtype=None,
107
+ uri=None,
108
+ total_chapters=None,
109
+ edition=APIHelper.SKIP):
110
+ """Initialize a AudiobookBase instance."""
111
+ # Initialize members of the class
112
+ self.authors = authors
113
+ self.available_markets = available_markets
114
+ self.copyrights = copyrights
115
+ self.description = description
116
+ self.html_description = html_description
117
+ if edition is not APIHelper.SKIP:
118
+ self.edition = edition
119
+ self.explicit = explicit
120
+ self.external_urls = external_urls
121
+ self.href = href
122
+ self.id = id
123
+ self.images = images
124
+ self.languages = languages
125
+ self.media_type = media_type
126
+ self.name = name
127
+ self.narrators = narrators
128
+ self.publisher = publisher
129
+ self.mtype = mtype
130
+ self.uri = uri
131
+ self.total_chapters = total_chapters
132
+
133
+ @classmethod
134
+ def from_dictionary(cls,
135
+ dictionary):
136
+ """Create an instance of this model from a dictionary
137
+
138
+ Args:
139
+ dictionary (dictionary): A dictionary representation of the object
140
+ as obtained from the deserialization of the server's response. The
141
+ keys MUST match property names in the API description.
142
+
143
+ Returns:
144
+ object: An instance of this structure class.
145
+
146
+ """
147
+ if not isinstance(dictionary, dict) or dictionary is None:
148
+ return None
149
+
150
+ # Extract variables from the dictionary
151
+ authors = None
152
+ if dictionary.get("authors") is not None:
153
+ authors = [
154
+ AuthorObject.from_dictionary(x)
155
+ for x in dictionary.get("authors")
156
+ ]
157
+ available_markets =\
158
+ dictionary.get("available_markets")\
159
+ if dictionary.get("available_markets")\
160
+ else None
161
+ copyrights = None
162
+ if dictionary.get("copyrights") is not None:
163
+ copyrights = [
164
+ CopyrightObject.from_dictionary(x)
165
+ for x in dictionary.get("copyrights")
166
+ ]
167
+ description =\
168
+ dictionary.get("description")\
169
+ if dictionary.get("description")\
170
+ else None
171
+ html_description =\
172
+ dictionary.get("html_description")\
173
+ if dictionary.get("html_description")\
174
+ else None
175
+ explicit =\
176
+ dictionary.get("explicit")\
177
+ if "explicit" in dictionary.keys()\
178
+ else None
179
+ external_urls =\
180
+ ExternalUrlObject.from_dictionary(
181
+ dictionary.get("external_urls"))\
182
+ if dictionary.get("external_urls") else None
183
+ href =\
184
+ dictionary.get("href")\
185
+ if dictionary.get("href")\
186
+ else None
187
+ id =\
188
+ dictionary.get("id")\
189
+ if dictionary.get("id")\
190
+ else None
191
+ images = None
192
+ if dictionary.get("images") is not None:
193
+ images = [
194
+ ImageObject.from_dictionary(x)
195
+ for x in dictionary.get("images")
196
+ ]
197
+ languages =\
198
+ dictionary.get("languages")\
199
+ if dictionary.get("languages")\
200
+ else None
201
+ media_type =\
202
+ dictionary.get("media_type")\
203
+ if dictionary.get("media_type")\
204
+ else None
205
+ name =\
206
+ dictionary.get("name")\
207
+ if dictionary.get("name")\
208
+ else None
209
+ narrators = None
210
+ if dictionary.get("narrators") is not None:
211
+ narrators = [
212
+ NarratorObject.from_dictionary(x)
213
+ for x in dictionary.get("narrators")
214
+ ]
215
+ publisher =\
216
+ dictionary.get("publisher")\
217
+ if dictionary.get("publisher")\
218
+ else None
219
+ mtype =\
220
+ dictionary.get("type")\
221
+ if dictionary.get("type")\
222
+ else None
223
+ uri =\
224
+ dictionary.get("uri")\
225
+ if dictionary.get("uri")\
226
+ else None
227
+ total_chapters =\
228
+ dictionary.get("total_chapters")\
229
+ if dictionary.get("total_chapters")\
230
+ else None
231
+ edition =\
232
+ dictionary.get("edition")\
233
+ if dictionary.get("edition")\
234
+ else APIHelper.SKIP
235
+
236
+ # Return an object of this model
237
+ return cls(authors,
238
+ available_markets,
239
+ copyrights,
240
+ description,
241
+ html_description,
242
+ explicit,
243
+ external_urls,
244
+ href,
245
+ id,
246
+ images,
247
+ languages,
248
+ media_type,
249
+ name,
250
+ narrators,
251
+ publisher,
252
+ mtype,
253
+ uri,
254
+ total_chapters,
255
+ edition)
256
+
257
+ def __repr__(self):
258
+ """Return a unambiguous string representation."""
259
+ _authors=self.authors
260
+ _available_markets=self.available_markets
261
+ _copyrights=self.copyrights
262
+ _description=self.description
263
+ _html_description=self.html_description
264
+ _edition=(
265
+ self.edition
266
+ if hasattr(self, "edition")
267
+ else None
268
+ )
269
+ _explicit=self.explicit
270
+ _external_urls=self.external_urls
271
+ _href=self.href
272
+ _id=self.id
273
+ _images=self.images
274
+ _languages=self.languages
275
+ _media_type=self.media_type
276
+ _name=self.name
277
+ _narrators=self.narrators
278
+ _publisher=self.publisher
279
+ _mtype=self.mtype
280
+ _uri=self.uri
281
+ _total_chapters=self.total_chapters
282
+ return (
283
+ f"{self.__class__.__name__}("
284
+ f"authors={_authors!r}, "
285
+ f"available_markets={_available_markets!r}, "
286
+ f"copyrights={_copyrights!r}, "
287
+ f"description={_description!r}, "
288
+ f"html_description={_html_description!r}, "
289
+ f"edition={_edition!r}, "
290
+ f"explicit={_explicit!r}, "
291
+ f"external_urls={_external_urls!r}, "
292
+ f"href={_href!r}, "
293
+ f"id={_id!r}, "
294
+ f"images={_images!r}, "
295
+ f"languages={_languages!r}, "
296
+ f"media_type={_media_type!r}, "
297
+ f"name={_name!r}, "
298
+ f"narrators={_narrators!r}, "
299
+ f"publisher={_publisher!r}, "
300
+ f"mtype={_mtype!r}, "
301
+ f"uri={_uri!r}, "
302
+ f"total_chapters={_total_chapters!r}, "
303
+ f")"
304
+ )
305
+
306
+ def __str__(self):
307
+ """Return a human-readable string representation."""
308
+ _authors=self.authors
309
+ _available_markets=self.available_markets
310
+ _copyrights=self.copyrights
311
+ _description=self.description
312
+ _html_description=self.html_description
313
+ _edition=(
314
+ self.edition
315
+ if hasattr(self, "edition")
316
+ else None
317
+ )
318
+ _explicit=self.explicit
319
+ _external_urls=self.external_urls
320
+ _href=self.href
321
+ _id=self.id
322
+ _images=self.images
323
+ _languages=self.languages
324
+ _media_type=self.media_type
325
+ _name=self.name
326
+ _narrators=self.narrators
327
+ _publisher=self.publisher
328
+ _mtype=self.mtype
329
+ _uri=self.uri
330
+ _total_chapters=self.total_chapters
331
+ return (
332
+ f"{self.__class__.__name__}("
333
+ f"authors={_authors!s}, "
334
+ f"available_markets={_available_markets!s}, "
335
+ f"copyrights={_copyrights!s}, "
336
+ f"description={_description!s}, "
337
+ f"html_description={_html_description!s}, "
338
+ f"edition={_edition!s}, "
339
+ f"explicit={_explicit!s}, "
340
+ f"external_urls={_external_urls!s}, "
341
+ f"href={_href!s}, "
342
+ f"id={_id!s}, "
343
+ f"images={_images!s}, "
344
+ f"languages={_languages!s}, "
345
+ f"media_type={_media_type!s}, "
346
+ f"name={_name!s}, "
347
+ f"narrators={_narrators!s}, "
348
+ f"publisher={_publisher!s}, "
349
+ f"mtype={_mtype!s}, "
350
+ f"uri={_uri!s}, "
351
+ f"total_chapters={_total_chapters!s}, "
352
+ f")"
353
+ )