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,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
|
+
T = TypeVar("T", bound="LoginRequest")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@_attrs_define
|
|
13
|
+
class LoginRequest:
|
|
14
|
+
"""Login request body
|
|
15
|
+
|
|
16
|
+
Attributes:
|
|
17
|
+
email (str): User's email address Example: admin@admin.com.
|
|
18
|
+
password (str): User's password Example: admin.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
email: str
|
|
22
|
+
password: str
|
|
23
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
24
|
+
|
|
25
|
+
def to_dict(self) -> dict[str, Any]:
|
|
26
|
+
email = self.email
|
|
27
|
+
|
|
28
|
+
password = self.password
|
|
29
|
+
|
|
30
|
+
field_dict: dict[str, Any] = {}
|
|
31
|
+
field_dict.update(self.additional_properties)
|
|
32
|
+
field_dict.update(
|
|
33
|
+
{
|
|
34
|
+
"email": email,
|
|
35
|
+
"password": password,
|
|
36
|
+
}
|
|
37
|
+
)
|
|
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
|
+
email = d.pop("email")
|
|
45
|
+
|
|
46
|
+
password = d.pop("password")
|
|
47
|
+
|
|
48
|
+
login_request = cls(
|
|
49
|
+
email=email,
|
|
50
|
+
password=password,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
login_request.additional_properties = d
|
|
54
|
+
return login_request
|
|
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,84 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import TYPE_CHECKING, Any, TypeVar
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from ..models.auth_user import AuthUser
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
T = TypeVar("T", bound="LoginResponse")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@_attrs_define
|
|
17
|
+
class LoginResponse:
|
|
18
|
+
"""Login Response
|
|
19
|
+
|
|
20
|
+
Attributes:
|
|
21
|
+
message (str): Success message
|
|
22
|
+
user (AuthUser): Authenticated user information
|
|
23
|
+
token (str): JWT access token
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
message: str
|
|
27
|
+
user: AuthUser
|
|
28
|
+
token: str
|
|
29
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
30
|
+
|
|
31
|
+
def to_dict(self) -> dict[str, Any]:
|
|
32
|
+
message = self.message
|
|
33
|
+
|
|
34
|
+
user = self.user.to_dict()
|
|
35
|
+
|
|
36
|
+
token = self.token
|
|
37
|
+
|
|
38
|
+
field_dict: dict[str, Any] = {}
|
|
39
|
+
field_dict.update(self.additional_properties)
|
|
40
|
+
field_dict.update(
|
|
41
|
+
{
|
|
42
|
+
"message": message,
|
|
43
|
+
"user": user,
|
|
44
|
+
"token": token,
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
return field_dict
|
|
49
|
+
|
|
50
|
+
@classmethod
|
|
51
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
52
|
+
from ..models.auth_user import AuthUser
|
|
53
|
+
|
|
54
|
+
d = dict(src_dict)
|
|
55
|
+
message = d.pop("message")
|
|
56
|
+
|
|
57
|
+
user = AuthUser.from_dict(d.pop("user"))
|
|
58
|
+
|
|
59
|
+
token = d.pop("token")
|
|
60
|
+
|
|
61
|
+
login_response = cls(
|
|
62
|
+
message=message,
|
|
63
|
+
user=user,
|
|
64
|
+
token=token,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
login_response.additional_properties = d
|
|
68
|
+
return login_response
|
|
69
|
+
|
|
70
|
+
@property
|
|
71
|
+
def additional_keys(self) -> list[str]:
|
|
72
|
+
return list(self.additional_properties.keys())
|
|
73
|
+
|
|
74
|
+
def __getitem__(self, key: str) -> Any:
|
|
75
|
+
return self.additional_properties[key]
|
|
76
|
+
|
|
77
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
78
|
+
self.additional_properties[key] = value
|
|
79
|
+
|
|
80
|
+
def __delitem__(self, key: str) -> None:
|
|
81
|
+
del self.additional_properties[key]
|
|
82
|
+
|
|
83
|
+
def __contains__(self, key: str) -> bool:
|
|
84
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,73 @@
|
|
|
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="LogoutResponse")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@_attrs_define
|
|
15
|
+
class LogoutResponse:
|
|
16
|
+
"""Logout response
|
|
17
|
+
|
|
18
|
+
Attributes:
|
|
19
|
+
message (str): Success message
|
|
20
|
+
status (int | Unset): HTTP status code
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
message: str
|
|
24
|
+
status: int | Unset = UNSET
|
|
25
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
26
|
+
|
|
27
|
+
def to_dict(self) -> dict[str, Any]:
|
|
28
|
+
message = self.message
|
|
29
|
+
|
|
30
|
+
status = self.status
|
|
31
|
+
|
|
32
|
+
field_dict: dict[str, Any] = {}
|
|
33
|
+
field_dict.update(self.additional_properties)
|
|
34
|
+
field_dict.update(
|
|
35
|
+
{
|
|
36
|
+
"message": message,
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
if status is not UNSET:
|
|
40
|
+
field_dict["status"] = status
|
|
41
|
+
|
|
42
|
+
return field_dict
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
46
|
+
d = dict(src_dict)
|
|
47
|
+
message = d.pop("message")
|
|
48
|
+
|
|
49
|
+
status = d.pop("status", UNSET)
|
|
50
|
+
|
|
51
|
+
logout_response = cls(
|
|
52
|
+
message=message,
|
|
53
|
+
status=status,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
logout_response.additional_properties = d
|
|
57
|
+
return logout_response
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def additional_keys(self) -> list[str]:
|
|
61
|
+
return list(self.additional_properties.keys())
|
|
62
|
+
|
|
63
|
+
def __getitem__(self, key: str) -> Any:
|
|
64
|
+
return self.additional_properties[key]
|
|
65
|
+
|
|
66
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
67
|
+
self.additional_properties[key] = value
|
|
68
|
+
|
|
69
|
+
def __delitem__(self, key: str) -> None:
|
|
70
|
+
del self.additional_properties[key]
|
|
71
|
+
|
|
72
|
+
def __contains__(self, key: str) -> bool:
|
|
73
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,288 @@
|
|
|
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_category import MediaCategory
|
|
12
|
+
from ..types import UNSET, Unset
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from ..models.list_ import List
|
|
16
|
+
from ..models.media_character import MediaCharacter
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
T = TypeVar("T", bound="Media")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@_attrs_define
|
|
23
|
+
class Media:
|
|
24
|
+
"""Media entry with full metadata
|
|
25
|
+
|
|
26
|
+
Attributes:
|
|
27
|
+
id (int): Unique identifier for the media Example: 7674.
|
|
28
|
+
anilist_id (int): AniList database ID for the media Example: 7674.
|
|
29
|
+
japanese_name (str): Original Japanese name of the media Example: バクマン。.
|
|
30
|
+
romaji_name (str): Romaji transliteration of the media name Example: Bakuman..
|
|
31
|
+
english_name (str): English translation of the media name Example: Bakuman..
|
|
32
|
+
airing_format (str): Format of the media release (e.g., TV, OVA, Movie) Example: TV.
|
|
33
|
+
airing_status (str): Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED) Example: FINISHED.
|
|
34
|
+
genres (list[str]): List of genres associated with the media Example: ['Comedy', 'Drama', 'Romance', 'Slice of
|
|
35
|
+
Life'].
|
|
36
|
+
cover_url (str): Full URL to the cover image Example: https://cdn.example.com/media/anime/bakuman/cover.webp.
|
|
37
|
+
banner_url (str): Full URL to the banner image Example: https://cdn.example.com/media/anime/bakuman/banner.webp.
|
|
38
|
+
start_date (datetime.datetime): Start date of the media (first airing/release) Example: 2010-10-02
|
|
39
|
+
00:00:00+00:00.
|
|
40
|
+
category (MediaCategory): Media category Example: ANIME.
|
|
41
|
+
version (str): Version identifier for the media entry Example: 6.
|
|
42
|
+
studio (str): Animation studio that produced the media Example: J.C.STAFF.
|
|
43
|
+
season_name (str): Season when the media aired (WINTER, SPRING, SUMMER, FALL) Example: FALL.
|
|
44
|
+
season_year (int): Year when the media aired Example: 2010.
|
|
45
|
+
end_date (datetime.datetime | None | Unset): End date of the media (last airing/release) Example: 2011-04-02
|
|
46
|
+
00:00:00+00:00.
|
|
47
|
+
num_segments (int | Unset): Total number of subtitle segments available
|
|
48
|
+
num_episodes (int | Unset): Total number of episodes available Example: 25.
|
|
49
|
+
characters (list[MediaCharacter] | Unset): Characters appearing in the media with their voice actors
|
|
50
|
+
lists (list[List] | Unset): Lists that contain this media
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
id: int
|
|
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
|
+
cover_url: str
|
|
62
|
+
banner_url: str
|
|
63
|
+
start_date: datetime.datetime
|
|
64
|
+
category: MediaCategory
|
|
65
|
+
version: str
|
|
66
|
+
studio: str
|
|
67
|
+
season_name: str
|
|
68
|
+
season_year: int
|
|
69
|
+
end_date: datetime.datetime | None | Unset = UNSET
|
|
70
|
+
num_segments: int | Unset = UNSET
|
|
71
|
+
num_episodes: int | Unset = UNSET
|
|
72
|
+
characters: list[MediaCharacter] | Unset = UNSET
|
|
73
|
+
lists: list[List] | Unset = UNSET
|
|
74
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
75
|
+
|
|
76
|
+
def to_dict(self) -> dict[str, Any]:
|
|
77
|
+
id = self.id
|
|
78
|
+
|
|
79
|
+
anilist_id = self.anilist_id
|
|
80
|
+
|
|
81
|
+
japanese_name = self.japanese_name
|
|
82
|
+
|
|
83
|
+
romaji_name = self.romaji_name
|
|
84
|
+
|
|
85
|
+
english_name = self.english_name
|
|
86
|
+
|
|
87
|
+
airing_format = self.airing_format
|
|
88
|
+
|
|
89
|
+
airing_status = self.airing_status
|
|
90
|
+
|
|
91
|
+
genres = self.genres
|
|
92
|
+
|
|
93
|
+
cover_url = self.cover_url
|
|
94
|
+
|
|
95
|
+
banner_url = self.banner_url
|
|
96
|
+
|
|
97
|
+
start_date = self.start_date.isoformat()
|
|
98
|
+
|
|
99
|
+
category = self.category.value
|
|
100
|
+
|
|
101
|
+
version = self.version
|
|
102
|
+
|
|
103
|
+
studio = self.studio
|
|
104
|
+
|
|
105
|
+
season_name = self.season_name
|
|
106
|
+
|
|
107
|
+
season_year = self.season_year
|
|
108
|
+
|
|
109
|
+
end_date: None | str | Unset
|
|
110
|
+
if isinstance(self.end_date, Unset):
|
|
111
|
+
end_date = UNSET
|
|
112
|
+
elif isinstance(self.end_date, datetime.datetime):
|
|
113
|
+
end_date = self.end_date.isoformat()
|
|
114
|
+
else:
|
|
115
|
+
end_date = self.end_date
|
|
116
|
+
|
|
117
|
+
num_segments = self.num_segments
|
|
118
|
+
|
|
119
|
+
num_episodes = self.num_episodes
|
|
120
|
+
|
|
121
|
+
characters: list[dict[str, Any]] | Unset = UNSET
|
|
122
|
+
if not isinstance(self.characters, Unset):
|
|
123
|
+
characters = []
|
|
124
|
+
for characters_item_data in self.characters:
|
|
125
|
+
characters_item = characters_item_data.to_dict()
|
|
126
|
+
characters.append(characters_item)
|
|
127
|
+
|
|
128
|
+
lists: list[dict[str, Any]] | Unset = UNSET
|
|
129
|
+
if not isinstance(self.lists, Unset):
|
|
130
|
+
lists = []
|
|
131
|
+
for lists_item_data in self.lists:
|
|
132
|
+
lists_item = lists_item_data.to_dict()
|
|
133
|
+
lists.append(lists_item)
|
|
134
|
+
|
|
135
|
+
field_dict: dict[str, Any] = {}
|
|
136
|
+
field_dict.update(self.additional_properties)
|
|
137
|
+
field_dict.update(
|
|
138
|
+
{
|
|
139
|
+
"id": id,
|
|
140
|
+
"anilistId": anilist_id,
|
|
141
|
+
"japaneseName": japanese_name,
|
|
142
|
+
"romajiName": romaji_name,
|
|
143
|
+
"englishName": english_name,
|
|
144
|
+
"airingFormat": airing_format,
|
|
145
|
+
"airingStatus": airing_status,
|
|
146
|
+
"genres": genres,
|
|
147
|
+
"coverUrl": cover_url,
|
|
148
|
+
"bannerUrl": banner_url,
|
|
149
|
+
"startDate": start_date,
|
|
150
|
+
"category": category,
|
|
151
|
+
"version": version,
|
|
152
|
+
"studio": studio,
|
|
153
|
+
"seasonName": season_name,
|
|
154
|
+
"seasonYear": season_year,
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
if end_date is not UNSET:
|
|
158
|
+
field_dict["endDate"] = end_date
|
|
159
|
+
if num_segments is not UNSET:
|
|
160
|
+
field_dict["numSegments"] = num_segments
|
|
161
|
+
if num_episodes is not UNSET:
|
|
162
|
+
field_dict["numEpisodes"] = num_episodes
|
|
163
|
+
if characters is not UNSET:
|
|
164
|
+
field_dict["characters"] = characters
|
|
165
|
+
if lists is not UNSET:
|
|
166
|
+
field_dict["lists"] = lists
|
|
167
|
+
|
|
168
|
+
return field_dict
|
|
169
|
+
|
|
170
|
+
@classmethod
|
|
171
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
172
|
+
from ..models.list_ import List
|
|
173
|
+
from ..models.media_character import MediaCharacter
|
|
174
|
+
|
|
175
|
+
d = dict(src_dict)
|
|
176
|
+
id = d.pop("id")
|
|
177
|
+
|
|
178
|
+
anilist_id = d.pop("anilistId")
|
|
179
|
+
|
|
180
|
+
japanese_name = d.pop("japaneseName")
|
|
181
|
+
|
|
182
|
+
romaji_name = d.pop("romajiName")
|
|
183
|
+
|
|
184
|
+
english_name = d.pop("englishName")
|
|
185
|
+
|
|
186
|
+
airing_format = d.pop("airingFormat")
|
|
187
|
+
|
|
188
|
+
airing_status = d.pop("airingStatus")
|
|
189
|
+
|
|
190
|
+
genres = cast(list[str], d.pop("genres"))
|
|
191
|
+
|
|
192
|
+
cover_url = d.pop("coverUrl")
|
|
193
|
+
|
|
194
|
+
banner_url = d.pop("bannerUrl")
|
|
195
|
+
|
|
196
|
+
start_date = isoparse(d.pop("startDate"))
|
|
197
|
+
|
|
198
|
+
category = MediaCategory(d.pop("category"))
|
|
199
|
+
|
|
200
|
+
version = d.pop("version")
|
|
201
|
+
|
|
202
|
+
studio = d.pop("studio")
|
|
203
|
+
|
|
204
|
+
season_name = d.pop("seasonName")
|
|
205
|
+
|
|
206
|
+
season_year = d.pop("seasonYear")
|
|
207
|
+
|
|
208
|
+
def _parse_end_date(data: object) -> datetime.datetime | None | Unset:
|
|
209
|
+
if data is None:
|
|
210
|
+
return data
|
|
211
|
+
if isinstance(data, Unset):
|
|
212
|
+
return data
|
|
213
|
+
try:
|
|
214
|
+
if not isinstance(data, str):
|
|
215
|
+
raise TypeError()
|
|
216
|
+
end_date_type_0 = isoparse(data)
|
|
217
|
+
|
|
218
|
+
return end_date_type_0
|
|
219
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
220
|
+
pass
|
|
221
|
+
return cast(datetime.datetime | None | Unset, data)
|
|
222
|
+
|
|
223
|
+
end_date = _parse_end_date(d.pop("endDate", UNSET))
|
|
224
|
+
|
|
225
|
+
num_segments = d.pop("numSegments", UNSET)
|
|
226
|
+
|
|
227
|
+
num_episodes = d.pop("numEpisodes", UNSET)
|
|
228
|
+
|
|
229
|
+
_characters = d.pop("characters", UNSET)
|
|
230
|
+
characters: list[MediaCharacter] | Unset = UNSET
|
|
231
|
+
if _characters is not UNSET:
|
|
232
|
+
characters = []
|
|
233
|
+
for characters_item_data in _characters:
|
|
234
|
+
characters_item = MediaCharacter.from_dict(characters_item_data)
|
|
235
|
+
|
|
236
|
+
characters.append(characters_item)
|
|
237
|
+
|
|
238
|
+
_lists = d.pop("lists", UNSET)
|
|
239
|
+
lists: list[List] | Unset = UNSET
|
|
240
|
+
if _lists is not UNSET:
|
|
241
|
+
lists = []
|
|
242
|
+
for lists_item_data in _lists:
|
|
243
|
+
lists_item = List.from_dict(lists_item_data)
|
|
244
|
+
|
|
245
|
+
lists.append(lists_item)
|
|
246
|
+
|
|
247
|
+
media = cls(
|
|
248
|
+
id=id,
|
|
249
|
+
anilist_id=anilist_id,
|
|
250
|
+
japanese_name=japanese_name,
|
|
251
|
+
romaji_name=romaji_name,
|
|
252
|
+
english_name=english_name,
|
|
253
|
+
airing_format=airing_format,
|
|
254
|
+
airing_status=airing_status,
|
|
255
|
+
genres=genres,
|
|
256
|
+
cover_url=cover_url,
|
|
257
|
+
banner_url=banner_url,
|
|
258
|
+
start_date=start_date,
|
|
259
|
+
category=category,
|
|
260
|
+
version=version,
|
|
261
|
+
studio=studio,
|
|
262
|
+
season_name=season_name,
|
|
263
|
+
season_year=season_year,
|
|
264
|
+
end_date=end_date,
|
|
265
|
+
num_segments=num_segments,
|
|
266
|
+
num_episodes=num_episodes,
|
|
267
|
+
characters=characters,
|
|
268
|
+
lists=lists,
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
media.additional_properties = d
|
|
272
|
+
return media
|
|
273
|
+
|
|
274
|
+
@property
|
|
275
|
+
def additional_keys(self) -> list[str]:
|
|
276
|
+
return list(self.additional_properties.keys())
|
|
277
|
+
|
|
278
|
+
def __getitem__(self, key: str) -> Any:
|
|
279
|
+
return self.additional_properties[key]
|
|
280
|
+
|
|
281
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
282
|
+
self.additional_properties[key] = value
|
|
283
|
+
|
|
284
|
+
def __delitem__(self, key: str) -> None:
|
|
285
|
+
del self.additional_properties[key]
|
|
286
|
+
|
|
287
|
+
def __contains__(self, key: str) -> bool:
|
|
288
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import TYPE_CHECKING, Any, TypeVar
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..models.media_character_role import MediaCharacterRole
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from ..models.character import Character
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
T = TypeVar("T", bound="MediaCharacter")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@_attrs_define
|
|
19
|
+
class MediaCharacter:
|
|
20
|
+
"""Character appearing in a media with their role
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
character (Character): Anime character
|
|
24
|
+
role (MediaCharacterRole): Character's role in the media Example: MAIN.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
character: Character
|
|
28
|
+
role: MediaCharacterRole
|
|
29
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
30
|
+
|
|
31
|
+
def to_dict(self) -> dict[str, Any]:
|
|
32
|
+
character = self.character.to_dict()
|
|
33
|
+
|
|
34
|
+
role = self.role.value
|
|
35
|
+
|
|
36
|
+
field_dict: dict[str, Any] = {}
|
|
37
|
+
field_dict.update(self.additional_properties)
|
|
38
|
+
field_dict.update(
|
|
39
|
+
{
|
|
40
|
+
"character": character,
|
|
41
|
+
"role": role,
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
return field_dict
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
49
|
+
from ..models.character import Character
|
|
50
|
+
|
|
51
|
+
d = dict(src_dict)
|
|
52
|
+
character = Character.from_dict(d.pop("character"))
|
|
53
|
+
|
|
54
|
+
role = MediaCharacterRole(d.pop("role"))
|
|
55
|
+
|
|
56
|
+
media_character = cls(
|
|
57
|
+
character=character,
|
|
58
|
+
role=role,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
media_character.additional_properties = d
|
|
62
|
+
return media_character
|
|
63
|
+
|
|
64
|
+
@property
|
|
65
|
+
def additional_keys(self) -> list[str]:
|
|
66
|
+
return list(self.additional_properties.keys())
|
|
67
|
+
|
|
68
|
+
def __getitem__(self, key: str) -> Any:
|
|
69
|
+
return self.additional_properties[key]
|
|
70
|
+
|
|
71
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
72
|
+
self.additional_properties[key] = value
|
|
73
|
+
|
|
74
|
+
def __delitem__(self, key: str) -> None:
|
|
75
|
+
del self.additional_properties[key]
|
|
76
|
+
|
|
77
|
+
def __contains__(self, key: str) -> bool:
|
|
78
|
+
return key in self.additional_properties
|