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.
- nadeshiko/__init__.py +10 -0
- nadeshiko/_version.py +1 -0
- nadeshiko/api/__init__.py +1 -0
- nadeshiko/api/auth/__init__.py +3 -0
- nadeshiko/api/auth/internal/__init__.py +11 -0
- nadeshiko/api/auth/internal/get_discord_auth_url.py +176 -0
- nadeshiko/api/auth/internal/login.py +213 -0
- nadeshiko/api/auth/internal/login_discord.py +204 -0
- nadeshiko/api/auth/internal/login_google.py +204 -0
- nadeshiko/api/auth/internal/register.py +212 -0
- nadeshiko/api/auth_jwt/__init__.py +3 -0
- nadeshiko/api/auth_jwt/internal/__init__.py +7 -0
- nadeshiko/api/auth_jwt/internal/logout.py +151 -0
- nadeshiko/api/lists/__init__.py +8 -0
- nadeshiko/api/lists/internal/__init__.py +12 -0
- nadeshiko/api/lists/internal/list_add_item.py +215 -0
- nadeshiko/api/lists/internal/list_create.py +194 -0
- nadeshiko/api/lists/internal/list_destroy.py +193 -0
- nadeshiko/api/lists/internal/list_remove_item.py +207 -0
- nadeshiko/api/lists/internal/list_update.py +215 -0
- nadeshiko/api/lists/internal/list_update_item.py +229 -0
- nadeshiko/api/lists/list_index.py +257 -0
- nadeshiko/api/lists/list_show.py +193 -0
- nadeshiko/api/media/__init__.py +14 -0
- nadeshiko/api/media/character_show.py +193 -0
- nadeshiko/api/media/episode_index.py +229 -0
- nadeshiko/api/media/episode_show.py +207 -0
- nadeshiko/api/media/internal/__init__.py +16 -0
- nadeshiko/api/media/internal/episode_create.py +215 -0
- nadeshiko/api/media/internal/episode_destroy.py +205 -0
- nadeshiko/api/media/internal/episode_update.py +229 -0
- nadeshiko/api/media/internal/media_create.py +194 -0
- nadeshiko/api/media/internal/media_destroy.py +197 -0
- nadeshiko/api/media/internal/media_update.py +219 -0
- nadeshiko/api/media/internal/segment_create.py +229 -0
- nadeshiko/api/media/internal/segment_destroy.py +219 -0
- nadeshiko/api/media/internal/segment_index.py +243 -0
- nadeshiko/api/media/internal/segment_update.py +243 -0
- nadeshiko/api/media/media_index.py +232 -0
- nadeshiko/api/media/media_show.py +193 -0
- nadeshiko/api/media/segment_show.py +221 -0
- nadeshiko/api/media/segment_show_by_uuid.py +193 -0
- nadeshiko/api/media/seiyuu_show.py +193 -0
- nadeshiko/api/search/__init__.py +11 -0
- nadeshiko/api/search/fetch_media_info.py +278 -0
- nadeshiko/api/search/fetch_sentence_context.py +219 -0
- nadeshiko/api/search/internal/__init__.py +6 -0
- nadeshiko/api/search/search.py +295 -0
- nadeshiko/api/search/search_health_check.py +168 -0
- nadeshiko/api/search/search_multiple.py +238 -0
- nadeshiko/api/user/__init__.py +3 -0
- nadeshiko/api/user/internal/__init__.py +11 -0
- nadeshiko/api/user/internal/create_api_key.py +199 -0
- nadeshiko/api/user/internal/deactivate_api_key.py +194 -0
- nadeshiko/api/user/internal/get_api_keys.py +151 -0
- nadeshiko/api/user/internal/get_identity_me.py +156 -0
- nadeshiko/api/user/internal/get_user_info.py +156 -0
- nadeshiko/client.py +138 -0
- nadeshiko/errors.py +16 -0
- nadeshiko/models/__init__.py +215 -0
- nadeshiko/models/api_key.py +118 -0
- nadeshiko/models/api_key_permission.py +70 -0
- nadeshiko/models/auth_user.py +107 -0
- nadeshiko/models/basic_info.py +132 -0
- nadeshiko/models/category_statistic.py +71 -0
- nadeshiko/models/character.py +100 -0
- nadeshiko/models/character_input.py +130 -0
- nadeshiko/models/character_input_character_role.py +10 -0
- nadeshiko/models/character_with_media.py +124 -0
- nadeshiko/models/character_with_media_media_appearances_item.py +93 -0
- nadeshiko/models/character_with_media_media_appearances_item_role.py +10 -0
- nadeshiko/models/create_api_key_request.py +75 -0
- nadeshiko/models/create_api_key_response.py +70 -0
- nadeshiko/models/deactivate_api_key_request.py +62 -0
- nadeshiko/models/deactivate_api_key_response.py +62 -0
- nadeshiko/models/discord_auth_url_response.py +62 -0
- nadeshiko/models/discord_login_request.py +62 -0
- nadeshiko/models/episode.py +253 -0
- nadeshiko/models/episode_create_request.py +145 -0
- nadeshiko/models/episode_list_response.py +94 -0
- nadeshiko/models/episode_update_request.py +135 -0
- nadeshiko/models/error.py +128 -0
- nadeshiko/models/error_errors.py +46 -0
- nadeshiko/models/fetch_media_info_response.py +115 -0
- nadeshiko/models/fetch_media_info_type.py +10 -0
- nadeshiko/models/fetch_sentence_context_request.py +96 -0
- nadeshiko/models/fetch_sentence_context_response.py +75 -0
- nadeshiko/models/get_api_keys_response.py +86 -0
- nadeshiko/models/google_login_request.py +62 -0
- nadeshiko/models/list_.py +97 -0
- nadeshiko/models/list_add_item_body.py +69 -0
- nadeshiko/models/list_add_item_response_201.py +61 -0
- nadeshiko/models/list_create_request.py +107 -0
- nadeshiko/models/list_create_request_type.py +9 -0
- nadeshiko/models/list_create_request_visibility.py +9 -0
- nadeshiko/models/list_destroy_response_200.py +70 -0
- nadeshiko/models/list_index_type.py +9 -0
- nadeshiko/models/list_index_visibility.py +9 -0
- nadeshiko/models/list_input.py +138 -0
- nadeshiko/models/list_input_list_type.py +9 -0
- nadeshiko/models/list_input_list_visibility.py +9 -0
- nadeshiko/models/list_remove_item_response_200.py +61 -0
- nadeshiko/models/list_type.py +9 -0
- nadeshiko/models/list_update_body.py +78 -0
- nadeshiko/models/list_update_body_visibility.py +9 -0
- nadeshiko/models/list_update_item_body.py +61 -0
- nadeshiko/models/list_update_item_response_200.py +61 -0
- nadeshiko/models/list_visibility.py +9 -0
- nadeshiko/models/list_with_media.py +119 -0
- nadeshiko/models/list_with_media_media_item.py +83 -0
- nadeshiko/models/list_with_media_type.py +9 -0
- nadeshiko/models/list_with_media_visibility.py +9 -0
- nadeshiko/models/login_request.py +70 -0
- nadeshiko/models/login_response.py +84 -0
- nadeshiko/models/logout_response.py +73 -0
- nadeshiko/models/media.py +288 -0
- nadeshiko/models/media_category.py +11 -0
- nadeshiko/models/media_character.py +78 -0
- nadeshiko/models/media_character_role.py +10 -0
- nadeshiko/models/media_create_request.py +270 -0
- nadeshiko/models/media_create_request_category.py +11 -0
- nadeshiko/models/media_destroy_response_200.py +70 -0
- nadeshiko/models/media_index_category.py +9 -0
- nadeshiko/models/media_info_data.py +307 -0
- nadeshiko/models/media_info_path.py +83 -0
- nadeshiko/models/media_info_stats.py +89 -0
- nadeshiko/models/media_list_response.py +94 -0
- nadeshiko/models/media_update_request.py +297 -0
- nadeshiko/models/media_update_request_category.py +9 -0
- nadeshiko/models/quota_info.py +87 -0
- nadeshiko/models/quota_info_quota_limit_type_1.py +8 -0
- nadeshiko/models/register_request.py +78 -0
- nadeshiko/models/register_response.py +76 -0
- nadeshiko/models/register_response_user.py +46 -0
- nadeshiko/models/search_health_check_response.py +138 -0
- nadeshiko/models/search_multiple_request.py +72 -0
- nadeshiko/models/search_multiple_response.py +79 -0
- nadeshiko/models/search_request.py +253 -0
- nadeshiko/models/search_request_content_sort.py +13 -0
- nadeshiko/models/search_request_media_item.py +85 -0
- nadeshiko/models/search_request_media_item_seasons_item.py +69 -0
- nadeshiko/models/search_response.py +158 -0
- nadeshiko/models/segment.py +303 -0
- nadeshiko/models/segment_create_request.py +203 -0
- nadeshiko/models/segment_create_request_status.py +13 -0
- nadeshiko/models/segment_info.py +207 -0
- nadeshiko/models/segment_list_response.py +94 -0
- nadeshiko/models/segment_status.py +13 -0
- nadeshiko/models/segment_update_request.py +198 -0
- nadeshiko/models/segment_update_request_status.py +13 -0
- nadeshiko/models/seiyuu.py +86 -0
- nadeshiko/models/seiyuu_with_roles.py +108 -0
- nadeshiko/models/seiyuu_with_roles_roles_item.py +109 -0
- nadeshiko/models/seiyuu_with_roles_roles_item_role.py +10 -0
- nadeshiko/models/sentence.py +88 -0
- nadeshiko/models/statistic.py +132 -0
- nadeshiko/models/statistic_season_with_episode_hits.py +74 -0
- nadeshiko/models/statistic_season_with_episode_hits_additional_property.py +46 -0
- nadeshiko/models/user_info_response.py +79 -0
- nadeshiko/models/user_info_response_user.py +91 -0
- nadeshiko/models/user_role.py +71 -0
- nadeshiko/models/word_match.py +107 -0
- nadeshiko/models/word_match_media.py +98 -0
- nadeshiko/types.py +54 -0
- nadeshiko_sdk-0.1.0.dist-info/METADATA +147 -0
- nadeshiko_sdk-0.1.0.dist-info/RECORD +167 -0
- nadeshiko_sdk-0.1.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import datetime
|
|
4
|
+
from collections.abc import Mapping
|
|
5
|
+
from typing import TYPE_CHECKING, Any, TypeVar, cast
|
|
6
|
+
|
|
7
|
+
from attrs import define as _attrs_define
|
|
8
|
+
from attrs import field as _attrs_field
|
|
9
|
+
from dateutil.parser import isoparse
|
|
10
|
+
|
|
11
|
+
from ..models.media_create_request_category import MediaCreateRequestCategory
|
|
12
|
+
from ..types import UNSET, Unset
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from ..models.character_input import CharacterInput
|
|
16
|
+
from ..models.list_input import ListInput
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
T = TypeVar("T", bound="MediaCreateRequest")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@_attrs_define
|
|
23
|
+
class MediaCreateRequest:
|
|
24
|
+
"""Request body for creating a new media entry
|
|
25
|
+
|
|
26
|
+
Attributes:
|
|
27
|
+
anilist_id (int): AniList database ID for the media Example: 7674.
|
|
28
|
+
japanese_name (str): Original Japanese name of the media Example: バクマン。.
|
|
29
|
+
romaji_name (str): Romaji transliteration of the media name Example: Bakuman..
|
|
30
|
+
english_name (str): English translation of the media name Example: Bakuman..
|
|
31
|
+
airing_format (str): Format of the media release (e.g., TV, OVA, Movie) Example: TV.
|
|
32
|
+
airing_status (str): Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED) Example: FINISHED.
|
|
33
|
+
genres (list[str]): List of genres associated with the media Example: ['Comedy', 'Drama', 'Romance', 'Slice of
|
|
34
|
+
Life'].
|
|
35
|
+
category (MediaCreateRequestCategory): Media category Example: ANIME.
|
|
36
|
+
version (str): Version of the media-sub-splitter used Example: 6.
|
|
37
|
+
studio (str): Animation studio that produced the media Example: J.C.STAFF.
|
|
38
|
+
season_name (str): Season when the media aired (WINTER, SPRING, SUMMER, FALL) Example: FALL.
|
|
39
|
+
season_year (int): Year when the media aired Example: 2010.
|
|
40
|
+
cover_url (str | Unset): Full URL to the cover image Example:
|
|
41
|
+
https://cdn.example.com/media/anime/bakuman/cover.webp.
|
|
42
|
+
banner_url (str | Unset): Full URL to the banner image Example:
|
|
43
|
+
https://cdn.example.com/media/anime/bakuman/banner.webp.
|
|
44
|
+
start_date (datetime.datetime | Unset): Start date of the media (first airing/release) Example: 2010-10-02
|
|
45
|
+
00:00:00+00:00.
|
|
46
|
+
end_date (datetime.datetime | Unset): End date of the media (last airing/release) Example: 2011-04-02
|
|
47
|
+
00:00:00+00:00.
|
|
48
|
+
hash_salt (str | Unset): Hash salt used when generating the hash for the related media assets Example:
|
|
49
|
+
ba0cbe173ed310528f16130273662a60.
|
|
50
|
+
characters (list[CharacterInput] | Unset): List of characters appearing in the media with their voice actors
|
|
51
|
+
lists (list[ListInput] | Unset): Lists to add this media to (e.g., series, franchise)
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
anilist_id: int
|
|
55
|
+
japanese_name: str
|
|
56
|
+
romaji_name: str
|
|
57
|
+
english_name: str
|
|
58
|
+
airing_format: str
|
|
59
|
+
airing_status: str
|
|
60
|
+
genres: list[str]
|
|
61
|
+
category: MediaCreateRequestCategory
|
|
62
|
+
version: str
|
|
63
|
+
studio: str
|
|
64
|
+
season_name: str
|
|
65
|
+
season_year: int
|
|
66
|
+
cover_url: str | Unset = UNSET
|
|
67
|
+
banner_url: str | Unset = UNSET
|
|
68
|
+
start_date: datetime.datetime | Unset = UNSET
|
|
69
|
+
end_date: datetime.datetime | Unset = UNSET
|
|
70
|
+
hash_salt: str | Unset = UNSET
|
|
71
|
+
characters: list[CharacterInput] | Unset = UNSET
|
|
72
|
+
lists: list[ListInput] | Unset = UNSET
|
|
73
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
74
|
+
|
|
75
|
+
def to_dict(self) -> dict[str, Any]:
|
|
76
|
+
anilist_id = self.anilist_id
|
|
77
|
+
|
|
78
|
+
japanese_name = self.japanese_name
|
|
79
|
+
|
|
80
|
+
romaji_name = self.romaji_name
|
|
81
|
+
|
|
82
|
+
english_name = self.english_name
|
|
83
|
+
|
|
84
|
+
airing_format = self.airing_format
|
|
85
|
+
|
|
86
|
+
airing_status = self.airing_status
|
|
87
|
+
|
|
88
|
+
genres = self.genres
|
|
89
|
+
|
|
90
|
+
category = self.category.value
|
|
91
|
+
|
|
92
|
+
version = self.version
|
|
93
|
+
|
|
94
|
+
studio = self.studio
|
|
95
|
+
|
|
96
|
+
season_name = self.season_name
|
|
97
|
+
|
|
98
|
+
season_year = self.season_year
|
|
99
|
+
|
|
100
|
+
cover_url = self.cover_url
|
|
101
|
+
|
|
102
|
+
banner_url = self.banner_url
|
|
103
|
+
|
|
104
|
+
start_date: str | Unset = UNSET
|
|
105
|
+
if not isinstance(self.start_date, Unset):
|
|
106
|
+
start_date = self.start_date.isoformat()
|
|
107
|
+
|
|
108
|
+
end_date: str | Unset = UNSET
|
|
109
|
+
if not isinstance(self.end_date, Unset):
|
|
110
|
+
end_date = self.end_date.isoformat()
|
|
111
|
+
|
|
112
|
+
hash_salt = self.hash_salt
|
|
113
|
+
|
|
114
|
+
characters: list[dict[str, Any]] | Unset = UNSET
|
|
115
|
+
if not isinstance(self.characters, Unset):
|
|
116
|
+
characters = []
|
|
117
|
+
for characters_item_data in self.characters:
|
|
118
|
+
characters_item = characters_item_data.to_dict()
|
|
119
|
+
characters.append(characters_item)
|
|
120
|
+
|
|
121
|
+
lists: list[dict[str, Any]] | Unset = UNSET
|
|
122
|
+
if not isinstance(self.lists, Unset):
|
|
123
|
+
lists = []
|
|
124
|
+
for lists_item_data in self.lists:
|
|
125
|
+
lists_item = lists_item_data.to_dict()
|
|
126
|
+
lists.append(lists_item)
|
|
127
|
+
|
|
128
|
+
field_dict: dict[str, Any] = {}
|
|
129
|
+
field_dict.update(self.additional_properties)
|
|
130
|
+
field_dict.update(
|
|
131
|
+
{
|
|
132
|
+
"anilistId": anilist_id,
|
|
133
|
+
"japaneseName": japanese_name,
|
|
134
|
+
"romajiName": romaji_name,
|
|
135
|
+
"englishName": english_name,
|
|
136
|
+
"airingFormat": airing_format,
|
|
137
|
+
"airingStatus": airing_status,
|
|
138
|
+
"genres": genres,
|
|
139
|
+
"category": category,
|
|
140
|
+
"version": version,
|
|
141
|
+
"studio": studio,
|
|
142
|
+
"seasonName": season_name,
|
|
143
|
+
"seasonYear": season_year,
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
if cover_url is not UNSET:
|
|
147
|
+
field_dict["coverUrl"] = cover_url
|
|
148
|
+
if banner_url is not UNSET:
|
|
149
|
+
field_dict["bannerUrl"] = banner_url
|
|
150
|
+
if start_date is not UNSET:
|
|
151
|
+
field_dict["startDate"] = start_date
|
|
152
|
+
if end_date is not UNSET:
|
|
153
|
+
field_dict["endDate"] = end_date
|
|
154
|
+
if hash_salt is not UNSET:
|
|
155
|
+
field_dict["hashSalt"] = hash_salt
|
|
156
|
+
if characters is not UNSET:
|
|
157
|
+
field_dict["characters"] = characters
|
|
158
|
+
if lists is not UNSET:
|
|
159
|
+
field_dict["lists"] = lists
|
|
160
|
+
|
|
161
|
+
return field_dict
|
|
162
|
+
|
|
163
|
+
@classmethod
|
|
164
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
165
|
+
from ..models.character_input import CharacterInput
|
|
166
|
+
from ..models.list_input import ListInput
|
|
167
|
+
|
|
168
|
+
d = dict(src_dict)
|
|
169
|
+
anilist_id = d.pop("anilistId")
|
|
170
|
+
|
|
171
|
+
japanese_name = d.pop("japaneseName")
|
|
172
|
+
|
|
173
|
+
romaji_name = d.pop("romajiName")
|
|
174
|
+
|
|
175
|
+
english_name = d.pop("englishName")
|
|
176
|
+
|
|
177
|
+
airing_format = d.pop("airingFormat")
|
|
178
|
+
|
|
179
|
+
airing_status = d.pop("airingStatus")
|
|
180
|
+
|
|
181
|
+
genres = cast(list[str], d.pop("genres"))
|
|
182
|
+
|
|
183
|
+
category = MediaCreateRequestCategory(d.pop("category"))
|
|
184
|
+
|
|
185
|
+
version = d.pop("version")
|
|
186
|
+
|
|
187
|
+
studio = d.pop("studio")
|
|
188
|
+
|
|
189
|
+
season_name = d.pop("seasonName")
|
|
190
|
+
|
|
191
|
+
season_year = d.pop("seasonYear")
|
|
192
|
+
|
|
193
|
+
cover_url = d.pop("coverUrl", UNSET)
|
|
194
|
+
|
|
195
|
+
banner_url = d.pop("bannerUrl", UNSET)
|
|
196
|
+
|
|
197
|
+
_start_date = d.pop("startDate", UNSET)
|
|
198
|
+
start_date: datetime.datetime | Unset
|
|
199
|
+
if isinstance(_start_date, Unset):
|
|
200
|
+
start_date = UNSET
|
|
201
|
+
else:
|
|
202
|
+
start_date = isoparse(_start_date)
|
|
203
|
+
|
|
204
|
+
_end_date = d.pop("endDate", UNSET)
|
|
205
|
+
end_date: datetime.datetime | Unset
|
|
206
|
+
if isinstance(_end_date, Unset):
|
|
207
|
+
end_date = UNSET
|
|
208
|
+
else:
|
|
209
|
+
end_date = isoparse(_end_date)
|
|
210
|
+
|
|
211
|
+
hash_salt = d.pop("hashSalt", UNSET)
|
|
212
|
+
|
|
213
|
+
_characters = d.pop("characters", UNSET)
|
|
214
|
+
characters: list[CharacterInput] | Unset = UNSET
|
|
215
|
+
if _characters is not UNSET:
|
|
216
|
+
characters = []
|
|
217
|
+
for characters_item_data in _characters:
|
|
218
|
+
characters_item = CharacterInput.from_dict(characters_item_data)
|
|
219
|
+
|
|
220
|
+
characters.append(characters_item)
|
|
221
|
+
|
|
222
|
+
_lists = d.pop("lists", UNSET)
|
|
223
|
+
lists: list[ListInput] | Unset = UNSET
|
|
224
|
+
if _lists is not UNSET:
|
|
225
|
+
lists = []
|
|
226
|
+
for lists_item_data in _lists:
|
|
227
|
+
lists_item = ListInput.from_dict(lists_item_data)
|
|
228
|
+
|
|
229
|
+
lists.append(lists_item)
|
|
230
|
+
|
|
231
|
+
media_create_request = cls(
|
|
232
|
+
anilist_id=anilist_id,
|
|
233
|
+
japanese_name=japanese_name,
|
|
234
|
+
romaji_name=romaji_name,
|
|
235
|
+
english_name=english_name,
|
|
236
|
+
airing_format=airing_format,
|
|
237
|
+
airing_status=airing_status,
|
|
238
|
+
genres=genres,
|
|
239
|
+
category=category,
|
|
240
|
+
version=version,
|
|
241
|
+
studio=studio,
|
|
242
|
+
season_name=season_name,
|
|
243
|
+
season_year=season_year,
|
|
244
|
+
cover_url=cover_url,
|
|
245
|
+
banner_url=banner_url,
|
|
246
|
+
start_date=start_date,
|
|
247
|
+
end_date=end_date,
|
|
248
|
+
hash_salt=hash_salt,
|
|
249
|
+
characters=characters,
|
|
250
|
+
lists=lists,
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
media_create_request.additional_properties = d
|
|
254
|
+
return media_create_request
|
|
255
|
+
|
|
256
|
+
@property
|
|
257
|
+
def additional_keys(self) -> list[str]:
|
|
258
|
+
return list(self.additional_properties.keys())
|
|
259
|
+
|
|
260
|
+
def __getitem__(self, key: str) -> Any:
|
|
261
|
+
return self.additional_properties[key]
|
|
262
|
+
|
|
263
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
264
|
+
self.additional_properties[key] = value
|
|
265
|
+
|
|
266
|
+
def __delitem__(self, key: str) -> None:
|
|
267
|
+
del self.additional_properties[key]
|
|
268
|
+
|
|
269
|
+
def __contains__(self, key: str) -> bool:
|
|
270
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
T = TypeVar("T", bound="MediaDestroyResponse200")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@_attrs_define
|
|
15
|
+
class MediaDestroyResponse200:
|
|
16
|
+
"""
|
|
17
|
+
Attributes:
|
|
18
|
+
message (str | Unset): Example: Media deleted successfully.
|
|
19
|
+
id (int | Unset): Example: 7674.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
message: str | Unset = UNSET
|
|
23
|
+
id: int | Unset = UNSET
|
|
24
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
25
|
+
|
|
26
|
+
def to_dict(self) -> dict[str, Any]:
|
|
27
|
+
message = self.message
|
|
28
|
+
|
|
29
|
+
id = self.id
|
|
30
|
+
|
|
31
|
+
field_dict: dict[str, Any] = {}
|
|
32
|
+
field_dict.update(self.additional_properties)
|
|
33
|
+
field_dict.update({})
|
|
34
|
+
if message is not UNSET:
|
|
35
|
+
field_dict["message"] = message
|
|
36
|
+
if id is not UNSET:
|
|
37
|
+
field_dict["id"] = id
|
|
38
|
+
|
|
39
|
+
return field_dict
|
|
40
|
+
|
|
41
|
+
@classmethod
|
|
42
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
43
|
+
d = dict(src_dict)
|
|
44
|
+
message = d.pop("message", UNSET)
|
|
45
|
+
|
|
46
|
+
id = d.pop("id", UNSET)
|
|
47
|
+
|
|
48
|
+
media_destroy_response_200 = cls(
|
|
49
|
+
message=message,
|
|
50
|
+
id=id,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
media_destroy_response_200.additional_properties = d
|
|
54
|
+
return media_destroy_response_200
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def additional_keys(self) -> list[str]:
|
|
58
|
+
return list(self.additional_properties.keys())
|
|
59
|
+
|
|
60
|
+
def __getitem__(self, key: str) -> Any:
|
|
61
|
+
return self.additional_properties[key]
|
|
62
|
+
|
|
63
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
64
|
+
self.additional_properties[key] = value
|
|
65
|
+
|
|
66
|
+
def __delitem__(self, key: str) -> None:
|
|
67
|
+
del self.additional_properties[key]
|
|
68
|
+
|
|
69
|
+
def __contains__(self, key: str) -> bool:
|
|
70
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import datetime
|
|
4
|
+
from collections.abc import Mapping
|
|
5
|
+
from typing import Any, TypeVar, cast
|
|
6
|
+
|
|
7
|
+
from attrs import define as _attrs_define
|
|
8
|
+
from attrs import field as _attrs_field
|
|
9
|
+
from dateutil.parser import isoparse
|
|
10
|
+
|
|
11
|
+
from ..types import UNSET, Unset
|
|
12
|
+
|
|
13
|
+
T = TypeVar("T", bound="MediaInfoData")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@_attrs_define
|
|
17
|
+
class MediaInfoData:
|
|
18
|
+
"""Complete information about a media/anime entry
|
|
19
|
+
|
|
20
|
+
Attributes:
|
|
21
|
+
id (int): Unique identifier for the media Example: 110316.
|
|
22
|
+
anilist_id (int | None | Unset): AniList database ID for the media Example: 21459.
|
|
23
|
+
tmdb_id (int | None | Unset): TMDB (The Movie Database) ID for the media Example: 63726.
|
|
24
|
+
category (int | Unset): Media category (1=Anime, 2=Unknown, 3=J-Drama, 4=Audiobook) Example: 1.
|
|
25
|
+
created_at (datetime.datetime | Unset): Timestamp when the media entry was created in the database Example:
|
|
26
|
+
2024-01-15 10:30:00+00:00.
|
|
27
|
+
updated_at (int | Unset): Timestamp when the media entry was last updated Example: 1705769100.
|
|
28
|
+
romaji_name (str | Unset): Romaji transliteration of the media name Example: Steins;Gate.
|
|
29
|
+
english_name (str | Unset): English translation of the media name Example: Steins;Gate.
|
|
30
|
+
japanese_name (str | Unset): Original Japanese name of the media Example: シュタインズ・ゲート.
|
|
31
|
+
airing_format (str | Unset): Format of the media release (e.g., TV, OVA, Movie) Example: TV.
|
|
32
|
+
airing_status (str | Unset): Current airing status (FINISHED, RELEASING) Example: FINISHED.
|
|
33
|
+
start_date (datetime.datetime | Unset): Start date of the media Example: 2011-04-06 00:00:00+00:00.
|
|
34
|
+
end_date (datetime.datetime | None | Unset): End date of the media (null if unknown) Example: 2011-09-14
|
|
35
|
+
00:00:00+00:00.
|
|
36
|
+
folder_media_name (str | Unset): Folder name used for storing media files Example: steins-gate.
|
|
37
|
+
genres (list[str] | Unset): List of genres associated with the media Example: ['Sci-Fi', 'Thriller', 'Romance'].
|
|
38
|
+
cover (str | Unset): URL to the cover image Example: https://example.com/media/anime/steins-gate/cover.jpg.
|
|
39
|
+
banner (str | Unset): URL to the banner image Example: https://example.com/media/anime/steins-gate/banner.jpg.
|
|
40
|
+
version (str | Unset): Version identifier for the media entry Example: v1.0.
|
|
41
|
+
num_segments (int | Unset): Total number of subtitle segments available Example: 18542.
|
|
42
|
+
num_seasons (int | Unset): Total number of seasons available Example: 1.
|
|
43
|
+
num_episodes (int | Unset): Total number of episodes available Example: 24.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
id: int
|
|
47
|
+
anilist_id: int | None | Unset = UNSET
|
|
48
|
+
tmdb_id: int | None | Unset = UNSET
|
|
49
|
+
category: int | Unset = UNSET
|
|
50
|
+
created_at: datetime.datetime | Unset = UNSET
|
|
51
|
+
updated_at: int | Unset = UNSET
|
|
52
|
+
romaji_name: str | Unset = UNSET
|
|
53
|
+
english_name: str | Unset = UNSET
|
|
54
|
+
japanese_name: str | Unset = UNSET
|
|
55
|
+
airing_format: str | Unset = UNSET
|
|
56
|
+
airing_status: str | Unset = UNSET
|
|
57
|
+
start_date: datetime.datetime | Unset = UNSET
|
|
58
|
+
end_date: datetime.datetime | None | Unset = UNSET
|
|
59
|
+
folder_media_name: str | Unset = UNSET
|
|
60
|
+
genres: list[str] | Unset = UNSET
|
|
61
|
+
cover: str | Unset = UNSET
|
|
62
|
+
banner: str | Unset = UNSET
|
|
63
|
+
version: str | Unset = UNSET
|
|
64
|
+
num_segments: int | Unset = UNSET
|
|
65
|
+
num_seasons: int | Unset = UNSET
|
|
66
|
+
num_episodes: int | Unset = UNSET
|
|
67
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
68
|
+
|
|
69
|
+
def to_dict(self) -> dict[str, Any]:
|
|
70
|
+
id = self.id
|
|
71
|
+
|
|
72
|
+
anilist_id: int | None | Unset
|
|
73
|
+
if isinstance(self.anilist_id, Unset):
|
|
74
|
+
anilist_id = UNSET
|
|
75
|
+
else:
|
|
76
|
+
anilist_id = self.anilist_id
|
|
77
|
+
|
|
78
|
+
tmdb_id: int | None | Unset
|
|
79
|
+
if isinstance(self.tmdb_id, Unset):
|
|
80
|
+
tmdb_id = UNSET
|
|
81
|
+
else:
|
|
82
|
+
tmdb_id = self.tmdb_id
|
|
83
|
+
|
|
84
|
+
category = self.category
|
|
85
|
+
|
|
86
|
+
created_at: str | Unset = UNSET
|
|
87
|
+
if not isinstance(self.created_at, Unset):
|
|
88
|
+
created_at = self.created_at.isoformat()
|
|
89
|
+
|
|
90
|
+
updated_at = self.updated_at
|
|
91
|
+
|
|
92
|
+
romaji_name = self.romaji_name
|
|
93
|
+
|
|
94
|
+
english_name = self.english_name
|
|
95
|
+
|
|
96
|
+
japanese_name = self.japanese_name
|
|
97
|
+
|
|
98
|
+
airing_format = self.airing_format
|
|
99
|
+
|
|
100
|
+
airing_status = self.airing_status
|
|
101
|
+
|
|
102
|
+
start_date: str | Unset = UNSET
|
|
103
|
+
if not isinstance(self.start_date, Unset):
|
|
104
|
+
start_date = self.start_date.isoformat()
|
|
105
|
+
|
|
106
|
+
end_date: None | str | Unset
|
|
107
|
+
if isinstance(self.end_date, Unset):
|
|
108
|
+
end_date = UNSET
|
|
109
|
+
elif isinstance(self.end_date, datetime.datetime):
|
|
110
|
+
end_date = self.end_date.isoformat()
|
|
111
|
+
else:
|
|
112
|
+
end_date = self.end_date
|
|
113
|
+
|
|
114
|
+
folder_media_name = self.folder_media_name
|
|
115
|
+
|
|
116
|
+
genres: list[str] | Unset = UNSET
|
|
117
|
+
if not isinstance(self.genres, Unset):
|
|
118
|
+
genres = self.genres
|
|
119
|
+
|
|
120
|
+
cover = self.cover
|
|
121
|
+
|
|
122
|
+
banner = self.banner
|
|
123
|
+
|
|
124
|
+
version = self.version
|
|
125
|
+
|
|
126
|
+
num_segments = self.num_segments
|
|
127
|
+
|
|
128
|
+
num_seasons = self.num_seasons
|
|
129
|
+
|
|
130
|
+
num_episodes = self.num_episodes
|
|
131
|
+
|
|
132
|
+
field_dict: dict[str, Any] = {}
|
|
133
|
+
field_dict.update(self.additional_properties)
|
|
134
|
+
field_dict.update(
|
|
135
|
+
{
|
|
136
|
+
"id": id,
|
|
137
|
+
}
|
|
138
|
+
)
|
|
139
|
+
if anilist_id is not UNSET:
|
|
140
|
+
field_dict["anilist_id"] = anilist_id
|
|
141
|
+
if tmdb_id is not UNSET:
|
|
142
|
+
field_dict["tmdb_id"] = tmdb_id
|
|
143
|
+
if category is not UNSET:
|
|
144
|
+
field_dict["category"] = category
|
|
145
|
+
if created_at is not UNSET:
|
|
146
|
+
field_dict["created_at"] = created_at
|
|
147
|
+
if updated_at is not UNSET:
|
|
148
|
+
field_dict["updated_at"] = updated_at
|
|
149
|
+
if romaji_name is not UNSET:
|
|
150
|
+
field_dict["romaji_name"] = romaji_name
|
|
151
|
+
if english_name is not UNSET:
|
|
152
|
+
field_dict["english_name"] = english_name
|
|
153
|
+
if japanese_name is not UNSET:
|
|
154
|
+
field_dict["japanese_name"] = japanese_name
|
|
155
|
+
if airing_format is not UNSET:
|
|
156
|
+
field_dict["airing_format"] = airing_format
|
|
157
|
+
if airing_status is not UNSET:
|
|
158
|
+
field_dict["airing_status"] = airing_status
|
|
159
|
+
if start_date is not UNSET:
|
|
160
|
+
field_dict["start_date"] = start_date
|
|
161
|
+
if end_date is not UNSET:
|
|
162
|
+
field_dict["end_date"] = end_date
|
|
163
|
+
if folder_media_name is not UNSET:
|
|
164
|
+
field_dict["folder_media_name"] = folder_media_name
|
|
165
|
+
if genres is not UNSET:
|
|
166
|
+
field_dict["genres"] = genres
|
|
167
|
+
if cover is not UNSET:
|
|
168
|
+
field_dict["cover"] = cover
|
|
169
|
+
if banner is not UNSET:
|
|
170
|
+
field_dict["banner"] = banner
|
|
171
|
+
if version is not UNSET:
|
|
172
|
+
field_dict["version"] = version
|
|
173
|
+
if num_segments is not UNSET:
|
|
174
|
+
field_dict["num_segments"] = num_segments
|
|
175
|
+
if num_seasons is not UNSET:
|
|
176
|
+
field_dict["num_seasons"] = num_seasons
|
|
177
|
+
if num_episodes is not UNSET:
|
|
178
|
+
field_dict["num_episodes"] = num_episodes
|
|
179
|
+
|
|
180
|
+
return field_dict
|
|
181
|
+
|
|
182
|
+
@classmethod
|
|
183
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
184
|
+
d = dict(src_dict)
|
|
185
|
+
id = d.pop("id")
|
|
186
|
+
|
|
187
|
+
def _parse_anilist_id(data: object) -> int | None | Unset:
|
|
188
|
+
if data is None:
|
|
189
|
+
return data
|
|
190
|
+
if isinstance(data, Unset):
|
|
191
|
+
return data
|
|
192
|
+
return cast(int | None | Unset, data)
|
|
193
|
+
|
|
194
|
+
anilist_id = _parse_anilist_id(d.pop("anilist_id", UNSET))
|
|
195
|
+
|
|
196
|
+
def _parse_tmdb_id(data: object) -> int | None | Unset:
|
|
197
|
+
if data is None:
|
|
198
|
+
return data
|
|
199
|
+
if isinstance(data, Unset):
|
|
200
|
+
return data
|
|
201
|
+
return cast(int | None | Unset, data)
|
|
202
|
+
|
|
203
|
+
tmdb_id = _parse_tmdb_id(d.pop("tmdb_id", UNSET))
|
|
204
|
+
|
|
205
|
+
category = d.pop("category", UNSET)
|
|
206
|
+
|
|
207
|
+
_created_at = d.pop("created_at", UNSET)
|
|
208
|
+
created_at: datetime.datetime | Unset
|
|
209
|
+
if isinstance(_created_at, Unset):
|
|
210
|
+
created_at = UNSET
|
|
211
|
+
else:
|
|
212
|
+
created_at = isoparse(_created_at)
|
|
213
|
+
|
|
214
|
+
updated_at = d.pop("updated_at", UNSET)
|
|
215
|
+
|
|
216
|
+
romaji_name = d.pop("romaji_name", UNSET)
|
|
217
|
+
|
|
218
|
+
english_name = d.pop("english_name", UNSET)
|
|
219
|
+
|
|
220
|
+
japanese_name = d.pop("japanese_name", UNSET)
|
|
221
|
+
|
|
222
|
+
airing_format = d.pop("airing_format", UNSET)
|
|
223
|
+
|
|
224
|
+
airing_status = d.pop("airing_status", UNSET)
|
|
225
|
+
|
|
226
|
+
_start_date = d.pop("start_date", UNSET)
|
|
227
|
+
start_date: datetime.datetime | Unset
|
|
228
|
+
if isinstance(_start_date, Unset):
|
|
229
|
+
start_date = UNSET
|
|
230
|
+
else:
|
|
231
|
+
start_date = isoparse(_start_date)
|
|
232
|
+
|
|
233
|
+
def _parse_end_date(data: object) -> datetime.datetime | None | Unset:
|
|
234
|
+
if data is None:
|
|
235
|
+
return data
|
|
236
|
+
if isinstance(data, Unset):
|
|
237
|
+
return data
|
|
238
|
+
try:
|
|
239
|
+
if not isinstance(data, str):
|
|
240
|
+
raise TypeError()
|
|
241
|
+
end_date_type_0 = isoparse(data)
|
|
242
|
+
|
|
243
|
+
return end_date_type_0
|
|
244
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
245
|
+
pass
|
|
246
|
+
return cast(datetime.datetime | None | Unset, data)
|
|
247
|
+
|
|
248
|
+
end_date = _parse_end_date(d.pop("end_date", UNSET))
|
|
249
|
+
|
|
250
|
+
folder_media_name = d.pop("folder_media_name", UNSET)
|
|
251
|
+
|
|
252
|
+
genres = cast(list[str], d.pop("genres", UNSET))
|
|
253
|
+
|
|
254
|
+
cover = d.pop("cover", UNSET)
|
|
255
|
+
|
|
256
|
+
banner = d.pop("banner", UNSET)
|
|
257
|
+
|
|
258
|
+
version = d.pop("version", UNSET)
|
|
259
|
+
|
|
260
|
+
num_segments = d.pop("num_segments", UNSET)
|
|
261
|
+
|
|
262
|
+
num_seasons = d.pop("num_seasons", UNSET)
|
|
263
|
+
|
|
264
|
+
num_episodes = d.pop("num_episodes", UNSET)
|
|
265
|
+
|
|
266
|
+
media_info_data = cls(
|
|
267
|
+
id=id,
|
|
268
|
+
anilist_id=anilist_id,
|
|
269
|
+
tmdb_id=tmdb_id,
|
|
270
|
+
category=category,
|
|
271
|
+
created_at=created_at,
|
|
272
|
+
updated_at=updated_at,
|
|
273
|
+
romaji_name=romaji_name,
|
|
274
|
+
english_name=english_name,
|
|
275
|
+
japanese_name=japanese_name,
|
|
276
|
+
airing_format=airing_format,
|
|
277
|
+
airing_status=airing_status,
|
|
278
|
+
start_date=start_date,
|
|
279
|
+
end_date=end_date,
|
|
280
|
+
folder_media_name=folder_media_name,
|
|
281
|
+
genres=genres,
|
|
282
|
+
cover=cover,
|
|
283
|
+
banner=banner,
|
|
284
|
+
version=version,
|
|
285
|
+
num_segments=num_segments,
|
|
286
|
+
num_seasons=num_seasons,
|
|
287
|
+
num_episodes=num_episodes,
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
media_info_data.additional_properties = d
|
|
291
|
+
return media_info_data
|
|
292
|
+
|
|
293
|
+
@property
|
|
294
|
+
def additional_keys(self) -> list[str]:
|
|
295
|
+
return list(self.additional_properties.keys())
|
|
296
|
+
|
|
297
|
+
def __getitem__(self, key: str) -> Any:
|
|
298
|
+
return self.additional_properties[key]
|
|
299
|
+
|
|
300
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
301
|
+
self.additional_properties[key] = value
|
|
302
|
+
|
|
303
|
+
def __delitem__(self, key: str) -> None:
|
|
304
|
+
del self.additional_properties[key]
|
|
305
|
+
|
|
306
|
+
def __contains__(self, key: str) -> bool:
|
|
307
|
+
return key in self.additional_properties
|