anilibria-api-client 0.1.7__py3-none-any.whl → 0.1.8__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.
- anilibria_api_client/__init__.py +28 -28
- anilibria_api_client/api_client.py +58 -58
- anilibria_api_client/base_api/api_class.py +283 -283
- anilibria_api_client/exceptions.py +6 -6
- anilibria_api_client/helper.py +100 -100
- anilibria_api_client/methods/__init__.py +5 -5
- anilibria_api_client/methods/_helper.py +225 -225
- anilibria_api_client/methods/_libria.py +9 -9
- anilibria_api_client/methods/accounts.py +348 -348
- anilibria_api_client/methods/ads.py +22 -22
- anilibria_api_client/methods/anime.py +669 -669
- anilibria_api_client/methods/app.py +33 -33
- anilibria_api_client/methods/media.py +44 -44
- anilibria_api_client/methods/teams.py +60 -60
- anilibria_api_client/models.py +63 -63
- anilibria_api_client/types.py +55 -55
- {anilibria_api_client-0.1.7.dist-info → anilibria_api_client-0.1.8.dist-info}/METADATA +83 -71
- anilibria_api_client-0.1.8.dist-info/RECORD +21 -0
- {anilibria_api_client-0.1.7.dist-info → anilibria_api_client-0.1.8.dist-info}/licenses/LICENSE +21 -21
- anilibria_api_client-0.1.7.dist-info/RECORD +0 -21
- {anilibria_api_client-0.1.7.dist-info → anilibria_api_client-0.1.8.dist-info}/WHEEL +0 -0
- {anilibria_api_client-0.1.7.dist-info → anilibria_api_client-0.1.8.dist-info}/top_level.txt +0 -0
@@ -1,349 +1,349 @@
|
|
1
|
-
from ._libria import BaseMethod
|
2
|
-
from ..models import TimeCode, ReleaseCollection
|
3
|
-
from ._helper import validate_collection, validated_json_collection
|
4
|
-
from typing import Optional, List
|
5
|
-
|
6
|
-
|
7
|
-
class AccountsMethod(BaseMethod):
|
8
|
-
async def otp_get(
|
9
|
-
self,
|
10
|
-
device_id: str
|
11
|
-
):
|
12
|
-
"""
|
13
|
-
Запрашиваем новый одноразовый пароль
|
14
|
-
|
15
|
-
:param device_id: ID девайса (необходим)
|
16
|
-
"""
|
17
|
-
|
18
|
-
data = {
|
19
|
-
'device_id': device_id
|
20
|
-
}
|
21
|
-
|
22
|
-
return await self._api.post("/accounts/otp/get", json_data=data)
|
23
|
-
|
24
|
-
async def otp_accept(
|
25
|
-
self,
|
26
|
-
code: int
|
27
|
-
):
|
28
|
-
"""
|
29
|
-
Присоединяем пользователя к выданному одноразовому паролю
|
30
|
-
|
31
|
-
:param code: Код девайса (необходим)
|
32
|
-
"""
|
33
|
-
|
34
|
-
data = {
|
35
|
-
'code': code
|
36
|
-
}
|
37
|
-
|
38
|
-
return await self._api.post("/accounts/otp/accept", json_data=data)
|
39
|
-
|
40
|
-
async def otp_login(
|
41
|
-
self,
|
42
|
-
code: int,
|
43
|
-
device_id: str
|
44
|
-
):
|
45
|
-
"""
|
46
|
-
Авторизуемся по выданному одноразовому паролю
|
47
|
-
|
48
|
-
:param code: Код девайса (необходим)
|
49
|
-
:param device_id: ID девайса (необходим)
|
50
|
-
"""
|
51
|
-
|
52
|
-
data = {
|
53
|
-
'code': code,
|
54
|
-
'device_id': device_id
|
55
|
-
}
|
56
|
-
|
57
|
-
return await self._api.post("/accounts/otp/login", json_data=data)
|
58
|
-
|
59
|
-
async def users_auth_login(
|
60
|
-
self,
|
61
|
-
login: str,
|
62
|
-
password: str,
|
63
|
-
):
|
64
|
-
"""
|
65
|
-
Авторизация пользователя по логину и паролю. Создание сессии пользователя, выдача токена авторизации для использования в cookies или в Bearer Token
|
66
|
-
|
67
|
-
:param login: Логин аккаунта (необходим)
|
68
|
-
:param password: Пароль аккаунта (необходим)
|
69
|
-
"""
|
70
|
-
|
71
|
-
data = {
|
72
|
-
"login": login,
|
73
|
-
"password": password
|
74
|
-
}
|
75
|
-
|
76
|
-
return await self._api.post("/accounts/users/auth/login", json_data=data)
|
77
|
-
|
78
|
-
async def users_auth_logout(
|
79
|
-
self
|
80
|
-
):
|
81
|
-
"""
|
82
|
-
Деавторизовать пользователя
|
83
|
-
"""
|
84
|
-
return await self._api.post("/accounts/users/auth/login")
|
85
|
-
|
86
|
-
async def users_auth_social_login(
|
87
|
-
self,
|
88
|
-
provider: str,
|
89
|
-
):
|
90
|
-
"""
|
91
|
-
Позволяет авторизовать пользователя через некоторые социальные сети
|
92
|
-
|
93
|
-
:param provider: Провайдер социальной сети vk, google, patreon, discord (необходим)
|
94
|
-
"""
|
95
|
-
return await self._api.get(f"/accounts/users/auth/social/{provider}/login")
|
96
|
-
|
97
|
-
async def users_auth_social_authenticate(
|
98
|
-
self,
|
99
|
-
state: str
|
100
|
-
):
|
101
|
-
"""
|
102
|
-
Позволяет аутентифицировать авторизованного через социальную сеть пользователя
|
103
|
-
|
104
|
-
:param state: Ключ аутентификации users_auth_social_login (необходим)
|
105
|
-
"""
|
106
|
-
query = {
|
107
|
-
"state": state
|
108
|
-
}
|
109
|
-
|
110
|
-
return await self._api.get("/accounts/users/auth/social/authenticate", params=query)
|
111
|
-
|
112
|
-
async def users_auth_password_forget(
|
113
|
-
self,
|
114
|
-
email: str
|
115
|
-
):
|
116
|
-
"""
|
117
|
-
Отправление ссылки на восстановление забытого пароля
|
118
|
-
|
119
|
-
:param email: Email аккаунта
|
120
|
-
"""
|
121
|
-
|
122
|
-
data = {
|
123
|
-
"email": email
|
124
|
-
}
|
125
|
-
|
126
|
-
return await self._api.post("/accounts/users/auth/password/forget", json_data=data)
|
127
|
-
|
128
|
-
async def users_auth_password_reset(
|
129
|
-
self,
|
130
|
-
token: str,
|
131
|
-
password: str,
|
132
|
-
password_confirmation: str
|
133
|
-
):
|
134
|
-
"""
|
135
|
-
Сброс и установка нового пароля
|
136
|
-
|
137
|
-
:param token: Токен с email
|
138
|
-
:param password: Пароль
|
139
|
-
:param password_confirmation: Подтверждение пароля
|
140
|
-
"""
|
141
|
-
|
142
|
-
data = {
|
143
|
-
"token": token,
|
144
|
-
"password": password,
|
145
|
-
"password_confirmation": password_confirmation
|
146
|
-
}
|
147
|
-
|
148
|
-
return await self._api.post("/accounts/users/auth/password/reset", json_data=data)
|
149
|
-
|
150
|
-
async def users_me_collections_references_age_ratings(
|
151
|
-
self
|
152
|
-
):
|
153
|
-
"""
|
154
|
-
Возвращает список возрастных рейтингов в коллекциях текущего пользователя (auth need)
|
155
|
-
"""
|
156
|
-
|
157
|
-
return await self._api.get("/accounts/users/me/collections/references/age-ratings")
|
158
|
-
|
159
|
-
async def users_me_collections_references_genres(
|
160
|
-
self
|
161
|
-
):
|
162
|
-
"""
|
163
|
-
Возвращает список жанров в коллекциях текущего пользователя (auth need)
|
164
|
-
"""
|
165
|
-
|
166
|
-
return await self._api.get("/accounts/users/me/collections/references/genres")
|
167
|
-
|
168
|
-
async def users_me_collections_references_types(
|
169
|
-
self
|
170
|
-
):
|
171
|
-
"""
|
172
|
-
Возвращает список типов в коллекциях текущего пользователя (auth need)
|
173
|
-
"""
|
174
|
-
|
175
|
-
return await self._api.get("/accounts/users/me/collections/references/types")
|
176
|
-
|
177
|
-
async def users_me_collections_references_years(
|
178
|
-
self
|
179
|
-
):
|
180
|
-
"""
|
181
|
-
Возвращает список годов в коллекциях текущего пользователя (auth need)
|
182
|
-
"""
|
183
|
-
|
184
|
-
return await self._api.get("/accounts/users/me/collections/references/years")
|
185
|
-
|
186
|
-
async def users_me_collections_ids(
|
187
|
-
self
|
188
|
-
):
|
189
|
-
"""
|
190
|
-
Возвращает данные по идентификаторам релизов и типов коллекций авторизованного пользователя
|
191
|
-
"""
|
192
|
-
return await self._api.get("/accounts/users/me/collections/ids")
|
193
|
-
|
194
|
-
async def users_me_collections_releases_get(
|
195
|
-
self,
|
196
|
-
release_collection: ReleaseCollection
|
197
|
-
):
|
198
|
-
"""
|
199
|
-
Возвращает данные по релизам из определенной коллекции авторизованного пользователя
|
200
|
-
|
201
|
-
Args:
|
202
|
-
release_collection: тело ReleaseCollection
|
203
|
-
"""
|
204
|
-
params = {
|
205
|
-
'page': release_collection.page,
|
206
|
-
'limit': release_collection.limit,
|
207
|
-
'type_of_collection': release_collection.type_of_collection.value,
|
208
|
-
'include': release_collection.include,
|
209
|
-
'exclude': release_collection.exclude
|
210
|
-
}
|
211
|
-
|
212
|
-
coll = await validate_collection(params=release_collection)
|
213
|
-
final_params = {**params, **coll}
|
214
|
-
|
215
|
-
return await self._api.get("/accounts/users/me/collections/releases", params=final_params)
|
216
|
-
|
217
|
-
async def users_me_collections_releases_post(
|
218
|
-
self,
|
219
|
-
release_collection: ReleaseCollection
|
220
|
-
):
|
221
|
-
"""
|
222
|
-
Возвращает данные по релизам из определенной коллекции авторизованного пользователя
|
223
|
-
|
224
|
-
Args:
|
225
|
-
release_collection: тело ReleaseCollection
|
226
|
-
"""
|
227
|
-
json = {
|
228
|
-
'page': release_collection.page,
|
229
|
-
'limit': release_collection.limit,
|
230
|
-
'type_of_collection': release_collection.type_of_collection.value,
|
231
|
-
'include': release_collection.include,
|
232
|
-
'exclude': release_collection.exclude
|
233
|
-
}
|
234
|
-
|
235
|
-
coll = await validated_json_collection(release=release_collection)
|
236
|
-
final_json = {**json, **coll}
|
237
|
-
|
238
|
-
return await self._api.post("/accounts/users/me/collections/releases", json_data=final_json)
|
239
|
-
|
240
|
-
async def users_me_collections_add(
|
241
|
-
self,
|
242
|
-
release_ids: List[int]
|
243
|
-
):
|
244
|
-
"""
|
245
|
-
Добавляет релизы в избранное авторизованного пользователя
|
246
|
-
|
247
|
-
:param release_id: ID релиза
|
248
|
-
"""
|
249
|
-
params = [{"release_id": a} for a in release_ids]
|
250
|
-
|
251
|
-
return await self._api.post("/accounts/users/me/favorites", json_data=params)
|
252
|
-
|
253
|
-
async def users_me_collections_delete(
|
254
|
-
self,
|
255
|
-
release_ids: List[int]
|
256
|
-
):
|
257
|
-
"""
|
258
|
-
Удаляет релизы из избранного авторизованного пользователя
|
259
|
-
|
260
|
-
:param release_id: ID релиза
|
261
|
-
"""
|
262
|
-
params = [{"release_id": a} for a in release_ids]
|
263
|
-
|
264
|
-
return await self._api.delete("/accounts/users/me/favorites", json_data=params)
|
265
|
-
|
266
|
-
async def users_me_profile(
|
267
|
-
self,
|
268
|
-
include: Optional[str] = None,
|
269
|
-
exclude: Optional[str] = None
|
270
|
-
):
|
271
|
-
"""
|
272
|
-
Возвращает данные профиля авторизованного пользователя (auth need)
|
273
|
-
|
274
|
-
:param include: Опционально. Список включаемых полей. Через запятую или множественные параметры. Поддерживается вложенность через точку. Example : id,type.genres
|
275
|
-
:param exclude: Опционально. Список исключаемых полей. Через запятую или множественные параметры. Поддерживается вложенность через точку. Приоритет над include Example : poster,description
|
276
|
-
"""
|
277
|
-
|
278
|
-
query = {
|
279
|
-
'include': include,
|
280
|
-
'exclude': exclude
|
281
|
-
}
|
282
|
-
|
283
|
-
return await self._api.get("/accounts/users/me/profile", params=query)
|
284
|
-
|
285
|
-
async def users_me_views_history(
|
286
|
-
self,
|
287
|
-
page: Optional[int] = None,
|
288
|
-
limit: Optional[int] = None,
|
289
|
-
include: Optional[str] = None,
|
290
|
-
exclude: Optional[str] = None
|
291
|
-
):
|
292
|
-
"""
|
293
|
-
Возвращает историю просмотров эпизодов авторизованного пользователя
|
294
|
-
|
295
|
-
Args:
|
296
|
-
page: Опционально. Номер страницы
|
297
|
-
limit: Опционально. Лимит на страницу
|
298
|
-
include: Опционально. Список включаемых полей. Через запятую или множественные параметры. Поддерживается вложенность через точку.
|
299
|
-
exclude: Опционально. Список исключаемых полей. Через запятую или множественные параметры. Поддерживается вложенность через точку. Приоритет над include
|
300
|
-
"""
|
301
|
-
params = {
|
302
|
-
"page": page,
|
303
|
-
"limit": limit,
|
304
|
-
"include": include,
|
305
|
-
"exclude": exclude
|
306
|
-
}
|
307
|
-
return await self._api.get("/accounts/users/me/views/history", params=params)
|
308
|
-
|
309
|
-
async def users_me_views_timecodes(
|
310
|
-
self,
|
311
|
-
since: Optional[str]
|
312
|
-
):
|
313
|
-
"""
|
314
|
-
Возвращает таймкоды по прогрессу просмотренных эпизодов
|
315
|
-
|
316
|
-
:param since: Опционально. Возвращает только таймкоды, которые были добавлены после указанного времени (в iso формате). Example: 2025-05-12T07:20:50.52Z
|
317
|
-
"""
|
318
|
-
params = {
|
319
|
-
"since": since
|
320
|
-
}
|
321
|
-
return await self._api.get("/accounts/users/me/views/timecodes", params=params)
|
322
|
-
|
323
|
-
async def users_me_views_timecodes_update(
|
324
|
-
self,
|
325
|
-
timecode_list: List[TimeCode]
|
326
|
-
):
|
327
|
-
"""
|
328
|
-
Обновляет таймкоды просмотренных эпизодов
|
329
|
-
|
330
|
-
:param timecode_list: Лист из обьектов TimeCode. Example: [TimeCode(...)]
|
331
|
-
"""
|
332
|
-
json = [timecode.model_dump(mode='json') for timecode in timecode_list]
|
333
|
-
|
334
|
-
return await self._api.post("/accounts/users/me/views/timecodes", json_data=json)
|
335
|
-
|
336
|
-
async def users_me_views_timecodes_delete(
|
337
|
-
self,
|
338
|
-
episode_id_list: List[str]
|
339
|
-
):
|
340
|
-
"""
|
341
|
-
Удаляет данные по таймкодам просмотров для указанных эпизодов
|
342
|
-
|
343
|
-
:param episode_id_list: Лист из episode_id. Example: ["id", "id"]
|
344
|
-
"""
|
345
|
-
list_ = []
|
346
|
-
for episode in episode_id_list:
|
347
|
-
list_.append({"release_episode_id": episode})
|
348
|
-
|
1
|
+
from ._libria import BaseMethod
|
2
|
+
from ..models import TimeCode, ReleaseCollection
|
3
|
+
from ._helper import validate_collection, validated_json_collection
|
4
|
+
from typing import Optional, List
|
5
|
+
|
6
|
+
|
7
|
+
class AccountsMethod(BaseMethod):
|
8
|
+
async def otp_get(
|
9
|
+
self,
|
10
|
+
device_id: str
|
11
|
+
):
|
12
|
+
"""
|
13
|
+
Запрашиваем новый одноразовый пароль
|
14
|
+
|
15
|
+
:param device_id: ID девайса (необходим)
|
16
|
+
"""
|
17
|
+
|
18
|
+
data = {
|
19
|
+
'device_id': device_id
|
20
|
+
}
|
21
|
+
|
22
|
+
return await self._api.post("/accounts/otp/get", json_data=data)
|
23
|
+
|
24
|
+
async def otp_accept(
|
25
|
+
self,
|
26
|
+
code: int
|
27
|
+
):
|
28
|
+
"""
|
29
|
+
Присоединяем пользователя к выданному одноразовому паролю
|
30
|
+
|
31
|
+
:param code: Код девайса (необходим)
|
32
|
+
"""
|
33
|
+
|
34
|
+
data = {
|
35
|
+
'code': code
|
36
|
+
}
|
37
|
+
|
38
|
+
return await self._api.post("/accounts/otp/accept", json_data=data)
|
39
|
+
|
40
|
+
async def otp_login(
|
41
|
+
self,
|
42
|
+
code: int,
|
43
|
+
device_id: str
|
44
|
+
):
|
45
|
+
"""
|
46
|
+
Авторизуемся по выданному одноразовому паролю
|
47
|
+
|
48
|
+
:param code: Код девайса (необходим)
|
49
|
+
:param device_id: ID девайса (необходим)
|
50
|
+
"""
|
51
|
+
|
52
|
+
data = {
|
53
|
+
'code': code,
|
54
|
+
'device_id': device_id
|
55
|
+
}
|
56
|
+
|
57
|
+
return await self._api.post("/accounts/otp/login", json_data=data)
|
58
|
+
|
59
|
+
async def users_auth_login(
|
60
|
+
self,
|
61
|
+
login: str,
|
62
|
+
password: str,
|
63
|
+
):
|
64
|
+
"""
|
65
|
+
Авторизация пользователя по логину и паролю. Создание сессии пользователя, выдача токена авторизации для использования в cookies или в Bearer Token
|
66
|
+
|
67
|
+
:param login: Логин аккаунта (необходим)
|
68
|
+
:param password: Пароль аккаунта (необходим)
|
69
|
+
"""
|
70
|
+
|
71
|
+
data = {
|
72
|
+
"login": login,
|
73
|
+
"password": password
|
74
|
+
}
|
75
|
+
|
76
|
+
return await self._api.post("/accounts/users/auth/login", json_data=data)
|
77
|
+
|
78
|
+
async def users_auth_logout(
|
79
|
+
self
|
80
|
+
):
|
81
|
+
"""
|
82
|
+
Деавторизовать пользователя
|
83
|
+
"""
|
84
|
+
return await self._api.post("/accounts/users/auth/login")
|
85
|
+
|
86
|
+
async def users_auth_social_login(
|
87
|
+
self,
|
88
|
+
provider: str,
|
89
|
+
):
|
90
|
+
"""
|
91
|
+
Позволяет авторизовать пользователя через некоторые социальные сети
|
92
|
+
|
93
|
+
:param provider: Провайдер социальной сети vk, google, patreon, discord (необходим)
|
94
|
+
"""
|
95
|
+
return await self._api.get(f"/accounts/users/auth/social/{provider}/login")
|
96
|
+
|
97
|
+
async def users_auth_social_authenticate(
|
98
|
+
self,
|
99
|
+
state: str
|
100
|
+
):
|
101
|
+
"""
|
102
|
+
Позволяет аутентифицировать авторизованного через социальную сеть пользователя
|
103
|
+
|
104
|
+
:param state: Ключ аутентификации users_auth_social_login (необходим)
|
105
|
+
"""
|
106
|
+
query = {
|
107
|
+
"state": state
|
108
|
+
}
|
109
|
+
|
110
|
+
return await self._api.get("/accounts/users/auth/social/authenticate", params=query)
|
111
|
+
|
112
|
+
async def users_auth_password_forget(
|
113
|
+
self,
|
114
|
+
email: str
|
115
|
+
):
|
116
|
+
"""
|
117
|
+
Отправление ссылки на восстановление забытого пароля
|
118
|
+
|
119
|
+
:param email: Email аккаунта
|
120
|
+
"""
|
121
|
+
|
122
|
+
data = {
|
123
|
+
"email": email
|
124
|
+
}
|
125
|
+
|
126
|
+
return await self._api.post("/accounts/users/auth/password/forget", json_data=data)
|
127
|
+
|
128
|
+
async def users_auth_password_reset(
|
129
|
+
self,
|
130
|
+
token: str,
|
131
|
+
password: str,
|
132
|
+
password_confirmation: str
|
133
|
+
):
|
134
|
+
"""
|
135
|
+
Сброс и установка нового пароля
|
136
|
+
|
137
|
+
:param token: Токен с email
|
138
|
+
:param password: Пароль
|
139
|
+
:param password_confirmation: Подтверждение пароля
|
140
|
+
"""
|
141
|
+
|
142
|
+
data = {
|
143
|
+
"token": token,
|
144
|
+
"password": password,
|
145
|
+
"password_confirmation": password_confirmation
|
146
|
+
}
|
147
|
+
|
148
|
+
return await self._api.post("/accounts/users/auth/password/reset", json_data=data)
|
149
|
+
|
150
|
+
async def users_me_collections_references_age_ratings(
|
151
|
+
self
|
152
|
+
):
|
153
|
+
"""
|
154
|
+
Возвращает список возрастных рейтингов в коллекциях текущего пользователя (auth need)
|
155
|
+
"""
|
156
|
+
|
157
|
+
return await self._api.get("/accounts/users/me/collections/references/age-ratings")
|
158
|
+
|
159
|
+
async def users_me_collections_references_genres(
|
160
|
+
self
|
161
|
+
):
|
162
|
+
"""
|
163
|
+
Возвращает список жанров в коллекциях текущего пользователя (auth need)
|
164
|
+
"""
|
165
|
+
|
166
|
+
return await self._api.get("/accounts/users/me/collections/references/genres")
|
167
|
+
|
168
|
+
async def users_me_collections_references_types(
|
169
|
+
self
|
170
|
+
):
|
171
|
+
"""
|
172
|
+
Возвращает список типов в коллекциях текущего пользователя (auth need)
|
173
|
+
"""
|
174
|
+
|
175
|
+
return await self._api.get("/accounts/users/me/collections/references/types")
|
176
|
+
|
177
|
+
async def users_me_collections_references_years(
|
178
|
+
self
|
179
|
+
):
|
180
|
+
"""
|
181
|
+
Возвращает список годов в коллекциях текущего пользователя (auth need)
|
182
|
+
"""
|
183
|
+
|
184
|
+
return await self._api.get("/accounts/users/me/collections/references/years")
|
185
|
+
|
186
|
+
async def users_me_collections_ids(
|
187
|
+
self
|
188
|
+
):
|
189
|
+
"""
|
190
|
+
Возвращает данные по идентификаторам релизов и типов коллекций авторизованного пользователя
|
191
|
+
"""
|
192
|
+
return await self._api.get("/accounts/users/me/collections/ids")
|
193
|
+
|
194
|
+
async def users_me_collections_releases_get(
|
195
|
+
self,
|
196
|
+
release_collection: ReleaseCollection
|
197
|
+
):
|
198
|
+
"""
|
199
|
+
Возвращает данные по релизам из определенной коллекции авторизованного пользователя
|
200
|
+
|
201
|
+
Args:
|
202
|
+
release_collection: тело ReleaseCollection
|
203
|
+
"""
|
204
|
+
params = {
|
205
|
+
'page': release_collection.page,
|
206
|
+
'limit': release_collection.limit,
|
207
|
+
'type_of_collection': release_collection.type_of_collection.value,
|
208
|
+
'include': release_collection.include,
|
209
|
+
'exclude': release_collection.exclude
|
210
|
+
}
|
211
|
+
|
212
|
+
coll = await validate_collection(params=release_collection)
|
213
|
+
final_params = {**params, **coll}
|
214
|
+
|
215
|
+
return await self._api.get("/accounts/users/me/collections/releases", params=final_params)
|
216
|
+
|
217
|
+
async def users_me_collections_releases_post(
|
218
|
+
self,
|
219
|
+
release_collection: ReleaseCollection
|
220
|
+
):
|
221
|
+
"""
|
222
|
+
Возвращает данные по релизам из определенной коллекции авторизованного пользователя
|
223
|
+
|
224
|
+
Args:
|
225
|
+
release_collection: тело ReleaseCollection
|
226
|
+
"""
|
227
|
+
json = {
|
228
|
+
'page': release_collection.page,
|
229
|
+
'limit': release_collection.limit,
|
230
|
+
'type_of_collection': release_collection.type_of_collection.value,
|
231
|
+
'include': release_collection.include,
|
232
|
+
'exclude': release_collection.exclude
|
233
|
+
}
|
234
|
+
|
235
|
+
coll = await validated_json_collection(release=release_collection)
|
236
|
+
final_json = {**json, **coll}
|
237
|
+
|
238
|
+
return await self._api.post("/accounts/users/me/collections/releases", json_data=final_json)
|
239
|
+
|
240
|
+
async def users_me_collections_add(
|
241
|
+
self,
|
242
|
+
release_ids: List[int]
|
243
|
+
):
|
244
|
+
"""
|
245
|
+
Добавляет релизы в избранное авторизованного пользователя
|
246
|
+
|
247
|
+
:param release_id: ID релиза
|
248
|
+
"""
|
249
|
+
params = [{"release_id": a} for a in release_ids]
|
250
|
+
|
251
|
+
return await self._api.post("/accounts/users/me/favorites", json_data=params)
|
252
|
+
|
253
|
+
async def users_me_collections_delete(
|
254
|
+
self,
|
255
|
+
release_ids: List[int]
|
256
|
+
):
|
257
|
+
"""
|
258
|
+
Удаляет релизы из избранного авторизованного пользователя
|
259
|
+
|
260
|
+
:param release_id: ID релиза
|
261
|
+
"""
|
262
|
+
params = [{"release_id": a} for a in release_ids]
|
263
|
+
|
264
|
+
return await self._api.delete("/accounts/users/me/favorites", json_data=params)
|
265
|
+
|
266
|
+
async def users_me_profile(
|
267
|
+
self,
|
268
|
+
include: Optional[str] = None,
|
269
|
+
exclude: Optional[str] = None
|
270
|
+
):
|
271
|
+
"""
|
272
|
+
Возвращает данные профиля авторизованного пользователя (auth need)
|
273
|
+
|
274
|
+
:param include: Опционально. Список включаемых полей. Через запятую или множественные параметры. Поддерживается вложенность через точку. Example : id,type.genres
|
275
|
+
:param exclude: Опционально. Список исключаемых полей. Через запятую или множественные параметры. Поддерживается вложенность через точку. Приоритет над include Example : poster,description
|
276
|
+
"""
|
277
|
+
|
278
|
+
query = {
|
279
|
+
'include': include,
|
280
|
+
'exclude': exclude
|
281
|
+
}
|
282
|
+
|
283
|
+
return await self._api.get("/accounts/users/me/profile", params=query)
|
284
|
+
|
285
|
+
async def users_me_views_history(
|
286
|
+
self,
|
287
|
+
page: Optional[int] = None,
|
288
|
+
limit: Optional[int] = None,
|
289
|
+
include: Optional[str] = None,
|
290
|
+
exclude: Optional[str] = None
|
291
|
+
):
|
292
|
+
"""
|
293
|
+
Возвращает историю просмотров эпизодов авторизованного пользователя
|
294
|
+
|
295
|
+
Args:
|
296
|
+
page: Опционально. Номер страницы
|
297
|
+
limit: Опционально. Лимит на страницу
|
298
|
+
include: Опционально. Список включаемых полей. Через запятую или множественные параметры. Поддерживается вложенность через точку.
|
299
|
+
exclude: Опционально. Список исключаемых полей. Через запятую или множественные параметры. Поддерживается вложенность через точку. Приоритет над include
|
300
|
+
"""
|
301
|
+
params = {
|
302
|
+
"page": page,
|
303
|
+
"limit": limit,
|
304
|
+
"include": include,
|
305
|
+
"exclude": exclude
|
306
|
+
}
|
307
|
+
return await self._api.get("/accounts/users/me/views/history", params=params)
|
308
|
+
|
309
|
+
async def users_me_views_timecodes(
|
310
|
+
self,
|
311
|
+
since: Optional[str]
|
312
|
+
):
|
313
|
+
"""
|
314
|
+
Возвращает таймкоды по прогрессу просмотренных эпизодов
|
315
|
+
|
316
|
+
:param since: Опционально. Возвращает только таймкоды, которые были добавлены после указанного времени (в iso формате). Example: 2025-05-12T07:20:50.52Z
|
317
|
+
"""
|
318
|
+
params = {
|
319
|
+
"since": since
|
320
|
+
}
|
321
|
+
return await self._api.get("/accounts/users/me/views/timecodes", params=params)
|
322
|
+
|
323
|
+
async def users_me_views_timecodes_update(
|
324
|
+
self,
|
325
|
+
timecode_list: List[TimeCode]
|
326
|
+
):
|
327
|
+
"""
|
328
|
+
Обновляет таймкоды просмотренных эпизодов
|
329
|
+
|
330
|
+
:param timecode_list: Лист из обьектов TimeCode. Example: [TimeCode(...)]
|
331
|
+
"""
|
332
|
+
json = [timecode.model_dump(mode='json') for timecode in timecode_list]
|
333
|
+
|
334
|
+
return await self._api.post("/accounts/users/me/views/timecodes", json_data=json)
|
335
|
+
|
336
|
+
async def users_me_views_timecodes_delete(
|
337
|
+
self,
|
338
|
+
episode_id_list: List[str]
|
339
|
+
):
|
340
|
+
"""
|
341
|
+
Удаляет данные по таймкодам просмотров для указанных эпизодов
|
342
|
+
|
343
|
+
:param episode_id_list: Лист из episode_id. Example: ["id", "id"]
|
344
|
+
"""
|
345
|
+
list_ = []
|
346
|
+
for episode in episode_id_list:
|
347
|
+
list_.append({"release_episode_id": episode})
|
348
|
+
|
349
349
|
return await self._api.delete("/accounts/users/me/views/timecodes", json_data=list_)
|