docs: полная документация моделей и исключений
models.py: - KworkUser, KworkCategory, Kwork, KworkDetails - PaginationInfo, CatalogResponse - Project, ProjectsResponse - Review, ReviewsResponse - Notification, NotificationsResponse - Dialog, AuthResponse - ErrorDetail, APIErrorResponse - City, Country, TimeZone - Feature, Badge - DataResponse errors.py: - KworkError (базовое) - KworkAuthError - KworkApiError - KworkNotFoundError - KworkRateLimitError - KworkValidationError - KworkNetworkError Все классы задокументированы с описанием атрибутов и примерами.
This commit is contained in:
parent
bc951cc763
commit
857d5a95c5
474
api_reference.md
474
api_reference.md
@ -874,7 +874,23 @@ async def get_worker_orders() -> list[Project]
|
|||||||
class UserAPI()
|
class UserAPI()
|
||||||
```
|
```
|
||||||
|
|
||||||
User API endpoints.
|
Пользовательское API.
|
||||||
|
|
||||||
|
Предоставляет доступ к данным текущего пользователя:
|
||||||
|
- Профиль и информация об аккаунте
|
||||||
|
- Отзывы (полученные и оставленные)
|
||||||
|
- Избранные кворки
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
# Информация о пользователе
|
||||||
|
info = await client.user.get_info()
|
||||||
|
|
||||||
|
# Мои отзывы
|
||||||
|
reviews = await client.user.get_reviews()
|
||||||
|
|
||||||
|
# Избранные кворки
|
||||||
|
favorites = await client.user.get_favorite_kworks()
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.UserAPI.__init__"></a>
|
<a id="kwork_api.client.KworkClient.UserAPI.__init__"></a>
|
||||||
|
|
||||||
@ -892,11 +908,25 @@ def __init__(client: "KworkClient")
|
|||||||
async def get_info() -> dict[str, Any]
|
async def get_info() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get current user info.
|
Получить информацию о текущем пользователе.
|
||||||
|
|
||||||
|
Возвращает основные данные аккаунта:
|
||||||
|
- ID, username, email
|
||||||
|
- Баланс, рейтинг
|
||||||
|
- Статус верификации
|
||||||
|
- Настройки профиля
|
||||||
|
|
||||||
**Returns**:
|
**Returns**:
|
||||||
|
|
||||||
User info dict
|
Словарь с информацией о пользователе.
|
||||||
|
Структура зависит от ответа API.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
info = await client.user.get_info()
|
||||||
|
- `print(f"User` - {info.get('username')}")
|
||||||
|
- `print(f"Balance` - {info.get('balance')} RUB")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.UserAPI.get_reviews"></a>
|
<a id="kwork_api.client.KworkClient.UserAPI.get_reviews"></a>
|
||||||
|
|
||||||
@ -907,17 +937,35 @@ async def get_reviews(user_id: Optional[int] = None,
|
|||||||
page: int = 1) -> ReviewsResponse
|
page: int = 1) -> ReviewsResponse
|
||||||
```
|
```
|
||||||
|
|
||||||
Get user reviews.
|
Получить отзывы пользователя.
|
||||||
|
|
||||||
|
Если user_id не указан — возвращает отзывы текущего пользователя.
|
||||||
|
Если указан — отзывы другого пользователя по ID.
|
||||||
|
|
||||||
**Arguments**:
|
**Arguments**:
|
||||||
|
|
||||||
- `user_id` - User ID (None for current user)
|
- `user_id` - ID пользователя. Если None — текущий пользователь.
|
||||||
- `page` - Page number
|
- `page` - Номер страницы для пагинации (начиная с 1).
|
||||||
|
|
||||||
|
|
||||||
**Returns**:
|
**Returns**:
|
||||||
|
|
||||||
ReviewsResponse
|
ReviewsResponse содержащий:
|
||||||
|
- reviews: список отзывов на странице
|
||||||
|
- pagination: информация о пагинации
|
||||||
|
- average_rating: средний рейтинг
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
# Мои отзывы
|
||||||
|
my_reviews = await client.user.get_reviews()
|
||||||
|
|
||||||
|
# Отзывы другого пользователя
|
||||||
|
user_reviews = await client.user.get_reviews(user_id=12345)
|
||||||
|
|
||||||
|
# С пагинацией
|
||||||
|
page2 = await client.user.get_reviews(page=2)
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.UserAPI.get_favorite_kworks"></a>
|
<a id="kwork_api.client.KworkClient.UserAPI.get_favorite_kworks"></a>
|
||||||
|
|
||||||
@ -927,11 +975,20 @@ Get user reviews.
|
|||||||
async def get_favorite_kworks() -> list[Kwork]
|
async def get_favorite_kworks() -> list[Kwork]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get favorite kworks.
|
Получить список избранных кворков.
|
||||||
|
|
||||||
|
Возвращает все кворки, добавленные пользователем в избранное.
|
||||||
|
|
||||||
**Returns**:
|
**Returns**:
|
||||||
|
|
||||||
List of kworks
|
Список избранных кворков.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
favorites = await client.user.get_favorite_kworks()
|
||||||
|
for kwork in favorites:
|
||||||
|
- `print(f"{kwork.title}` - {kwork.price} RUB")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.ReferenceAPI"></a>
|
<a id="kwork_api.client.KworkClient.ReferenceAPI"></a>
|
||||||
|
|
||||||
@ -941,7 +998,25 @@ Get favorite kworks.
|
|||||||
class ReferenceAPI()
|
class ReferenceAPI()
|
||||||
```
|
```
|
||||||
|
|
||||||
Reference data (cities, countries, etc.) endpoints.
|
Справочное API.
|
||||||
|
|
||||||
|
Предоставляет доступ к справочным данным Kwork:
|
||||||
|
- Города, страны, часовые пояса
|
||||||
|
- Доступные функции и дополнения
|
||||||
|
- Значки пользователей
|
||||||
|
|
||||||
|
Эти данные редко меняются и могут быть закэшированы.
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
# Все страны
|
||||||
|
countries = await client.reference.get_countries()
|
||||||
|
|
||||||
|
# Все города
|
||||||
|
cities = await client.reference.get_cities()
|
||||||
|
|
||||||
|
# Доступные фичи
|
||||||
|
features = await client.reference.get_features()
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.ReferenceAPI.__init__"></a>
|
<a id="kwork_api.client.KworkClient.ReferenceAPI.__init__"></a>
|
||||||
|
|
||||||
@ -959,7 +1034,17 @@ def __init__(client: "KworkClient")
|
|||||||
async def get_cities() -> list[City]
|
async def get_cities() -> list[City]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get all cities.
|
Получить список всех городов.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список всех городов из справочника Kwork.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
cities = await client.reference.get_cities()
|
||||||
|
moscow = next(c for c in cities if c.name == "Москва")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_countries"></a>
|
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_countries"></a>
|
||||||
|
|
||||||
@ -969,7 +1054,17 @@ Get all cities.
|
|||||||
async def get_countries() -> list[Country]
|
async def get_countries() -> list[Country]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get all countries.
|
Получить список всех стран.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список всех стран с кодами и городами.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
countries = await client.reference.get_countries()
|
||||||
|
russia = next(c for c in countries if c.code == "RU")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_timezones"></a>
|
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_timezones"></a>
|
||||||
|
|
||||||
@ -979,7 +1074,17 @@ Get all countries.
|
|||||||
async def get_timezones() -> list[TimeZone]
|
async def get_timezones() -> list[TimeZone]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get all timezones.
|
Получить список всех часовых поясов.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список часовых поясов с названиями и смещениями.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
timezones = await client.reference.get_timezones()
|
||||||
|
msks = next(tz for tz in timezones if "Moscow" in tz.name)
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_features"></a>
|
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_features"></a>
|
||||||
|
|
||||||
@ -989,7 +1094,24 @@ Get all timezones.
|
|||||||
async def get_features() -> list[Feature]
|
async def get_features() -> list[Feature]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get available features.
|
Получить доступные дополнительные функции (features).
|
||||||
|
|
||||||
|
Features — это платные дополнения к кворкам:
|
||||||
|
- Увеличенные сроки
|
||||||
|
- Дополнительные правки
|
||||||
|
- Приоритетная поддержка
|
||||||
|
- и т.д.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список доступных features с названиями и ценами.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
features = await client.reference.get_features()
|
||||||
|
for f in features:
|
||||||
|
- `print(f"{f.name}` - {f.price} RUB")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_public_features"></a>
|
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_public_features"></a>
|
||||||
|
|
||||||
@ -999,7 +1121,14 @@ Get available features.
|
|||||||
async def get_public_features() -> list[Feature]
|
async def get_public_features() -> list[Feature]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get public features.
|
Получить публичные функции.
|
||||||
|
|
||||||
|
Аналогично get_features(), но возвращает только
|
||||||
|
публично доступные опции.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список публичных features.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_badges_info"></a>
|
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_badges_info"></a>
|
||||||
|
|
||||||
@ -1009,7 +1138,24 @@ Get public features.
|
|||||||
async def get_badges_info() -> list[Badge]
|
async def get_badges_info() -> list[Badge]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get badges info.
|
Получить информацию о значках пользователей.
|
||||||
|
|
||||||
|
Значки (badges) отображают достижения и статусы:
|
||||||
|
- "Профессионал"
|
||||||
|
- "Быстрый ответ"
|
||||||
|
- "Надёжный продавец"
|
||||||
|
- и т.д.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список значков с описаниями и иконками.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
badges = await client.reference.get_badges_info()
|
||||||
|
for badge in badges:
|
||||||
|
- `print(f"{badge.name}` - {badge.description}")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.NotificationsAPI"></a>
|
<a id="kwork_api.client.KworkClient.NotificationsAPI"></a>
|
||||||
|
|
||||||
@ -1019,7 +1165,24 @@ Get badges info.
|
|||||||
class NotificationsAPI()
|
class NotificationsAPI()
|
||||||
```
|
```
|
||||||
|
|
||||||
Notifications and messages endpoints.
|
API уведомлений и сообщений.
|
||||||
|
|
||||||
|
Предоставляет доступ к системе уведомлений Kwork:
|
||||||
|
- Список уведомлений
|
||||||
|
- Получение новых уведомлений
|
||||||
|
- Диалоги с пользователями
|
||||||
|
- Заблокированные диалоги
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
# Все уведомления
|
||||||
|
notifications = await client.notifications.get_list()
|
||||||
|
|
||||||
|
# Новые уведомления
|
||||||
|
new = await client.notifications.fetch()
|
||||||
|
|
||||||
|
# Диалоги
|
||||||
|
dialogs = await client.notifications.get_dialogs()
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.NotificationsAPI.__init__"></a>
|
<a id="kwork_api.client.KworkClient.NotificationsAPI.__init__"></a>
|
||||||
|
|
||||||
@ -1037,7 +1200,26 @@ def __init__(client: "KworkClient")
|
|||||||
async def get_list() -> NotificationsResponse
|
async def get_list() -> NotificationsResponse
|
||||||
```
|
```
|
||||||
|
|
||||||
Get notifications list.
|
Получить список всех уведомлений.
|
||||||
|
|
||||||
|
Возвращает все уведомления пользователя с информацией
|
||||||
|
о прочтении.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
NotificationsResponse содержащий:
|
||||||
|
- notifications: список уведомлений
|
||||||
|
- unread_count: количество непрочитанных
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
notifs = await client.notifications.get_list()
|
||||||
|
- `print(f"Непрочитанных` - {notifs.unread_count}")
|
||||||
|
|
||||||
|
for n in notifs.notifications:
|
||||||
|
if not n.is_read:
|
||||||
|
- `print(f"Новое` - {n.title}")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.NotificationsAPI.fetch"></a>
|
<a id="kwork_api.client.KworkClient.NotificationsAPI.fetch"></a>
|
||||||
|
|
||||||
@ -1047,7 +1229,22 @@ Get notifications list.
|
|||||||
async def fetch() -> NotificationsResponse
|
async def fetch() -> NotificationsResponse
|
||||||
```
|
```
|
||||||
|
|
||||||
Fetch new notifications.
|
Получить новые уведомления.
|
||||||
|
|
||||||
|
Отличается от get_list() тем, что возвращает только
|
||||||
|
уведомления, появившиеся с момента последнего запроса.
|
||||||
|
Также может обновлять счётчик непрочитанных.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
NotificationsResponse с новыми уведомлениями.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
new_notifs = await client.notifications.fetch()
|
||||||
|
if new_notifs.unread_count > 0:
|
||||||
|
print(f"У вас {new_notifs.unread_count} новых уведомлений!")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.NotificationsAPI.get_dialogs"></a>
|
<a id="kwork_api.client.KworkClient.NotificationsAPI.get_dialogs"></a>
|
||||||
|
|
||||||
@ -1057,7 +1254,21 @@ Fetch new notifications.
|
|||||||
async def get_dialogs() -> list[Dialog]
|
async def get_dialogs() -> list[Dialog]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get dialogs list.
|
Получить список диалогов (чатов).
|
||||||
|
|
||||||
|
Возвращает все активные диалоги пользователя с другими
|
||||||
|
пользователями Kwork.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список диалогов с последней перепиской.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
dialogs = await client.notifications.get_dialogs()
|
||||||
|
for d in dialogs:
|
||||||
|
print(f"С {d.participant.username}: {d.last_message}")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.NotificationsAPI.get_blocked_dialogs"></a>
|
<a id="kwork_api.client.KworkClient.NotificationsAPI.get_blocked_dialogs"></a>
|
||||||
|
|
||||||
@ -1067,7 +1278,20 @@ Get dialogs list.
|
|||||||
async def get_blocked_dialogs() -> list[Dialog]
|
async def get_blocked_dialogs() -> list[Dialog]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get blocked dialogs.
|
Получить список заблокированных диалогов.
|
||||||
|
|
||||||
|
Возвращает диалоги с пользователями, которые были
|
||||||
|
заблокированы текущим пользователем.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список заблокированных диалогов.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
blocked = await client.notifications.get_blocked_dialogs()
|
||||||
|
- `print(f"Заблокировано` - {len(blocked)} пользователей")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI"></a>
|
||||||
|
|
||||||
@ -1077,7 +1301,25 @@ Get blocked dialogs.
|
|||||||
class OtherAPI()
|
class OtherAPI()
|
||||||
```
|
```
|
||||||
|
|
||||||
Other API endpoints.
|
Прочее API.
|
||||||
|
|
||||||
|
Вспомогательные эндпоинты которые не вошли в другие категории:
|
||||||
|
- Пользовательские настройки и предпочтения (wants)
|
||||||
|
- Статусы кворков и заказов
|
||||||
|
- Персональные предложения (offers)
|
||||||
|
- Настройки профиля
|
||||||
|
- Статус онлайн/оффлайн
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
# Пользовательские предпочтения
|
||||||
|
wants = await client.other.get_wants()
|
||||||
|
|
||||||
|
# Статус кворков
|
||||||
|
status = await client.other.get_kworks_status()
|
||||||
|
|
||||||
|
# Установить статус оффлайн
|
||||||
|
await client.other.go_offline()
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.__init__"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.__init__"></a>
|
||||||
|
|
||||||
@ -1095,7 +1337,22 @@ def __init__(client: "KworkClient")
|
|||||||
async def get_wants() -> dict[str, Any]
|
async def get_wants() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get user wants.
|
Получить пользовательские предпочтения (wants).
|
||||||
|
|
||||||
|
Wants — это настройки интересов пользователя:
|
||||||
|
- Предпочитаемые категории
|
||||||
|
- Ключевые слова для мониторинга
|
||||||
|
- Фильтры для поиска
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Словарь с настройками предпочтений.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
wants = await client.other.get_wants()
|
||||||
|
print(wants)
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_wants_status"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_wants_status"></a>
|
||||||
|
|
||||||
@ -1105,7 +1362,11 @@ Get user wants.
|
|||||||
async def get_wants_status() -> dict[str, Any]
|
async def get_wants_status() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get wants status.
|
Получить статус предпочтений.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Статус wants с метаданными.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_kworks_status"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_kworks_status"></a>
|
||||||
|
|
||||||
@ -1115,7 +1376,20 @@ Get wants status.
|
|||||||
async def get_kworks_status() -> dict[str, Any]
|
async def get_kworks_status() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get kworks status.
|
Получить статусы кворков пользователя.
|
||||||
|
|
||||||
|
Возвращает информацию о статусах всех кворков
|
||||||
|
текущего пользователя (активен, на модерации, и т.д.).
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Словарь со статусами кворков.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
status = await client.other.get_kworks_status()
|
||||||
|
print(status)
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_offers"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_offers"></a>
|
||||||
|
|
||||||
@ -1125,7 +1399,11 @@ Get kworks status.
|
|||||||
async def get_offers() -> dict[str, Any]
|
async def get_offers() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get offers.
|
Получить персональные предложения.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список персональных предложений от Kwork.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_exchange_info"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_exchange_info"></a>
|
||||||
|
|
||||||
@ -1135,7 +1413,11 @@ Get offers.
|
|||||||
async def get_exchange_info() -> dict[str, Any]
|
async def get_exchange_info() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get exchange info.
|
Получить информацию об обмене валюты.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Информация о курсах валют и обмене.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_channel"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_channel"></a>
|
||||||
|
|
||||||
@ -1145,7 +1427,11 @@ Get exchange info.
|
|||||||
async def get_channel() -> dict[str, Any]
|
async def get_channel() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get channel info.
|
Получить информацию о канале пользователя.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Данные канала (если есть).
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_in_app_notification"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_in_app_notification"></a>
|
||||||
|
|
||||||
@ -1155,7 +1441,11 @@ Get channel info.
|
|||||||
async def get_in_app_notification() -> dict[str, Any]
|
async def get_in_app_notification() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get in-app notification.
|
Получить внутриприложенное уведомление.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Данные in-app уведомления.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_security_user_data"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_security_user_data"></a>
|
||||||
|
|
||||||
@ -1165,7 +1455,11 @@ Get in-app notification.
|
|||||||
async def get_security_user_data() -> dict[str, Any]
|
async def get_security_user_data() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get security user data.
|
Получить данные безопасности пользователя.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Информация о безопасности аккаунта.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.is_dialog_allow"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.is_dialog_allow"></a>
|
||||||
|
|
||||||
@ -1175,7 +1469,23 @@ Get security user data.
|
|||||||
async def is_dialog_allow(user_id: int) -> bool
|
async def is_dialog_allow(user_id: int) -> bool
|
||||||
```
|
```
|
||||||
|
|
||||||
Check if dialog is allowed.
|
Проверить возможность начала диалога с пользователем.
|
||||||
|
|
||||||
|
**Arguments**:
|
||||||
|
|
||||||
|
- `user_id` - ID пользователя для проверки.
|
||||||
|
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
True если диалог разрешён, False иначе.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
allowed = await client.other.is_dialog_allow(12345)
|
||||||
|
if allowed:
|
||||||
|
print("Можно написать сообщение")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_viewed_kworks"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_viewed_kworks"></a>
|
||||||
|
|
||||||
@ -1185,7 +1495,20 @@ Check if dialog is allowed.
|
|||||||
async def get_viewed_kworks() -> list[Kwork]
|
async def get_viewed_kworks() -> list[Kwork]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get viewed kworks.
|
Получить просмотренные кворки.
|
||||||
|
|
||||||
|
Возвращает список кворков, которые пользователь
|
||||||
|
просматривал ранее.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список просмотренных кворков.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
viewed = await client.other.get_viewed_kworks()
|
||||||
|
- `print(f"Просмотрено` - {len(viewed)} кворков")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_favorite_categories"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_favorite_categories"></a>
|
||||||
|
|
||||||
@ -1195,7 +1518,17 @@ Get viewed kworks.
|
|||||||
async def get_favorite_categories() -> list[int]
|
async def get_favorite_categories() -> list[int]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get favorite categories.
|
Получить ID избранных категорий.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Список ID категорий, добавленных в избранное.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
cats = await client.other.get_favorite_categories()
|
||||||
|
print(f"Избранные категории: {cats}")
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.update_settings"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.update_settings"></a>
|
||||||
|
|
||||||
@ -1205,7 +1538,25 @@ Get favorite categories.
|
|||||||
async def update_settings(settings: dict[str, Any]) -> dict[str, Any]
|
async def update_settings(settings: dict[str, Any]) -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Update user settings.
|
Обновить настройки пользователя.
|
||||||
|
|
||||||
|
**Arguments**:
|
||||||
|
|
||||||
|
- `settings` - Словарь с настройками для обновления.
|
||||||
|
Структура зависит от конкретных настроек.
|
||||||
|
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Ответ API с подтверждением обновления.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
await client.other.update_settings({
|
||||||
|
- `"email_notifications"` - True,
|
||||||
|
- `"language"` - "ru"
|
||||||
|
})
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.go_offline"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.go_offline"></a>
|
||||||
|
|
||||||
@ -1215,7 +1566,18 @@ Update user settings.
|
|||||||
async def go_offline() -> dict[str, Any]
|
async def go_offline() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Set user status to offline.
|
Установить статус пользователя "оффлайн".
|
||||||
|
|
||||||
|
Скрывает онлайн-статус от других пользователей.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Подтверждение изменения статуса.
|
||||||
|
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
|
||||||
|
await client.other.go_offline()
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.OtherAPI.get_actor"></a>
|
<a id="kwork_api.client.KworkClient.OtherAPI.get_actor"></a>
|
||||||
|
|
||||||
@ -1225,7 +1587,11 @@ Set user status to offline.
|
|||||||
async def get_actor() -> dict[str, Any]
|
async def get_actor() -> dict[str, Any]
|
||||||
```
|
```
|
||||||
|
|
||||||
Get actor info.
|
Получить информацию об актёре (текущем пользователе).
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
Данные актёра/пользователя.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.catalog"></a>
|
<a id="kwork_api.client.KworkClient.catalog"></a>
|
||||||
|
|
||||||
@ -1236,7 +1602,11 @@ Get actor info.
|
|||||||
def catalog() -> CatalogAPI
|
def catalog() -> CatalogAPI
|
||||||
```
|
```
|
||||||
|
|
||||||
Catalog API.
|
API каталога кворков.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
CatalogAPI для работы с каталогом.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.projects"></a>
|
<a id="kwork_api.client.KworkClient.projects"></a>
|
||||||
|
|
||||||
@ -1247,7 +1617,11 @@ Catalog API.
|
|||||||
def projects() -> ProjectsAPI
|
def projects() -> ProjectsAPI
|
||||||
```
|
```
|
||||||
|
|
||||||
Projects API.
|
API биржи проектов.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
ProjectsAPI для работы с проектами.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.user"></a>
|
<a id="kwork_api.client.KworkClient.user"></a>
|
||||||
|
|
||||||
@ -1258,7 +1632,11 @@ Projects API.
|
|||||||
def user() -> UserAPI
|
def user() -> UserAPI
|
||||||
```
|
```
|
||||||
|
|
||||||
User API.
|
Пользовательское API.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
UserAPI для работы с профилем.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.reference"></a>
|
<a id="kwork_api.client.KworkClient.reference"></a>
|
||||||
|
|
||||||
@ -1269,7 +1647,11 @@ User API.
|
|||||||
def reference() -> ReferenceAPI
|
def reference() -> ReferenceAPI
|
||||||
```
|
```
|
||||||
|
|
||||||
Reference data API.
|
Справочное API.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
ReferenceAPI для справочных данных.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.notifications"></a>
|
<a id="kwork_api.client.KworkClient.notifications"></a>
|
||||||
|
|
||||||
@ -1280,7 +1662,11 @@ Reference data API.
|
|||||||
def notifications() -> NotificationsAPI
|
def notifications() -> NotificationsAPI
|
||||||
```
|
```
|
||||||
|
|
||||||
Notifications API.
|
API уведомлений.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
NotificationsAPI для уведомлений и сообщений.
|
||||||
|
|
||||||
<a id="kwork_api.client.KworkClient.other"></a>
|
<a id="kwork_api.client.KworkClient.other"></a>
|
||||||
|
|
||||||
@ -1291,7 +1677,11 @@ Notifications API.
|
|||||||
def other() -> OtherAPI
|
def other() -> OtherAPI
|
||||||
```
|
```
|
||||||
|
|
||||||
Other endpoints.
|
Прочее API.
|
||||||
|
|
||||||
|
**Returns**:
|
||||||
|
|
||||||
|
OtherAPI для вспомогательных эндпоинтов.
|
||||||
|
|
||||||
<a id="kwork_api.models"></a>
|
<a id="kwork_api.models"></a>
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,37 @@
|
|||||||
"""
|
"""
|
||||||
Kwork API exceptions.
|
Исключения Kwork API.
|
||||||
|
|
||||||
All exceptions provide clear error messages for debugging.
|
Все исключения предоставляют понятные сообщения для отладки.
|
||||||
|
Иерархия исключений:
|
||||||
|
|
||||||
|
KworkError (базовое)
|
||||||
|
├── KworkAuthError (ошибки аутентификации)
|
||||||
|
├── KworkApiError (HTTP ошибки API)
|
||||||
|
│ ├── KworkNotFoundError (404)
|
||||||
|
│ ├── KworkRateLimitError (429)
|
||||||
|
│ └── KworkValidationError (400)
|
||||||
|
└── KworkNetworkError (ошибки сети)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Any, Optional
|
from typing import Any, Optional
|
||||||
|
|
||||||
|
|
||||||
class KworkError(Exception):
|
class KworkError(Exception):
|
||||||
"""Base exception for all Kwork API errors."""
|
"""
|
||||||
|
Базовое исключение для всех ошибок Kwork API.
|
||||||
|
|
||||||
|
Все остальные исключения наследуются от этого класса.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
message: Сообщение об ошибке.
|
||||||
|
response: Оригинальный HTTP response (если есть).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
try:
|
||||||
|
await client.catalog.get_list()
|
||||||
|
except KworkError as e:
|
||||||
|
print(f"Ошибка: {e.message}")
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, message: str, response: Optional[Any] = None):
|
def __init__(self, message: str, response: Optional[Any] = None):
|
||||||
self.message = message
|
self.message = message
|
||||||
@ -20,7 +43,20 @@ class KworkError(Exception):
|
|||||||
|
|
||||||
|
|
||||||
class KworkAuthError(KworkError):
|
class KworkAuthError(KworkError):
|
||||||
"""Authentication/authorization error."""
|
"""
|
||||||
|
Ошибка аутентификации/авторизации.
|
||||||
|
|
||||||
|
Возникает при:
|
||||||
|
- Неверном логине или пароле
|
||||||
|
- Истёкшем или невалидном токене
|
||||||
|
- Отсутствии прав доступа (403)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
try:
|
||||||
|
client = await KworkClient.login("user", "wrong_password")
|
||||||
|
except KworkAuthError:
|
||||||
|
print("Неверные учётные данные")
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, message: str = "Authentication failed", response: Optional[Any] = None):
|
def __init__(self, message: str = "Authentication failed", response: Optional[Any] = None):
|
||||||
super().__init__(message, response)
|
super().__init__(message, response)
|
||||||
@ -30,7 +66,20 @@ class KworkAuthError(KworkError):
|
|||||||
|
|
||||||
|
|
||||||
class KworkApiError(KworkError):
|
class KworkApiError(KworkError):
|
||||||
"""API request error (4xx, 5xx)."""
|
"""
|
||||||
|
Ошибка HTTP запроса к API (4xx, 5xx).
|
||||||
|
|
||||||
|
Базовый класс для HTTP ошибок API. Содержит код статуса.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
status_code: HTTP код ответа (400, 404, 500, etc.)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
try:
|
||||||
|
await client.catalog.get_details(999999)
|
||||||
|
except KworkApiError as e:
|
||||||
|
print(f"HTTP {e.status_code}: {e.message}")
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@ -48,21 +97,60 @@ class KworkApiError(KworkError):
|
|||||||
|
|
||||||
|
|
||||||
class KworkNotFoundError(KworkApiError):
|
class KworkNotFoundError(KworkApiError):
|
||||||
"""Resource not found (404)."""
|
"""
|
||||||
|
Ресурс не найден (404).
|
||||||
|
|
||||||
|
Возникает при запросе несуществующего кворка,
|
||||||
|
пользователя или другого ресурса.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
try:
|
||||||
|
await client.catalog.get_details(999999)
|
||||||
|
except KworkNotFoundError:
|
||||||
|
print("Кворк не найден")
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, resource: str, response: Optional[Any] = None):
|
def __init__(self, resource: str, response: Optional[Any] = None):
|
||||||
super().__init__(f"Resource not found: {resource}", 404, response)
|
super().__init__(f"Resource not found: {resource}", 404, response)
|
||||||
|
|
||||||
|
|
||||||
class KworkRateLimitError(KworkApiError):
|
class KworkRateLimitError(KworkApiError):
|
||||||
"""Rate limit exceeded (429)."""
|
"""
|
||||||
|
Превышен лимит запросов (429).
|
||||||
|
|
||||||
|
Возникает при слишком частых запросах к API.
|
||||||
|
Рекомендуется сделать паузу перед повторным запросом.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
try:
|
||||||
|
await client.catalog.get_list()
|
||||||
|
except KworkRateLimitError:
|
||||||
|
await asyncio.sleep(5) # Пауза 5 секунд
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, message: str = "Rate limit exceeded", response: Optional[Any] = None):
|
def __init__(self, message: str = "Rate limit exceeded", response: Optional[Any] = None):
|
||||||
super().__init__(message, 429, response)
|
super().__init__(message, 429, response)
|
||||||
|
|
||||||
|
|
||||||
class KworkValidationError(KworkApiError):
|
class KworkValidationError(KworkApiError):
|
||||||
"""Validation error (400)."""
|
"""
|
||||||
|
Ошибка валидации (400).
|
||||||
|
|
||||||
|
Возникает при некорректных данных запроса.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
fields: Словарь ошибок по полям {field: [errors]}.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
try:
|
||||||
|
await client.catalog.get_list(page=-1)
|
||||||
|
except KworkValidationError as e:
|
||||||
|
if e.fields:
|
||||||
|
for field, errors in e.fields.items():
|
||||||
|
print(f"{field}: {errors[0]}")
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@ -81,7 +169,21 @@ class KworkValidationError(KworkApiError):
|
|||||||
|
|
||||||
|
|
||||||
class KworkNetworkError(KworkError):
|
class KworkNetworkError(KworkError):
|
||||||
"""Network/connection error."""
|
"""
|
||||||
|
Ошибка сети/подключения.
|
||||||
|
|
||||||
|
Возникает при:
|
||||||
|
- Отсутствии соединения
|
||||||
|
- Таймауте запроса
|
||||||
|
- Ошибке DNS
|
||||||
|
- Проблемах с SSL
|
||||||
|
|
||||||
|
Example:
|
||||||
|
try:
|
||||||
|
await client.catalog.get_list()
|
||||||
|
except KworkNetworkError:
|
||||||
|
print("Проверьте подключение к интернету")
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, message: str = "Network error", response: Optional[Any] = None):
|
def __init__(self, message: str = "Network error", response: Optional[Any] = None):
|
||||||
super().__init__(message, response)
|
super().__init__(message, response)
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
Pydantic models for Kwork API responses.
|
Pydantic модели для ответов Kwork API.
|
||||||
|
|
||||||
All models follow the structure found in the HAR dump analysis.
|
Все модели соответствуют структуре, найденной при анализе HAR дампа.
|
||||||
|
Используются для валидации и типизации ответов API.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@ -11,7 +12,20 @@ from pydantic import BaseModel, Field
|
|||||||
|
|
||||||
|
|
||||||
class KworkUser(BaseModel):
|
class KworkUser(BaseModel):
|
||||||
"""User information."""
|
"""
|
||||||
|
Информация о пользователе Kwork.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID пользователя.
|
||||||
|
username: Имя пользователя (логин).
|
||||||
|
avatar_url: URL аватара или None.
|
||||||
|
is_online: Статус онлайн.
|
||||||
|
rating: Рейтинг пользователя (0-5).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
user = KworkUser(id=123, username="seller", rating=4.9)
|
||||||
|
print(f"{user.username}: {user.rating} ★")
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
username: str
|
username: str
|
||||||
avatar_url: Optional[str] = None
|
avatar_url: Optional[str] = None
|
||||||
@ -20,7 +34,15 @@ class KworkUser(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class KworkCategory(BaseModel):
|
class KworkCategory(BaseModel):
|
||||||
"""Category information."""
|
"""
|
||||||
|
Категория кворков.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID категории.
|
||||||
|
name: Название категории.
|
||||||
|
slug: URL-safe идентификатор.
|
||||||
|
parent_id: ID родительской категории для вложенности.
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
name: str
|
name: str
|
||||||
slug: str
|
slug: str
|
||||||
@ -28,7 +50,25 @@ class KworkCategory(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class Kwork(BaseModel):
|
class Kwork(BaseModel):
|
||||||
"""Kwork (service) information."""
|
"""
|
||||||
|
Кворк — услуга на Kwork.
|
||||||
|
|
||||||
|
Базовая модель кворка с основной информацией.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID кворка.
|
||||||
|
title: Заголовок кворка.
|
||||||
|
description: Краткое описание.
|
||||||
|
price: Цена в рублях.
|
||||||
|
currency: Валюта (по умолчанию RUB).
|
||||||
|
category_id: ID категории.
|
||||||
|
seller: Информация о продавце.
|
||||||
|
images: Список URL изображений.
|
||||||
|
rating: Рейтинг кворка (0-5).
|
||||||
|
reviews_count: Количество отзывов.
|
||||||
|
created_at: Дата создания.
|
||||||
|
updated_at: Дата последнего обновления.
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
title: str
|
title: str
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
@ -44,17 +84,39 @@ class Kwork(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class KworkDetails(Kwork):
|
class KworkDetails(Kwork):
|
||||||
"""Extended kwork details."""
|
"""
|
||||||
|
Расширенная информация о кворке.
|
||||||
|
|
||||||
|
Наследует все поля Kwork плюс дополнительные детали.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
full_description: Полное описание услуги.
|
||||||
|
requirements: Требования к заказчику.
|
||||||
|
delivery_time: Срок выполнения в днях.
|
||||||
|
revisions: Количество бесплатных правок.
|
||||||
|
features: Список дополнительных опций.
|
||||||
|
faq: Список вопросов и ответов.
|
||||||
|
"""
|
||||||
full_description: Optional[str] = None
|
full_description: Optional[str] = None
|
||||||
requirements: Optional[str] = None
|
requirements: Optional[str] = None
|
||||||
delivery_time: Optional[int] = None # in days
|
delivery_time: Optional[int] = None
|
||||||
revisions: Optional[int] = None
|
revisions: Optional[int] = None
|
||||||
features: list[str] = Field(default_factory=list)
|
features: list[str] = Field(default_factory=list)
|
||||||
faq: list[dict[str, str]] = Field(default_factory=list)
|
faq: list[dict[str, str]] = Field(default_factory=list)
|
||||||
|
|
||||||
|
|
||||||
class PaginationInfo(BaseModel):
|
class PaginationInfo(BaseModel):
|
||||||
"""Pagination metadata."""
|
"""
|
||||||
|
Информация о пагинации.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
current_page: Текущая страница (начиная с 1).
|
||||||
|
total_pages: Общее количество страниц.
|
||||||
|
total_items: Общее количество элементов.
|
||||||
|
items_per_page: Элементов на странице.
|
||||||
|
has_next: Есть ли следующая страница.
|
||||||
|
has_prev: Есть ли предыдущая страница.
|
||||||
|
"""
|
||||||
current_page: int = 1
|
current_page: int = 1
|
||||||
total_pages: int = 1
|
total_pages: int = 1
|
||||||
total_items: int = 0
|
total_items: int = 0
|
||||||
@ -64,7 +126,15 @@ class PaginationInfo(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class CatalogResponse(BaseModel):
|
class CatalogResponse(BaseModel):
|
||||||
"""Catalog response with kworks and pagination."""
|
"""
|
||||||
|
Ответ API каталога кворков.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
kworks: Список кворков на странице.
|
||||||
|
pagination: Информация о пагинации.
|
||||||
|
filters: Доступные фильтры.
|
||||||
|
sort_options: Доступные опции сортировки.
|
||||||
|
"""
|
||||||
kworks: list[Kwork] = Field(default_factory=list)
|
kworks: list[Kwork] = Field(default_factory=list)
|
||||||
pagination: Optional[PaginationInfo] = None
|
pagination: Optional[PaginationInfo] = None
|
||||||
filters: Optional[dict[str, Any]] = None
|
filters: Optional[dict[str, Any]] = None
|
||||||
@ -72,15 +142,31 @@ class CatalogResponse(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class Project(BaseModel):
|
class Project(BaseModel):
|
||||||
"""Project (freelance order) information."""
|
"""
|
||||||
|
Проект (заказ на бирже фриланса).
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID проекта.
|
||||||
|
title: Заголовок проекта.
|
||||||
|
description: Описание задачи.
|
||||||
|
budget: Бюджет проекта.
|
||||||
|
budget_type: Тип бюджета: "fixed" (фиксированный) или "hourly" (почасовой).
|
||||||
|
category_id: ID категории.
|
||||||
|
customer: Информация о заказчике.
|
||||||
|
status: Статус проекта: "open", "in_progress", "completed", "cancelled".
|
||||||
|
created_at: Дата создания.
|
||||||
|
updated_at: Дата обновления.
|
||||||
|
bids_count: Количество откликов.
|
||||||
|
skills: Требуемые навыки.
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
title: str
|
title: str
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
budget: Optional[float] = None
|
budget: Optional[float] = None
|
||||||
budget_type: str = "fixed" # fixed, hourly
|
budget_type: str = "fixed"
|
||||||
category_id: Optional[int] = None
|
category_id: Optional[int] = None
|
||||||
customer: Optional[KworkUser] = None
|
customer: Optional[KworkUser] = None
|
||||||
status: str = "open" # open, in_progress, completed, cancelled
|
status: str = "open"
|
||||||
created_at: Optional[datetime] = None
|
created_at: Optional[datetime] = None
|
||||||
updated_at: Optional[datetime] = None
|
updated_at: Optional[datetime] = None
|
||||||
bids_count: int = 0
|
bids_count: int = 0
|
||||||
@ -88,13 +174,29 @@ class Project(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class ProjectsResponse(BaseModel):
|
class ProjectsResponse(BaseModel):
|
||||||
"""Projects list response."""
|
"""
|
||||||
|
Ответ API списка проектов.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
projects: Список проектов.
|
||||||
|
pagination: Информация о пагинации.
|
||||||
|
"""
|
||||||
projects: list[Project] = Field(default_factory=list)
|
projects: list[Project] = Field(default_factory=list)
|
||||||
pagination: Optional[PaginationInfo] = None
|
pagination: Optional[PaginationInfo] = None
|
||||||
|
|
||||||
|
|
||||||
class Review(BaseModel):
|
class Review(BaseModel):
|
||||||
"""Review information."""
|
"""
|
||||||
|
Отзыв о кворке или проекте.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID отзыва.
|
||||||
|
rating: Оценка от 1 до 5.
|
||||||
|
comment: Текст отзыва.
|
||||||
|
author: Автор отзыва.
|
||||||
|
kwork_id: ID кворка (если отзыв о кворке).
|
||||||
|
created_at: Дата создания.
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
rating: int = Field(ge=1, le=5)
|
rating: int = Field(ge=1, le=5)
|
||||||
comment: Optional[str] = None
|
comment: Optional[str] = None
|
||||||
@ -104,16 +206,34 @@ class Review(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class ReviewsResponse(BaseModel):
|
class ReviewsResponse(BaseModel):
|
||||||
"""Reviews list response."""
|
"""
|
||||||
|
Ответ API списка отзывов.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
reviews: Список отзывов.
|
||||||
|
pagination: Информация о пагинации.
|
||||||
|
average_rating: Средний рейтинг.
|
||||||
|
"""
|
||||||
reviews: list[Review] = Field(default_factory=list)
|
reviews: list[Review] = Field(default_factory=list)
|
||||||
pagination: Optional[PaginationInfo] = None
|
pagination: Optional[PaginationInfo] = None
|
||||||
average_rating: Optional[float] = None
|
average_rating: Optional[float] = None
|
||||||
|
|
||||||
|
|
||||||
class Notification(BaseModel):
|
class Notification(BaseModel):
|
||||||
"""Notification information."""
|
"""
|
||||||
|
Уведомление пользователя.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID уведомления.
|
||||||
|
type: Тип уведомления: "message", "order", "system", etc.
|
||||||
|
title: Заголовок уведомления.
|
||||||
|
message: Текст уведомления.
|
||||||
|
is_read: Прочитано ли уведомление.
|
||||||
|
created_at: Дата создания.
|
||||||
|
link: Ссылка для перехода (если есть).
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
type: str # message, order, system, etc.
|
type: str
|
||||||
title: str
|
title: str
|
||||||
message: str
|
message: str
|
||||||
is_read: bool = False
|
is_read: bool = False
|
||||||
@ -122,13 +242,28 @@ class Notification(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class NotificationsResponse(BaseModel):
|
class NotificationsResponse(BaseModel):
|
||||||
"""Notifications list response."""
|
"""
|
||||||
|
Ответ API списка уведомлений.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
notifications: Список уведомлений.
|
||||||
|
unread_count: Количество непрочитанных уведомлений.
|
||||||
|
"""
|
||||||
notifications: list[Notification] = Field(default_factory=list)
|
notifications: list[Notification] = Field(default_factory=list)
|
||||||
unread_count: int = 0
|
unread_count: int = 0
|
||||||
|
|
||||||
|
|
||||||
class Dialog(BaseModel):
|
class Dialog(BaseModel):
|
||||||
"""Dialog (chat) information."""
|
"""
|
||||||
|
Диалог (чат) с пользователем.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID диалога.
|
||||||
|
participant: Собеседник.
|
||||||
|
last_message: Текст последнего сообщения.
|
||||||
|
unread_count: Количество непрочитанных сообщений.
|
||||||
|
updated_at: Время последнего сообщения.
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
participant: Optional[KworkUser] = None
|
participant: Optional[KworkUser] = None
|
||||||
last_message: Optional[str] = None
|
last_message: Optional[str] = None
|
||||||
@ -137,7 +272,16 @@ class Dialog(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class AuthResponse(BaseModel):
|
class AuthResponse(BaseModel):
|
||||||
"""Authentication response."""
|
"""
|
||||||
|
Ответ API аутентификации.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
success: Успешность аутентификации.
|
||||||
|
user_id: ID пользователя.
|
||||||
|
username: Имя пользователя.
|
||||||
|
web_auth_token: Токен для последующих запросов.
|
||||||
|
message: Сообщение (например, об ошибке).
|
||||||
|
"""
|
||||||
success: bool
|
success: bool
|
||||||
user_id: Optional[int] = None
|
user_id: Optional[int] = None
|
||||||
username: Optional[str] = None
|
username: Optional[str] = None
|
||||||
@ -146,28 +290,57 @@ class AuthResponse(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class ErrorDetail(BaseModel):
|
class ErrorDetail(BaseModel):
|
||||||
"""Error detail from API."""
|
"""
|
||||||
|
Детали ошибки API.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
code: Код ошибки.
|
||||||
|
message: Сообщение об ошибке.
|
||||||
|
field: Поле, вызвавшее ошибку (если применимо).
|
||||||
|
"""
|
||||||
code: str
|
code: str
|
||||||
message: str
|
message: str
|
||||||
field: Optional[str] = None
|
field: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class APIErrorResponse(BaseModel):
|
class APIErrorResponse(BaseModel):
|
||||||
"""Standard API error response."""
|
"""
|
||||||
|
Стандартный ответ API об ошибке.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
success: Всегда False для ошибок.
|
||||||
|
errors: Список деталей ошибок.
|
||||||
|
message: Общее сообщение об ошибке.
|
||||||
|
"""
|
||||||
success: bool = False
|
success: bool = False
|
||||||
errors: list[ErrorDetail] = Field(default_factory=list)
|
errors: list[ErrorDetail] = Field(default_factory=list)
|
||||||
message: Optional[str] = None
|
message: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class City(BaseModel):
|
class City(BaseModel):
|
||||||
"""City information."""
|
"""
|
||||||
|
Город из справочника.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID города.
|
||||||
|
name: Название города.
|
||||||
|
country_id: ID страны.
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
name: str
|
name: str
|
||||||
country_id: Optional[int] = None
|
country_id: Optional[int] = None
|
||||||
|
|
||||||
|
|
||||||
class Country(BaseModel):
|
class Country(BaseModel):
|
||||||
"""Country information."""
|
"""
|
||||||
|
Страна из справочника.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID страны.
|
||||||
|
name: Название страны.
|
||||||
|
code: Код страны (ISO).
|
||||||
|
cities: Список городов в стране.
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
name: str
|
name: str
|
||||||
code: Optional[str] = None
|
code: Optional[str] = None
|
||||||
@ -175,23 +348,47 @@ class Country(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class TimeZone(BaseModel):
|
class TimeZone(BaseModel):
|
||||||
"""Timezone information."""
|
"""
|
||||||
|
Часовой пояс.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID.
|
||||||
|
name: Название пояса.
|
||||||
|
offset: Смещение от UTC (например, "+03:00").
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
name: str
|
name: str
|
||||||
offset: str # e.g., "+03:00"
|
offset: str
|
||||||
|
|
||||||
|
|
||||||
class Feature(BaseModel):
|
class Feature(BaseModel):
|
||||||
"""Feature/addon information."""
|
"""
|
||||||
|
Дополнительная функция (feature) для кворка.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID функции.
|
||||||
|
name: Название.
|
||||||
|
description: Описание.
|
||||||
|
price: Стоимость в рублях.
|
||||||
|
type: Тип: "extra", "premium", etc.
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
name: str
|
name: str
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
price: float
|
price: float
|
||||||
type: str # extra, premium, etc.
|
type: str
|
||||||
|
|
||||||
|
|
||||||
class Badge(BaseModel):
|
class Badge(BaseModel):
|
||||||
"""User badge information."""
|
"""
|
||||||
|
Значок (достижение) пользователя.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Уникальный ID значка.
|
||||||
|
name: Название значка.
|
||||||
|
description: Описание достижения.
|
||||||
|
icon_url: URL иконки значка.
|
||||||
|
"""
|
||||||
id: int
|
id: int
|
||||||
name: str
|
name: str
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
@ -200,7 +397,16 @@ class Badge(BaseModel):
|
|||||||
|
|
||||||
# Generic response wrapper
|
# Generic response wrapper
|
||||||
class DataResponse(BaseModel):
|
class DataResponse(BaseModel):
|
||||||
"""Generic data response wrapper."""
|
"""
|
||||||
|
Универсальный ответ API с данными.
|
||||||
|
|
||||||
|
Используется как обёртка для различных ответов API.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
success: Успешность запроса.
|
||||||
|
data: Полезные данные (словарь).
|
||||||
|
message: Дополнительное сообщение.
|
||||||
|
"""
|
||||||
success: bool = True
|
success: bool = True
|
||||||
data: Optional[dict[str, Any]] = None
|
data: Optional[dict[str, Any]] = None
|
||||||
message: Optional[str] = None
|
message: Optional[str] = None
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user