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,215 @@
1
+ """Contains all the data models used in inputs/outputs"""
2
+
3
+ from .api_key import ApiKey
4
+ from .api_key_permission import ApiKeyPermission
5
+ from .auth_user import AuthUser
6
+ from .basic_info import BasicInfo
7
+ from .category_statistic import CategoryStatistic
8
+ from .character import Character
9
+ from .character_input import CharacterInput
10
+ from .character_input_character_role import CharacterInputCharacterRole
11
+ from .character_with_media import CharacterWithMedia
12
+ from .character_with_media_media_appearances_item import CharacterWithMediaMediaAppearancesItem
13
+ from .character_with_media_media_appearances_item_role import (
14
+ CharacterWithMediaMediaAppearancesItemRole,
15
+ )
16
+ from .create_api_key_request import CreateApiKeyRequest
17
+ from .create_api_key_response import CreateApiKeyResponse
18
+ from .deactivate_api_key_request import DeactivateApiKeyRequest
19
+ from .deactivate_api_key_response import DeactivateApiKeyResponse
20
+ from .discord_auth_url_response import DiscordAuthUrlResponse
21
+ from .discord_login_request import DiscordLoginRequest
22
+ from .episode import Episode
23
+ from .episode_create_request import EpisodeCreateRequest
24
+ from .episode_list_response import EpisodeListResponse
25
+ from .episode_update_request import EpisodeUpdateRequest
26
+ from .error import Error
27
+ from .error_errors import ErrorErrors
28
+ from .fetch_media_info_response import FetchMediaInfoResponse
29
+ from .fetch_media_info_type import FetchMediaInfoType
30
+ from .fetch_sentence_context_request import FetchSentenceContextRequest
31
+ from .fetch_sentence_context_response import FetchSentenceContextResponse
32
+ from .get_api_keys_response import GetApiKeysResponse
33
+ from .google_login_request import GoogleLoginRequest
34
+ from .list_ import List
35
+ from .list_add_item_body import ListAddItemBody
36
+ from .list_add_item_response_201 import ListAddItemResponse201
37
+ from .list_create_request import ListCreateRequest
38
+ from .list_create_request_type import ListCreateRequestType
39
+ from .list_create_request_visibility import ListCreateRequestVisibility
40
+ from .list_destroy_response_200 import ListDestroyResponse200
41
+ from .list_index_type import ListIndexType
42
+ from .list_index_visibility import ListIndexVisibility
43
+ from .list_input import ListInput
44
+ from .list_input_list_type import ListInputListType
45
+ from .list_input_list_visibility import ListInputListVisibility
46
+ from .list_remove_item_response_200 import ListRemoveItemResponse200
47
+ from .list_type import ListType
48
+ from .list_update_body import ListUpdateBody
49
+ from .list_update_body_visibility import ListUpdateBodyVisibility
50
+ from .list_update_item_body import ListUpdateItemBody
51
+ from .list_update_item_response_200 import ListUpdateItemResponse200
52
+ from .list_visibility import ListVisibility
53
+ from .list_with_media import ListWithMedia
54
+ from .list_with_media_media_item import ListWithMediaMediaItem
55
+ from .list_with_media_type import ListWithMediaType
56
+ from .list_with_media_visibility import ListWithMediaVisibility
57
+ from .login_request import LoginRequest
58
+ from .login_response import LoginResponse
59
+ from .logout_response import LogoutResponse
60
+ from .media import Media
61
+ from .media_category import MediaCategory
62
+ from .media_character import MediaCharacter
63
+ from .media_character_role import MediaCharacterRole
64
+ from .media_create_request import MediaCreateRequest
65
+ from .media_create_request_category import MediaCreateRequestCategory
66
+ from .media_destroy_response_200 import MediaDestroyResponse200
67
+ from .media_index_category import MediaIndexCategory
68
+ from .media_info_data import MediaInfoData
69
+ from .media_info_path import MediaInfoPath
70
+ from .media_info_stats import MediaInfoStats
71
+ from .media_list_response import MediaListResponse
72
+ from .media_update_request import MediaUpdateRequest
73
+ from .media_update_request_category import MediaUpdateRequestCategory
74
+ from .quota_info import QuotaInfo
75
+ from .quota_info_quota_limit_type_1 import QuotaInfoQuotaLimitType1
76
+ from .register_request import RegisterRequest
77
+ from .register_response import RegisterResponse
78
+ from .register_response_user import RegisterResponseUser
79
+ from .search_health_check_response import SearchHealthCheckResponse
80
+ from .search_multiple_request import SearchMultipleRequest
81
+ from .search_multiple_response import SearchMultipleResponse
82
+ from .search_request import SearchRequest
83
+ from .search_request_content_sort import SearchRequestContentSort
84
+ from .search_request_media_item import SearchRequestMediaItem
85
+ from .search_request_media_item_seasons_item import SearchRequestMediaItemSeasonsItem
86
+ from .search_response import SearchResponse
87
+ from .segment import Segment
88
+ from .segment_create_request import SegmentCreateRequest
89
+ from .segment_create_request_status import SegmentCreateRequestStatus
90
+ from .segment_info import SegmentInfo
91
+ from .segment_list_response import SegmentListResponse
92
+ from .segment_status import SegmentStatus
93
+ from .segment_update_request import SegmentUpdateRequest
94
+ from .segment_update_request_status import SegmentUpdateRequestStatus
95
+ from .seiyuu import Seiyuu
96
+ from .seiyuu_with_roles import SeiyuuWithRoles
97
+ from .seiyuu_with_roles_roles_item import SeiyuuWithRolesRolesItem
98
+ from .seiyuu_with_roles_roles_item_role import SeiyuuWithRolesRolesItemRole
99
+ from .sentence import Sentence
100
+ from .statistic import Statistic
101
+ from .statistic_season_with_episode_hits import StatisticSeasonWithEpisodeHits
102
+ from .statistic_season_with_episode_hits_additional_property import (
103
+ StatisticSeasonWithEpisodeHitsAdditionalProperty,
104
+ )
105
+ from .user_info_response import UserInfoResponse
106
+ from .user_info_response_user import UserInfoResponseUser
107
+ from .user_role import UserRole
108
+ from .word_match import WordMatch
109
+ from .word_match_media import WordMatchMedia
110
+
111
+ __all__ = (
112
+ "ApiKey",
113
+ "ApiKeyPermission",
114
+ "AuthUser",
115
+ "BasicInfo",
116
+ "CategoryStatistic",
117
+ "Character",
118
+ "CharacterInput",
119
+ "CharacterInputCharacterRole",
120
+ "CharacterWithMedia",
121
+ "CharacterWithMediaMediaAppearancesItem",
122
+ "CharacterWithMediaMediaAppearancesItemRole",
123
+ "CreateApiKeyRequest",
124
+ "CreateApiKeyResponse",
125
+ "DeactivateApiKeyRequest",
126
+ "DeactivateApiKeyResponse",
127
+ "DiscordAuthUrlResponse",
128
+ "DiscordLoginRequest",
129
+ "Episode",
130
+ "EpisodeCreateRequest",
131
+ "EpisodeListResponse",
132
+ "EpisodeUpdateRequest",
133
+ "Error",
134
+ "ErrorErrors",
135
+ "FetchMediaInfoResponse",
136
+ "FetchMediaInfoType",
137
+ "FetchSentenceContextRequest",
138
+ "FetchSentenceContextResponse",
139
+ "GetApiKeysResponse",
140
+ "GoogleLoginRequest",
141
+ "List",
142
+ "ListAddItemBody",
143
+ "ListAddItemResponse201",
144
+ "ListCreateRequest",
145
+ "ListCreateRequestType",
146
+ "ListCreateRequestVisibility",
147
+ "ListDestroyResponse200",
148
+ "ListIndexType",
149
+ "ListIndexVisibility",
150
+ "ListInput",
151
+ "ListInputListType",
152
+ "ListInputListVisibility",
153
+ "ListRemoveItemResponse200",
154
+ "ListType",
155
+ "ListUpdateBody",
156
+ "ListUpdateBodyVisibility",
157
+ "ListUpdateItemBody",
158
+ "ListUpdateItemResponse200",
159
+ "ListVisibility",
160
+ "ListWithMedia",
161
+ "ListWithMediaMediaItem",
162
+ "ListWithMediaType",
163
+ "ListWithMediaVisibility",
164
+ "LoginRequest",
165
+ "LoginResponse",
166
+ "LogoutResponse",
167
+ "Media",
168
+ "MediaCategory",
169
+ "MediaCharacter",
170
+ "MediaCharacterRole",
171
+ "MediaCreateRequest",
172
+ "MediaCreateRequestCategory",
173
+ "MediaDestroyResponse200",
174
+ "MediaIndexCategory",
175
+ "MediaInfoData",
176
+ "MediaInfoPath",
177
+ "MediaInfoStats",
178
+ "MediaListResponse",
179
+ "MediaUpdateRequest",
180
+ "MediaUpdateRequestCategory",
181
+ "QuotaInfo",
182
+ "QuotaInfoQuotaLimitType1",
183
+ "RegisterRequest",
184
+ "RegisterResponse",
185
+ "RegisterResponseUser",
186
+ "SearchHealthCheckResponse",
187
+ "SearchMultipleRequest",
188
+ "SearchMultipleResponse",
189
+ "SearchRequest",
190
+ "SearchRequestContentSort",
191
+ "SearchRequestMediaItem",
192
+ "SearchRequestMediaItemSeasonsItem",
193
+ "SearchResponse",
194
+ "Segment",
195
+ "SegmentCreateRequest",
196
+ "SegmentCreateRequestStatus",
197
+ "SegmentInfo",
198
+ "SegmentListResponse",
199
+ "SegmentStatus",
200
+ "SegmentUpdateRequest",
201
+ "SegmentUpdateRequestStatus",
202
+ "Seiyuu",
203
+ "SeiyuuWithRoles",
204
+ "SeiyuuWithRolesRolesItem",
205
+ "SeiyuuWithRolesRolesItemRole",
206
+ "Sentence",
207
+ "Statistic",
208
+ "StatisticSeasonWithEpisodeHits",
209
+ "StatisticSeasonWithEpisodeHitsAdditionalProperty",
210
+ "UserInfoResponse",
211
+ "UserInfoResponseUser",
212
+ "UserRole",
213
+ "WordMatch",
214
+ "WordMatchMedia",
215
+ )
@@ -0,0 +1,118 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime
4
+ from collections.abc import Mapping
5
+ from typing import TYPE_CHECKING, Any, TypeVar
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
+ if TYPE_CHECKING:
12
+ from ..models.api_key_permission import ApiKeyPermission
13
+
14
+
15
+ T = TypeVar("T", bound="ApiKey")
16
+
17
+
18
+ @_attrs_define
19
+ class ApiKey:
20
+ """API key information
21
+
22
+ Attributes:
23
+ id (int): API key ID
24
+ name (str): API key name
25
+ is_active (bool): Whether the API key is active
26
+ created_at (datetime.datetime): Creation timestamp
27
+ hint (str): API key hint (last 4 characters)
28
+ permissions (list[ApiKeyPermission]): API key permissions
29
+ """
30
+
31
+ id: int
32
+ name: str
33
+ is_active: bool
34
+ created_at: datetime.datetime
35
+ hint: str
36
+ permissions: list[ApiKeyPermission]
37
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
38
+
39
+ def to_dict(self) -> dict[str, Any]:
40
+ id = self.id
41
+
42
+ name = self.name
43
+
44
+ is_active = self.is_active
45
+
46
+ created_at = self.created_at.isoformat()
47
+
48
+ hint = self.hint
49
+
50
+ permissions = []
51
+ for permissions_item_data in self.permissions:
52
+ permissions_item = permissions_item_data.to_dict()
53
+ permissions.append(permissions_item)
54
+
55
+ field_dict: dict[str, Any] = {}
56
+ field_dict.update(self.additional_properties)
57
+ field_dict.update(
58
+ {
59
+ "id": id,
60
+ "name": name,
61
+ "isActive": is_active,
62
+ "createdAt": created_at,
63
+ "hint": hint,
64
+ "permissions": permissions,
65
+ }
66
+ )
67
+
68
+ return field_dict
69
+
70
+ @classmethod
71
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
72
+ from ..models.api_key_permission import ApiKeyPermission
73
+
74
+ d = dict(src_dict)
75
+ id = d.pop("id")
76
+
77
+ name = d.pop("name")
78
+
79
+ is_active = d.pop("isActive")
80
+
81
+ created_at = isoparse(d.pop("createdAt"))
82
+
83
+ hint = d.pop("hint")
84
+
85
+ permissions = []
86
+ _permissions = d.pop("permissions")
87
+ for permissions_item_data in _permissions:
88
+ permissions_item = ApiKeyPermission.from_dict(permissions_item_data)
89
+
90
+ permissions.append(permissions_item)
91
+
92
+ api_key = cls(
93
+ id=id,
94
+ name=name,
95
+ is_active=is_active,
96
+ created_at=created_at,
97
+ hint=hint,
98
+ permissions=permissions,
99
+ )
100
+
101
+ api_key.additional_properties = d
102
+ return api_key
103
+
104
+ @property
105
+ def additional_keys(self) -> list[str]:
106
+ return list(self.additional_properties.keys())
107
+
108
+ def __getitem__(self, key: str) -> Any:
109
+ return self.additional_properties[key]
110
+
111
+ def __setitem__(self, key: str, value: Any) -> None:
112
+ self.additional_properties[key] = value
113
+
114
+ def __delitem__(self, key: str) -> None:
115
+ del self.additional_properties[key]
116
+
117
+ def __contains__(self, key: str) -> bool:
118
+ 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
+ T = TypeVar("T", bound="ApiKeyPermission")
10
+
11
+
12
+ @_attrs_define
13
+ class ApiKeyPermission:
14
+ """API key permission
15
+
16
+ Attributes:
17
+ id (int): Permission ID
18
+ name (str): Permission name
19
+ """
20
+
21
+ id: int
22
+ name: str
23
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
24
+
25
+ def to_dict(self) -> dict[str, Any]:
26
+ id = self.id
27
+
28
+ name = self.name
29
+
30
+ field_dict: dict[str, Any] = {}
31
+ field_dict.update(self.additional_properties)
32
+ field_dict.update(
33
+ {
34
+ "id": id,
35
+ "name": name,
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
+ id = d.pop("id")
45
+
46
+ name = d.pop("name")
47
+
48
+ api_key_permission = cls(
49
+ id=id,
50
+ name=name,
51
+ )
52
+
53
+ api_key_permission.additional_properties = d
54
+ return api_key_permission
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,107 @@
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 ..types import UNSET, Unset
10
+
11
+ if TYPE_CHECKING:
12
+ from ..models.user_role import UserRole
13
+
14
+
15
+ T = TypeVar("T", bound="AuthUser")
16
+
17
+
18
+ @_attrs_define
19
+ class AuthUser:
20
+ """Authenticated user information
21
+
22
+ Attributes:
23
+ id (int | Unset): User ID
24
+ username (str | Unset): User's display name
25
+ email (str | Unset): User's email address
26
+ roles (list[UserRole] | Unset): User's roles
27
+ """
28
+
29
+ id: int | Unset = UNSET
30
+ username: str | Unset = UNSET
31
+ email: str | Unset = UNSET
32
+ roles: list[UserRole] | Unset = UNSET
33
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
34
+
35
+ def to_dict(self) -> dict[str, Any]:
36
+ id = self.id
37
+
38
+ username = self.username
39
+
40
+ email = self.email
41
+
42
+ roles: list[dict[str, Any]] | Unset = UNSET
43
+ if not isinstance(self.roles, Unset):
44
+ roles = []
45
+ for roles_item_data in self.roles:
46
+ roles_item = roles_item_data.to_dict()
47
+ roles.append(roles_item)
48
+
49
+ field_dict: dict[str, Any] = {}
50
+ field_dict.update(self.additional_properties)
51
+ field_dict.update({})
52
+ if id is not UNSET:
53
+ field_dict["id"] = id
54
+ if username is not UNSET:
55
+ field_dict["username"] = username
56
+ if email is not UNSET:
57
+ field_dict["email"] = email
58
+ if roles is not UNSET:
59
+ field_dict["roles"] = roles
60
+
61
+ return field_dict
62
+
63
+ @classmethod
64
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
65
+ from ..models.user_role import UserRole
66
+
67
+ d = dict(src_dict)
68
+ id = d.pop("id", UNSET)
69
+
70
+ username = d.pop("username", UNSET)
71
+
72
+ email = d.pop("email", UNSET)
73
+
74
+ _roles = d.pop("roles", UNSET)
75
+ roles: list[UserRole] | Unset = UNSET
76
+ if _roles is not UNSET:
77
+ roles = []
78
+ for roles_item_data in _roles:
79
+ roles_item = UserRole.from_dict(roles_item_data)
80
+
81
+ roles.append(roles_item)
82
+
83
+ auth_user = cls(
84
+ id=id,
85
+ username=username,
86
+ email=email,
87
+ roles=roles,
88
+ )
89
+
90
+ auth_user.additional_properties = d
91
+ return auth_user
92
+
93
+ @property
94
+ def additional_keys(self) -> list[str]:
95
+ return list(self.additional_properties.keys())
96
+
97
+ def __getitem__(self, key: str) -> Any:
98
+ return self.additional_properties[key]
99
+
100
+ def __setitem__(self, key: str, value: Any) -> None:
101
+ self.additional_properties[key] = value
102
+
103
+ def __delitem__(self, key: str) -> None:
104
+ del self.additional_properties[key]
105
+
106
+ def __contains__(self, key: str) -> bool:
107
+ return key in self.additional_properties
@@ -0,0 +1,132 @@
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="BasicInfo")
12
+
13
+
14
+ @_attrs_define
15
+ class BasicInfo:
16
+ """Basic anime/media information included in search results
17
+
18
+ Attributes:
19
+ id_anime (int): Unique identifier for the anime/media Example: 110316.
20
+ name_anime_romaji (str): Romaji transliteration of the anime name Example: Steins;Gate.
21
+ episode (int): Episode number where the segment appears Example: 1.
22
+ season (int): Season number where the segment appears Example: 1.
23
+ category (int): Media category (1=Anime, 2=Unknown, 3=J-Drama, 4=Audiobook) Example: 1.
24
+ name_anime_en (str | Unset): English translation of the anime name Example: Steins;Gate.
25
+ name_anime_jp (str | Unset): Original Japanese name of the anime Example: シュタインズ・ゲート.
26
+ cover (str | Unset): URL to the cover image Example: https://example.com/media/anime/steins-gate/cover.jpg.
27
+ banner (str | Unset): URL to the banner image Example: https://example.com/media/anime/steins-gate/banner.jpg.
28
+ """
29
+
30
+ id_anime: int
31
+ name_anime_romaji: str
32
+ episode: int
33
+ season: int
34
+ category: int
35
+ name_anime_en: str | Unset = UNSET
36
+ name_anime_jp: str | Unset = UNSET
37
+ cover: str | Unset = UNSET
38
+ banner: str | Unset = UNSET
39
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
40
+
41
+ def to_dict(self) -> dict[str, Any]:
42
+ id_anime = self.id_anime
43
+
44
+ name_anime_romaji = self.name_anime_romaji
45
+
46
+ episode = self.episode
47
+
48
+ season = self.season
49
+
50
+ category = self.category
51
+
52
+ name_anime_en = self.name_anime_en
53
+
54
+ name_anime_jp = self.name_anime_jp
55
+
56
+ cover = self.cover
57
+
58
+ banner = self.banner
59
+
60
+ field_dict: dict[str, Any] = {}
61
+ field_dict.update(self.additional_properties)
62
+ field_dict.update(
63
+ {
64
+ "id_anime": id_anime,
65
+ "name_anime_romaji": name_anime_romaji,
66
+ "episode": episode,
67
+ "season": season,
68
+ "category": category,
69
+ }
70
+ )
71
+ if name_anime_en is not UNSET:
72
+ field_dict["name_anime_en"] = name_anime_en
73
+ if name_anime_jp is not UNSET:
74
+ field_dict["name_anime_jp"] = name_anime_jp
75
+ if cover is not UNSET:
76
+ field_dict["cover"] = cover
77
+ if banner is not UNSET:
78
+ field_dict["banner"] = banner
79
+
80
+ return field_dict
81
+
82
+ @classmethod
83
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
84
+ d = dict(src_dict)
85
+ id_anime = d.pop("id_anime")
86
+
87
+ name_anime_romaji = d.pop("name_anime_romaji")
88
+
89
+ episode = d.pop("episode")
90
+
91
+ season = d.pop("season")
92
+
93
+ category = d.pop("category")
94
+
95
+ name_anime_en = d.pop("name_anime_en", UNSET)
96
+
97
+ name_anime_jp = d.pop("name_anime_jp", UNSET)
98
+
99
+ cover = d.pop("cover", UNSET)
100
+
101
+ banner = d.pop("banner", UNSET)
102
+
103
+ basic_info = cls(
104
+ id_anime=id_anime,
105
+ name_anime_romaji=name_anime_romaji,
106
+ episode=episode,
107
+ season=season,
108
+ category=category,
109
+ name_anime_en=name_anime_en,
110
+ name_anime_jp=name_anime_jp,
111
+ cover=cover,
112
+ banner=banner,
113
+ )
114
+
115
+ basic_info.additional_properties = d
116
+ return basic_info
117
+
118
+ @property
119
+ def additional_keys(self) -> list[str]:
120
+ return list(self.additional_properties.keys())
121
+
122
+ def __getitem__(self, key: str) -> Any:
123
+ return self.additional_properties[key]
124
+
125
+ def __setitem__(self, key: str, value: Any) -> None:
126
+ self.additional_properties[key] = value
127
+
128
+ def __delitem__(self, key: str) -> None:
129
+ del self.additional_properties[key]
130
+
131
+ def __contains__(self, key: str) -> bool:
132
+ return key in self.additional_properties