refactor: вернул OtherAPI как отдельный класс

OtherAPI остаётся отдельным классом с property accessor:
- client.other.get_wants()
- client.other.get_kworks_status()
- client.other.go_offline()
- и т.д.
This commit is contained in:
root 2026-03-23 04:36:47 +00:00
parent 127e5927bc
commit 6ad63ee3e0
2 changed files with 193 additions and 163 deletions

View File

@ -907,7 +907,32 @@ class KworkClient:
data = await self.client._request("POST", "/blockedDialogList")
return [Dialog.model_validate(d) for d in data.get("dialogs", [])]
# ========== User Settings & Preferences ==========
# ========== Other Endpoints ==========
class OtherAPI:
"""
Прочее API.
Вспомогательные эндпоинты которые не вошли в другие категории:
- Пользовательские настройки и предпочтения (wants)
- Статусы кворков и заказов
- Персональные предложения (offers)
- Настройки профиля
- Статус онлайн/оффлайн
Example:
# Пользовательские предпочтения
wants = await client.other.get_wants()
# Статус кворков
status = await client.other.get_kworks_status()
# Установить статус оффлайн
await client.other.go_offline()
"""
def __init__(self, client: "KworkClient"):
self.client = client
async def get_wants(self) -> dict[str, Any]:
"""
@ -922,10 +947,10 @@ class KworkClient:
Словарь с настройками предпочтений.
Example:
wants = await client.get_wants()
wants = await client.other.get_wants()
print(wants)
"""
return await self._request("POST", "/myWants")
return await self.client._request("POST", "/myWants")
async def get_wants_status(self) -> dict[str, Any]:
"""
@ -934,7 +959,7 @@ class KworkClient:
Returns:
Статус wants с метаданными.
"""
return await self._request("POST", "/wantsStatusList")
return await self.client._request("POST", "/wantsStatusList")
async def get_kworks_status(self) -> dict[str, Any]:
"""
@ -947,10 +972,10 @@ class KworkClient:
Словарь со статусами кворков.
Example:
status = await client.get_kworks_status()
status = await client.other.get_kworks_status()
print(status)
"""
return await self._request("POST", "/kworksStatusList")
return await self.client._request("POST", "/kworksStatusList")
async def get_offers(self) -> dict[str, Any]:
"""
@ -959,7 +984,7 @@ class KworkClient:
Returns:
Список персональных предложений от Kwork.
"""
return await self._request("POST", "/offers")
return await self.client._request("POST", "/offers")
async def get_exchange_info(self) -> dict[str, Any]:
"""
@ -968,7 +993,7 @@ class KworkClient:
Returns:
Информация о курсах валют и обмене.
"""
return await self._request("POST", "/exchangeInfo")
return await self.client._request("POST", "/exchangeInfo")
async def get_channel(self) -> dict[str, Any]:
"""
@ -977,7 +1002,7 @@ class KworkClient:
Returns:
Данные канала (если есть).
"""
return await self._request("POST", "/getChannel")
return await self.client._request("POST", "/getChannel")
async def get_in_app_notification(self) -> dict[str, Any]:
"""
@ -986,7 +1011,7 @@ class KworkClient:
Returns:
Данные in-app уведомления.
"""
return await self._request("POST", "/getInAppNotification")
return await self.client._request("POST", "/getInAppNotification")
async def get_security_user_data(self) -> dict[str, Any]:
"""
@ -995,7 +1020,7 @@ class KworkClient:
Returns:
Информация о безопасности аккаунта.
"""
return await self._request("POST", "/getSecurityUserData")
return await self.client._request("POST", "/getSecurityUserData")
async def is_dialog_allow(self, user_id: int) -> bool:
"""
@ -1008,11 +1033,11 @@ class KworkClient:
True если диалог разрешён, False иначе.
Example:
allowed = await client.is_dialog_allow(12345)
allowed = await client.other.is_dialog_allow(12345)
if allowed:
print("Можно написать сообщение")
"""
data = await self._request(
data = await self.client._request(
"POST",
"/isDialogAllow",
json={"user_id": user_id},
@ -1030,10 +1055,10 @@ class KworkClient:
Список просмотренных кворков.
Example:
viewed = await client.get_viewed_kworks()
viewed = await client.other.get_viewed_kworks()
print(f"Просмотрено: {len(viewed)} кворков")
"""
data = await self._request("POST", "/viewedCatalogKworks")
data = await self.client._request("POST", "/viewedCatalogKworks")
return [Kwork.model_validate(k) for k in data.get("kworks", [])]
async def get_favorite_categories(self) -> list[int]:
@ -1044,10 +1069,10 @@ class KworkClient:
Список ID категорий, добавленных в избранное.
Example:
cats = await client.get_favorite_categories()
cats = await client.other.get_favorite_categories()
print(f"Избранные категории: {cats}")
"""
data = await self._request("POST", "/favoriteCategories")
data = await self.client._request("POST", "/favoriteCategories")
return data.get("categories", [])
async def update_settings(self, settings: dict[str, Any]) -> dict[str, Any]:
@ -1062,12 +1087,12 @@ class KworkClient:
Ответ API с подтверждением обновления.
Example:
await client.update_settings({
await client.other.update_settings({
"email_notifications": True,
"language": "ru"
})
"""
return await self._request("POST", "/updateSettings", json=settings)
return await self.client._request("POST", "/updateSettings", json=settings)
async def go_offline(self) -> dict[str, Any]:
"""
@ -1079,9 +1104,9 @@ class KworkClient:
Подтверждение изменения статуса.
Example:
await client.go_offline()
await client.other.go_offline()
"""
return await self._request("POST", "/offline")
return await self.client._request("POST", "/offline")
async def get_actor(self) -> dict[str, Any]:
"""
@ -1090,7 +1115,7 @@ class KworkClient:
Returns:
Данные актёра/пользователя.
"""
return await self._request("POST", "/actor")
return await self.client._request("POST", "/actor")
# ========== API Property Accessors ==========
@ -1118,3 +1143,8 @@ class KworkClient:
def notifications(self) -> NotificationsAPI:
"""API уведомлений."""
return self.NotificationsAPI(self)
@property
def other(self) -> OtherAPI:
"""Прочее API."""
return self.OtherAPI(self)