nadeshiko-sdk 0.1.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 (167) hide show
  1. nadeshiko/__init__.py +10 -0
  2. nadeshiko/_version.py +1 -0
  3. nadeshiko/api/__init__.py +1 -0
  4. nadeshiko/api/auth/__init__.py +3 -0
  5. nadeshiko/api/auth/internal/__init__.py +11 -0
  6. nadeshiko/api/auth/internal/get_discord_auth_url.py +176 -0
  7. nadeshiko/api/auth/internal/login.py +213 -0
  8. nadeshiko/api/auth/internal/login_discord.py +204 -0
  9. nadeshiko/api/auth/internal/login_google.py +204 -0
  10. nadeshiko/api/auth/internal/register.py +212 -0
  11. nadeshiko/api/auth_jwt/__init__.py +3 -0
  12. nadeshiko/api/auth_jwt/internal/__init__.py +7 -0
  13. nadeshiko/api/auth_jwt/internal/logout.py +151 -0
  14. nadeshiko/api/lists/__init__.py +8 -0
  15. nadeshiko/api/lists/internal/__init__.py +12 -0
  16. nadeshiko/api/lists/internal/list_add_item.py +215 -0
  17. nadeshiko/api/lists/internal/list_create.py +194 -0
  18. nadeshiko/api/lists/internal/list_destroy.py +193 -0
  19. nadeshiko/api/lists/internal/list_remove_item.py +207 -0
  20. nadeshiko/api/lists/internal/list_update.py +215 -0
  21. nadeshiko/api/lists/internal/list_update_item.py +229 -0
  22. nadeshiko/api/lists/list_index.py +257 -0
  23. nadeshiko/api/lists/list_show.py +193 -0
  24. nadeshiko/api/media/__init__.py +14 -0
  25. nadeshiko/api/media/character_show.py +193 -0
  26. nadeshiko/api/media/episode_index.py +229 -0
  27. nadeshiko/api/media/episode_show.py +207 -0
  28. nadeshiko/api/media/internal/__init__.py +16 -0
  29. nadeshiko/api/media/internal/episode_create.py +215 -0
  30. nadeshiko/api/media/internal/episode_destroy.py +205 -0
  31. nadeshiko/api/media/internal/episode_update.py +229 -0
  32. nadeshiko/api/media/internal/media_create.py +194 -0
  33. nadeshiko/api/media/internal/media_destroy.py +197 -0
  34. nadeshiko/api/media/internal/media_update.py +219 -0
  35. nadeshiko/api/media/internal/segment_create.py +229 -0
  36. nadeshiko/api/media/internal/segment_destroy.py +219 -0
  37. nadeshiko/api/media/internal/segment_index.py +243 -0
  38. nadeshiko/api/media/internal/segment_update.py +243 -0
  39. nadeshiko/api/media/media_index.py +232 -0
  40. nadeshiko/api/media/media_show.py +193 -0
  41. nadeshiko/api/media/segment_show.py +221 -0
  42. nadeshiko/api/media/segment_show_by_uuid.py +193 -0
  43. nadeshiko/api/media/seiyuu_show.py +193 -0
  44. nadeshiko/api/search/__init__.py +11 -0
  45. nadeshiko/api/search/fetch_media_info.py +278 -0
  46. nadeshiko/api/search/fetch_sentence_context.py +219 -0
  47. nadeshiko/api/search/internal/__init__.py +6 -0
  48. nadeshiko/api/search/search.py +295 -0
  49. nadeshiko/api/search/search_health_check.py +168 -0
  50. nadeshiko/api/search/search_multiple.py +238 -0
  51. nadeshiko/api/user/__init__.py +3 -0
  52. nadeshiko/api/user/internal/__init__.py +11 -0
  53. nadeshiko/api/user/internal/create_api_key.py +199 -0
  54. nadeshiko/api/user/internal/deactivate_api_key.py +194 -0
  55. nadeshiko/api/user/internal/get_api_keys.py +151 -0
  56. nadeshiko/api/user/internal/get_identity_me.py +156 -0
  57. nadeshiko/api/user/internal/get_user_info.py +156 -0
  58. nadeshiko/client.py +138 -0
  59. nadeshiko/errors.py +16 -0
  60. nadeshiko/models/__init__.py +215 -0
  61. nadeshiko/models/api_key.py +118 -0
  62. nadeshiko/models/api_key_permission.py +70 -0
  63. nadeshiko/models/auth_user.py +107 -0
  64. nadeshiko/models/basic_info.py +132 -0
  65. nadeshiko/models/category_statistic.py +71 -0
  66. nadeshiko/models/character.py +100 -0
  67. nadeshiko/models/character_input.py +130 -0
  68. nadeshiko/models/character_input_character_role.py +10 -0
  69. nadeshiko/models/character_with_media.py +124 -0
  70. nadeshiko/models/character_with_media_media_appearances_item.py +93 -0
  71. nadeshiko/models/character_with_media_media_appearances_item_role.py +10 -0
  72. nadeshiko/models/create_api_key_request.py +75 -0
  73. nadeshiko/models/create_api_key_response.py +70 -0
  74. nadeshiko/models/deactivate_api_key_request.py +62 -0
  75. nadeshiko/models/deactivate_api_key_response.py +62 -0
  76. nadeshiko/models/discord_auth_url_response.py +62 -0
  77. nadeshiko/models/discord_login_request.py +62 -0
  78. nadeshiko/models/episode.py +253 -0
  79. nadeshiko/models/episode_create_request.py +145 -0
  80. nadeshiko/models/episode_list_response.py +94 -0
  81. nadeshiko/models/episode_update_request.py +135 -0
  82. nadeshiko/models/error.py +128 -0
  83. nadeshiko/models/error_errors.py +46 -0
  84. nadeshiko/models/fetch_media_info_response.py +115 -0
  85. nadeshiko/models/fetch_media_info_type.py +10 -0
  86. nadeshiko/models/fetch_sentence_context_request.py +96 -0
  87. nadeshiko/models/fetch_sentence_context_response.py +75 -0
  88. nadeshiko/models/get_api_keys_response.py +86 -0
  89. nadeshiko/models/google_login_request.py +62 -0
  90. nadeshiko/models/list_.py +97 -0
  91. nadeshiko/models/list_add_item_body.py +69 -0
  92. nadeshiko/models/list_add_item_response_201.py +61 -0
  93. nadeshiko/models/list_create_request.py +107 -0
  94. nadeshiko/models/list_create_request_type.py +9 -0
  95. nadeshiko/models/list_create_request_visibility.py +9 -0
  96. nadeshiko/models/list_destroy_response_200.py +70 -0
  97. nadeshiko/models/list_index_type.py +9 -0
  98. nadeshiko/models/list_index_visibility.py +9 -0
  99. nadeshiko/models/list_input.py +138 -0
  100. nadeshiko/models/list_input_list_type.py +9 -0
  101. nadeshiko/models/list_input_list_visibility.py +9 -0
  102. nadeshiko/models/list_remove_item_response_200.py +61 -0
  103. nadeshiko/models/list_type.py +9 -0
  104. nadeshiko/models/list_update_body.py +78 -0
  105. nadeshiko/models/list_update_body_visibility.py +9 -0
  106. nadeshiko/models/list_update_item_body.py +61 -0
  107. nadeshiko/models/list_update_item_response_200.py +61 -0
  108. nadeshiko/models/list_visibility.py +9 -0
  109. nadeshiko/models/list_with_media.py +119 -0
  110. nadeshiko/models/list_with_media_media_item.py +83 -0
  111. nadeshiko/models/list_with_media_type.py +9 -0
  112. nadeshiko/models/list_with_media_visibility.py +9 -0
  113. nadeshiko/models/login_request.py +70 -0
  114. nadeshiko/models/login_response.py +84 -0
  115. nadeshiko/models/logout_response.py +73 -0
  116. nadeshiko/models/media.py +288 -0
  117. nadeshiko/models/media_category.py +11 -0
  118. nadeshiko/models/media_character.py +78 -0
  119. nadeshiko/models/media_character_role.py +10 -0
  120. nadeshiko/models/media_create_request.py +270 -0
  121. nadeshiko/models/media_create_request_category.py +11 -0
  122. nadeshiko/models/media_destroy_response_200.py +70 -0
  123. nadeshiko/models/media_index_category.py +9 -0
  124. nadeshiko/models/media_info_data.py +307 -0
  125. nadeshiko/models/media_info_path.py +83 -0
  126. nadeshiko/models/media_info_stats.py +89 -0
  127. nadeshiko/models/media_list_response.py +94 -0
  128. nadeshiko/models/media_update_request.py +297 -0
  129. nadeshiko/models/media_update_request_category.py +9 -0
  130. nadeshiko/models/quota_info.py +87 -0
  131. nadeshiko/models/quota_info_quota_limit_type_1.py +8 -0
  132. nadeshiko/models/register_request.py +78 -0
  133. nadeshiko/models/register_response.py +76 -0
  134. nadeshiko/models/register_response_user.py +46 -0
  135. nadeshiko/models/search_health_check_response.py +138 -0
  136. nadeshiko/models/search_multiple_request.py +72 -0
  137. nadeshiko/models/search_multiple_response.py +79 -0
  138. nadeshiko/models/search_request.py +253 -0
  139. nadeshiko/models/search_request_content_sort.py +13 -0
  140. nadeshiko/models/search_request_media_item.py +85 -0
  141. nadeshiko/models/search_request_media_item_seasons_item.py +69 -0
  142. nadeshiko/models/search_response.py +158 -0
  143. nadeshiko/models/segment.py +303 -0
  144. nadeshiko/models/segment_create_request.py +203 -0
  145. nadeshiko/models/segment_create_request_status.py +13 -0
  146. nadeshiko/models/segment_info.py +207 -0
  147. nadeshiko/models/segment_list_response.py +94 -0
  148. nadeshiko/models/segment_status.py +13 -0
  149. nadeshiko/models/segment_update_request.py +198 -0
  150. nadeshiko/models/segment_update_request_status.py +13 -0
  151. nadeshiko/models/seiyuu.py +86 -0
  152. nadeshiko/models/seiyuu_with_roles.py +108 -0
  153. nadeshiko/models/seiyuu_with_roles_roles_item.py +109 -0
  154. nadeshiko/models/seiyuu_with_roles_roles_item_role.py +10 -0
  155. nadeshiko/models/sentence.py +88 -0
  156. nadeshiko/models/statistic.py +132 -0
  157. nadeshiko/models/statistic_season_with_episode_hits.py +74 -0
  158. nadeshiko/models/statistic_season_with_episode_hits_additional_property.py +46 -0
  159. nadeshiko/models/user_info_response.py +79 -0
  160. nadeshiko/models/user_info_response_user.py +91 -0
  161. nadeshiko/models/user_role.py +71 -0
  162. nadeshiko/models/word_match.py +107 -0
  163. nadeshiko/models/word_match_media.py +98 -0
  164. nadeshiko/types.py +54 -0
  165. nadeshiko_sdk-0.1.0.dist-info/METADATA +147 -0
  166. nadeshiko_sdk-0.1.0.dist-info/RECORD +167 -0
  167. nadeshiko_sdk-0.1.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,232 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.error import Error
9
+ from ...models.media_index_category import MediaIndexCategory
10
+ from ...models.media_list_response import MediaListResponse
11
+ from ...types import UNSET, Response, Unset
12
+
13
+
14
+ def _get_kwargs(
15
+ *,
16
+ limit: int | Unset = 20,
17
+ cursor: int | Unset = 0,
18
+ category: MediaIndexCategory | Unset = UNSET,
19
+ ) -> dict[str, Any]:
20
+ params: dict[str, Any] = {}
21
+
22
+ params["limit"] = limit
23
+
24
+ params["cursor"] = cursor
25
+
26
+ json_category: str | Unset = UNSET
27
+ if not isinstance(category, Unset):
28
+ json_category = category.value
29
+
30
+ params["category"] = json_category
31
+
32
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
33
+
34
+ _kwargs: dict[str, Any] = {
35
+ "method": "get",
36
+ "url": "/v1/media",
37
+ "params": params,
38
+ }
39
+
40
+ return _kwargs
41
+
42
+
43
+ def _parse_response(
44
+ *, client: AuthenticatedClient | Client, response: httpx.Response
45
+ ) -> Error | MediaListResponse | None:
46
+ if response.status_code == 200:
47
+ response_200 = MediaListResponse.from_dict(response.json())
48
+
49
+ return response_200
50
+
51
+ if response.status_code == 400:
52
+ response_400 = Error.from_dict(response.json())
53
+
54
+ return response_400
55
+
56
+ if response.status_code == 401:
57
+ response_401 = Error.from_dict(response.json())
58
+
59
+ return response_401
60
+
61
+ if response.status_code == 403:
62
+ response_403 = Error.from_dict(response.json())
63
+
64
+ return response_403
65
+
66
+ if response.status_code == 429:
67
+ response_429 = Error.from_dict(response.json())
68
+
69
+ return response_429
70
+
71
+ if response.status_code == 500:
72
+ response_500 = Error.from_dict(response.json())
73
+
74
+ return response_500
75
+
76
+ if client.raise_on_unexpected_status:
77
+ raise errors.UnexpectedStatus(response.status_code, response.content)
78
+ else:
79
+ return None
80
+
81
+
82
+ def _build_response(
83
+ *, client: AuthenticatedClient | Client, response: httpx.Response
84
+ ) -> Response[Error | MediaListResponse]:
85
+ return Response(
86
+ status_code=HTTPStatus(response.status_code),
87
+ content=response.content,
88
+ headers=response.headers,
89
+ parsed=_parse_response(client=client, response=response),
90
+ )
91
+
92
+
93
+ def sync_detailed(
94
+ *,
95
+ client: AuthenticatedClient,
96
+ limit: int | Unset = 20,
97
+ cursor: int | Unset = 0,
98
+ category: MediaIndexCategory | Unset = UNSET,
99
+ ) -> Response[Error | MediaListResponse]:
100
+ """List all media
101
+
102
+ Returns a paginated list of media with full metadata, including cover/banner images, episode counts,
103
+ and genres.
104
+
105
+ Args:
106
+ limit (int | Unset): Default: 20.
107
+ cursor (int | Unset): Default: 0.
108
+ category (MediaIndexCategory | Unset): Example: ANIME.
109
+
110
+ Raises:
111
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
112
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
113
+
114
+ Returns:
115
+ Response[Error | MediaListResponse]
116
+ """
117
+
118
+ kwargs = _get_kwargs(
119
+ limit=limit,
120
+ cursor=cursor,
121
+ category=category,
122
+ )
123
+
124
+ response = client.get_httpx_client().request(
125
+ **kwargs,
126
+ )
127
+
128
+ return _build_response(client=client, response=response)
129
+
130
+
131
+ def sync(
132
+ *,
133
+ client: AuthenticatedClient,
134
+ limit: int | Unset = 20,
135
+ cursor: int | Unset = 0,
136
+ category: MediaIndexCategory | Unset = UNSET,
137
+ ) -> Error | MediaListResponse | None:
138
+ """List all media
139
+
140
+ Returns a paginated list of media with full metadata, including cover/banner images, episode counts,
141
+ and genres.
142
+
143
+ Args:
144
+ limit (int | Unset): Default: 20.
145
+ cursor (int | Unset): Default: 0.
146
+ category (MediaIndexCategory | Unset): Example: ANIME.
147
+
148
+ Raises:
149
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
150
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
151
+
152
+ Returns:
153
+ Error | MediaListResponse
154
+ """
155
+
156
+ return sync_detailed(
157
+ client=client,
158
+ limit=limit,
159
+ cursor=cursor,
160
+ category=category,
161
+ ).parsed
162
+
163
+
164
+ async def asyncio_detailed(
165
+ *,
166
+ client: AuthenticatedClient,
167
+ limit: int | Unset = 20,
168
+ cursor: int | Unset = 0,
169
+ category: MediaIndexCategory | Unset = UNSET,
170
+ ) -> Response[Error | MediaListResponse]:
171
+ """List all media
172
+
173
+ Returns a paginated list of media with full metadata, including cover/banner images, episode counts,
174
+ and genres.
175
+
176
+ Args:
177
+ limit (int | Unset): Default: 20.
178
+ cursor (int | Unset): Default: 0.
179
+ category (MediaIndexCategory | Unset): Example: ANIME.
180
+
181
+ Raises:
182
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
183
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
184
+
185
+ Returns:
186
+ Response[Error | MediaListResponse]
187
+ """
188
+
189
+ kwargs = _get_kwargs(
190
+ limit=limit,
191
+ cursor=cursor,
192
+ category=category,
193
+ )
194
+
195
+ response = await client.get_async_httpx_client().request(**kwargs)
196
+
197
+ return _build_response(client=client, response=response)
198
+
199
+
200
+ async def asyncio(
201
+ *,
202
+ client: AuthenticatedClient,
203
+ limit: int | Unset = 20,
204
+ cursor: int | Unset = 0,
205
+ category: MediaIndexCategory | Unset = UNSET,
206
+ ) -> Error | MediaListResponse | None:
207
+ """List all media
208
+
209
+ Returns a paginated list of media with full metadata, including cover/banner images, episode counts,
210
+ and genres.
211
+
212
+ Args:
213
+ limit (int | Unset): Default: 20.
214
+ cursor (int | Unset): Default: 0.
215
+ category (MediaIndexCategory | Unset): Example: ANIME.
216
+
217
+ Raises:
218
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
219
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
220
+
221
+ Returns:
222
+ Error | MediaListResponse
223
+ """
224
+
225
+ return (
226
+ await asyncio_detailed(
227
+ client=client,
228
+ limit=limit,
229
+ cursor=cursor,
230
+ category=category,
231
+ )
232
+ ).parsed
@@ -0,0 +1,193 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+ from urllib.parse import quote
4
+
5
+ import httpx
6
+
7
+ from ... import errors
8
+ from ...client import AuthenticatedClient, Client
9
+ from ...models.error import Error
10
+ from ...models.media import Media
11
+ from ...types import Response
12
+
13
+
14
+ def _get_kwargs(
15
+ id: int,
16
+ ) -> dict[str, Any]:
17
+ _kwargs: dict[str, Any] = {
18
+ "method": "get",
19
+ "url": "/v1/media/{id}".format(
20
+ id=quote(str(id), safe=""),
21
+ ),
22
+ }
23
+
24
+ return _kwargs
25
+
26
+
27
+ def _parse_response(
28
+ *, client: AuthenticatedClient | Client, response: httpx.Response
29
+ ) -> Error | Media | None:
30
+ if response.status_code == 200:
31
+ response_200 = Media.from_dict(response.json())
32
+
33
+ return response_200
34
+
35
+ if response.status_code == 400:
36
+ response_400 = Error.from_dict(response.json())
37
+
38
+ return response_400
39
+
40
+ if response.status_code == 401:
41
+ response_401 = Error.from_dict(response.json())
42
+
43
+ return response_401
44
+
45
+ if response.status_code == 403:
46
+ response_403 = Error.from_dict(response.json())
47
+
48
+ return response_403
49
+
50
+ if response.status_code == 404:
51
+ response_404 = Error.from_dict(response.json())
52
+
53
+ return response_404
54
+
55
+ if response.status_code == 429:
56
+ response_429 = Error.from_dict(response.json())
57
+
58
+ return response_429
59
+
60
+ if response.status_code == 500:
61
+ response_500 = Error.from_dict(response.json())
62
+
63
+ return response_500
64
+
65
+ if client.raise_on_unexpected_status:
66
+ raise errors.UnexpectedStatus(response.status_code, response.content)
67
+ else:
68
+ return None
69
+
70
+
71
+ def _build_response(
72
+ *, client: AuthenticatedClient | Client, response: httpx.Response
73
+ ) -> Response[Error | Media]:
74
+ return Response(
75
+ status_code=HTTPStatus(response.status_code),
76
+ content=response.content,
77
+ headers=response.headers,
78
+ parsed=_parse_response(client=client, response=response),
79
+ )
80
+
81
+
82
+ def sync_detailed(
83
+ id: int,
84
+ *,
85
+ client: AuthenticatedClient,
86
+ ) -> Response[Error | Media]:
87
+ """Get single media
88
+
89
+ Retrieves a single media entry by its ID.
90
+
91
+ Args:
92
+ id (int): Example: 7674.
93
+
94
+ Raises:
95
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
96
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
97
+
98
+ Returns:
99
+ Response[Error | Media]
100
+ """
101
+
102
+ kwargs = _get_kwargs(
103
+ id=id,
104
+ )
105
+
106
+ response = client.get_httpx_client().request(
107
+ **kwargs,
108
+ )
109
+
110
+ return _build_response(client=client, response=response)
111
+
112
+
113
+ def sync(
114
+ id: int,
115
+ *,
116
+ client: AuthenticatedClient,
117
+ ) -> Error | Media | None:
118
+ """Get single media
119
+
120
+ Retrieves a single media entry by its ID.
121
+
122
+ Args:
123
+ id (int): Example: 7674.
124
+
125
+ Raises:
126
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
127
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
128
+
129
+ Returns:
130
+ Error | Media
131
+ """
132
+
133
+ return sync_detailed(
134
+ id=id,
135
+ client=client,
136
+ ).parsed
137
+
138
+
139
+ async def asyncio_detailed(
140
+ id: int,
141
+ *,
142
+ client: AuthenticatedClient,
143
+ ) -> Response[Error | Media]:
144
+ """Get single media
145
+
146
+ Retrieves a single media entry by its ID.
147
+
148
+ Args:
149
+ id (int): Example: 7674.
150
+
151
+ Raises:
152
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
153
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
154
+
155
+ Returns:
156
+ Response[Error | Media]
157
+ """
158
+
159
+ kwargs = _get_kwargs(
160
+ id=id,
161
+ )
162
+
163
+ response = await client.get_async_httpx_client().request(**kwargs)
164
+
165
+ return _build_response(client=client, response=response)
166
+
167
+
168
+ async def asyncio(
169
+ id: int,
170
+ *,
171
+ client: AuthenticatedClient,
172
+ ) -> Error | Media | None:
173
+ """Get single media
174
+
175
+ Retrieves a single media entry by its ID.
176
+
177
+ Args:
178
+ id (int): Example: 7674.
179
+
180
+ Raises:
181
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
182
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
183
+
184
+ Returns:
185
+ Error | Media
186
+ """
187
+
188
+ return (
189
+ await asyncio_detailed(
190
+ id=id,
191
+ client=client,
192
+ )
193
+ ).parsed
@@ -0,0 +1,221 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+ from urllib.parse import quote
4
+
5
+ import httpx
6
+
7
+ from ... import errors
8
+ from ...client import AuthenticatedClient, Client
9
+ from ...models.error import Error
10
+ from ...models.segment import Segment
11
+ from ...types import Response
12
+
13
+
14
+ def _get_kwargs(
15
+ media_id: int,
16
+ episode_number: int,
17
+ id: int,
18
+ ) -> dict[str, Any]:
19
+ _kwargs: dict[str, Any] = {
20
+ "method": "get",
21
+ "url": "/v1/media/{media_id}/episodes/{episode_number}/segments/{id}".format(
22
+ media_id=quote(str(media_id), safe=""),
23
+ episode_number=quote(str(episode_number), safe=""),
24
+ id=quote(str(id), safe=""),
25
+ ),
26
+ }
27
+
28
+ return _kwargs
29
+
30
+
31
+ def _parse_response(
32
+ *, client: AuthenticatedClient | Client, response: httpx.Response
33
+ ) -> Error | Segment | None:
34
+ if response.status_code == 200:
35
+ response_200 = Segment.from_dict(response.json())
36
+
37
+ return response_200
38
+
39
+ if response.status_code == 400:
40
+ response_400 = Error.from_dict(response.json())
41
+
42
+ return response_400
43
+
44
+ if response.status_code == 401:
45
+ response_401 = Error.from_dict(response.json())
46
+
47
+ return response_401
48
+
49
+ if response.status_code == 403:
50
+ response_403 = Error.from_dict(response.json())
51
+
52
+ return response_403
53
+
54
+ if response.status_code == 404:
55
+ response_404 = Error.from_dict(response.json())
56
+
57
+ return response_404
58
+
59
+ if response.status_code == 429:
60
+ response_429 = Error.from_dict(response.json())
61
+
62
+ return response_429
63
+
64
+ if response.status_code == 500:
65
+ response_500 = Error.from_dict(response.json())
66
+
67
+ return response_500
68
+
69
+ if client.raise_on_unexpected_status:
70
+ raise errors.UnexpectedStatus(response.status_code, response.content)
71
+ else:
72
+ return None
73
+
74
+
75
+ def _build_response(
76
+ *, client: AuthenticatedClient | Client, response: httpx.Response
77
+ ) -> Response[Error | Segment]:
78
+ return Response(
79
+ status_code=HTTPStatus(response.status_code),
80
+ content=response.content,
81
+ headers=response.headers,
82
+ parsed=_parse_response(client=client, response=response),
83
+ )
84
+
85
+
86
+ def sync_detailed(
87
+ media_id: int,
88
+ episode_number: int,
89
+ id: int,
90
+ *,
91
+ client: AuthenticatedClient,
92
+ ) -> Response[Error | Segment]:
93
+ """Get single segment
94
+
95
+ Get a specific segment by ID
96
+
97
+ Args:
98
+ media_id (int):
99
+ episode_number (int):
100
+ id (int):
101
+
102
+ Raises:
103
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
104
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
105
+
106
+ Returns:
107
+ Response[Error | Segment]
108
+ """
109
+
110
+ kwargs = _get_kwargs(
111
+ media_id=media_id,
112
+ episode_number=episode_number,
113
+ id=id,
114
+ )
115
+
116
+ response = client.get_httpx_client().request(
117
+ **kwargs,
118
+ )
119
+
120
+ return _build_response(client=client, response=response)
121
+
122
+
123
+ def sync(
124
+ media_id: int,
125
+ episode_number: int,
126
+ id: int,
127
+ *,
128
+ client: AuthenticatedClient,
129
+ ) -> Error | Segment | None:
130
+ """Get single segment
131
+
132
+ Get a specific segment by ID
133
+
134
+ Args:
135
+ media_id (int):
136
+ episode_number (int):
137
+ id (int):
138
+
139
+ Raises:
140
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
141
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
142
+
143
+ Returns:
144
+ Error | Segment
145
+ """
146
+
147
+ return sync_detailed(
148
+ media_id=media_id,
149
+ episode_number=episode_number,
150
+ id=id,
151
+ client=client,
152
+ ).parsed
153
+
154
+
155
+ async def asyncio_detailed(
156
+ media_id: int,
157
+ episode_number: int,
158
+ id: int,
159
+ *,
160
+ client: AuthenticatedClient,
161
+ ) -> Response[Error | Segment]:
162
+ """Get single segment
163
+
164
+ Get a specific segment by ID
165
+
166
+ Args:
167
+ media_id (int):
168
+ episode_number (int):
169
+ id (int):
170
+
171
+ Raises:
172
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
173
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
174
+
175
+ Returns:
176
+ Response[Error | Segment]
177
+ """
178
+
179
+ kwargs = _get_kwargs(
180
+ media_id=media_id,
181
+ episode_number=episode_number,
182
+ id=id,
183
+ )
184
+
185
+ response = await client.get_async_httpx_client().request(**kwargs)
186
+
187
+ return _build_response(client=client, response=response)
188
+
189
+
190
+ async def asyncio(
191
+ media_id: int,
192
+ episode_number: int,
193
+ id: int,
194
+ *,
195
+ client: AuthenticatedClient,
196
+ ) -> Error | Segment | None:
197
+ """Get single segment
198
+
199
+ Get a specific segment by ID
200
+
201
+ Args:
202
+ media_id (int):
203
+ episode_number (int):
204
+ id (int):
205
+
206
+ Raises:
207
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
208
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
209
+
210
+ Returns:
211
+ Error | Segment
212
+ """
213
+
214
+ return (
215
+ await asyncio_detailed(
216
+ media_id=media_id,
217
+ episode_number=episode_number,
218
+ id=id,
219
+ client=client,
220
+ )
221
+ ).parsed