diff --git a/.coverage b/.coverage deleted file mode 100644 index 0182f43..0000000 Binary files a/.coverage and /dev/null differ diff --git a/site/404.html b/site/404.html deleted file mode 100644 index 494516a..0000000 --- a/site/404.html +++ /dev/null @@ -1,601 +0,0 @@ - - - -
- - - - - - - - - - - - - - - - - - - -kwork-api — асинхронный Python клиент для Kwork.ru API с полной типизацией и документацией.
-┌─────────────────────────────────────────────────────────┐
-│ User Application │
-└─────────────────────────────────────────────────────────┘
- │
- ▼
-┌─────────────────────────────────────────────────────────┐
-│ KworkClient │
-│ ┌──────────────────────────────────────────────────┐ │
-│ │ Authentication Layer │ │
-│ │ - login() / token auth │ │
-│ │ - Session management │ │
-│ └──────────────────────────────────────────────────┘ │
-│ ┌──────────────────────────────────────────────────┐ │
-│ │ API Groups │ │
-│ │ - catalog, projects, user, reference, ... │ │
-│ └──────────────────────────────────────────────────┘ │
-│ ┌──────────────────────────────────────────────────┐ │
-│ │ HTTP Layer (httpx) │ │
-│ │ - HTTP/2 support │ │
-│ │ - Timeout handling │ │
-│ │ - Error handling │ │
-│ └──────────────────────────────────────────────────┘ │
-└─────────────────────────────────────────────────────────┘
- │
- ▼
-┌─────────────────────────────────────────────────────────┐
-│ Kwork.ru API (HTTPS) │
-└─────────────────────────────────────────────────────────┘
-kwork-api/
-├── src/kwork_api/
-│ ├── __init__.py # Public API
-│ ├── client.py # KworkClient + API groups
-│ ├── models.py # Pydantic models
-│ └── errors.py # Exception classes
-│
-├── tests/
-│ ├── test_client.py # Client tests
-│ ├── test_models.py # Model tests
-│ └── test_all_endpoints.py # Endpoint tests
-│
-├── docs/
-│ ├── index.md # Quick start
-│ ├── api-reference.md # API docs
-│ ├── RELEASE.md # Release guide
-│ └── ARCHITECTURE.md # This file
-│
-├── .github/workflows/
-│ └── ci.yml # CI/CD pipeline
-│
-├── pyproject.toml # Project config
-├── uv.lock # Dependencies lock
-└── README.md # Main documentation
-Ответственность: Основное взаимодействие с API
-Функции: -- Аутентификация (login / token) -- Управление сессией -- Делегирование API группам
-API Groups: -
client.catalog # CatalogAPI
-client.projects # ProjectsAPI
-client.user # UserAPI
-client.reference # ReferenceAPI
-client.notifications # NotificationsAPI
-client.other # OtherAPI
-Ответственность: Валидация и типизация ответов API
-Категории: -- User models: KworkUser, AuthResponse -- Kwork models: Kwork, KworkDetails, KworkCategory -- Project models: Project, ProjectsResponse -- Review models: Review, ReviewsResponse -- Notification models: Notification, Dialog -- Reference models: City, Country, TimeZone, Feature, Badge -- Error models: ErrorDetail, APIErrorResponse
-Ответственность: Обработка ошибок API
-Иерархия: -
KworkError (base)
-├── KworkAuthError # 401, 403
-├── KworkApiError # 4xx, 5xx
-│ ├── KworkNotFoundError # 404
-│ ├── KworkRateLimitError # 429
-│ └── KworkValidationError # 400
-└── KworkNetworkError # Network issues
-Ответственность: HTTP запросы
-Функции: -- HTTP/2 поддержка -- Таймауты -- Cookies management -- Token authentication -- Error handling
-User → KworkClient.login(username, password)
- │
- ▼
- POST /signIn (cookies)
- │
- ▼
- POST /getWebAuthToken (token)
- │
- ▼
- Store token + cookies
- │
- ▼
- Return authenticated client
-User → client.catalog.get_list(page=1)
- │
- ▼
- CatalogAPI.get_list()
- │
- ▼
- KworkClient._request()
- │
- ▼
- httpx.AsyncClient.post()
- │
- ▼
- KworkClient._handle_response()
- │
- ▼
- CatalogResponse.model_validate()
- │
- ▼
- Return typed response
-Push/Tag → GitHub Actions
- │
- ├── Test Job
- │ ├── Install UV + Python
- │ ├── Run linters (ruff)
- │ ├── Run tests (pytest)
- │ └── Upload coverage
- │
- ├── Build Job
- │ ├── Build wheel + sdist
- │ └── Upload artifacts
- │
- ├── Publish Job (on tag)
- │ ├── Download artifacts
- │ └── Publish to Gitea Registry
- │
- └── Docs Job
- ├── Build MkDocs
- └── Upload site
-httpx[http2]>=0.26.0 — HTTP clientpydantic>=2.0.0 — Data validationstructlog>=24.0.0 — Loggingpytest>=8.0.0 — Testingpytest-cov>=4.0.0 — Coveragepytest-asyncio>=0.23.0 — Async testsrespx>=0.20.0 — HTTP mockingruff>=0.3.0 — Lintingmkdocs + mkdocstrings — DocumentationMIT License — свободное использование с указанием авторства.
- - - - - - - - - - - - - -Gitea Pages — аналог GitHub Pages для хостинга статических сайтов напрямую из Gitea.
-URL документации: https://git.much-data.ru/claw/kwork-api/
gh-pages branch/ (root)write:repositorywrite:packageGITEA_TOKEN = твой токенcd /root/kwork-api
-
-# Собрать документацию
-uv run mkdocs build
-
-# Проверить что site/ создан
-ls -la site/
-
-# Закоммитить и запушить
-git add .
-git commit -m "docs: initial documentation"
-git push origin main
-
-# CI/CD автоматически задеплоит на gh-pages
-После успешного CI/CD:
-Документация доступна: -
https://git.much-data.ru/claw/kwork-api/
-Или если включён custom domain: -
https://kwork-api.much-data.ru/
-Workflow срабатывает при:
-- ✅ Push в main ветку
-- ✅ Создании тега релиза
Что делает:
-1. Собирает MkDocs документацию
-2. Пушит в gh-pages ветку
-3. Gitea Pages автоматически обновляет сайт
# В панели управления доменом much-data.ru
-
-# CNAME запись:
-kwork-api CNAME git.much-data.ru
-
-# Или A запись:
-kwork-api A 5.188.26.192
-kwork-api.much-data.ru# В корне проекта (не в site/)
-echo "kwork-api.much-data.ru" > static/CNAME
-git add static/CNAME
-git commit -m "docs: add custom domain"
-git push
-main (исходный код)
-├── src/
-├── docs/
-├── mkdocs.yml
-└── .github/workflows/ci.yml
-
-gh-pages (автоматически, только сайт)
-├── index.html
-├── api-reference/
-├── search/
-└── ...
-# Проверить что Gitea версия >= 1.19
-# Админ должен включить Pages в настройках сервера
-# Проверить токен
-# Проверить права токена (write:repository)
-# Проверить что gh-pages ветка существует
-# Подождать 1-2 минуты (Gitea обрабатывает)
-# Проверить что site/ не пустой
-# Проверить workflow логи
-GITEA_TOKEN)Если Gitea Pages не работает:
-# Подключить репозиторий
-# Build command: uv run mkdocs build
-# Publish directory: site/
-# Аналогично Netlify
-# Автоматический деплой из Git
-# Быстрый CDN
-# Автоматический HTTPS
-# Скопировать site/ на сервер
-# Настроить nginx на /var/www/kwork-api-docs/
-Используем SemVer (Semantic Versioning): MAJOR.MINOR.PATCH
# Убедись что все тесты проходят
-uv run pytest
-
-# Проверь линтеры
-uv run ruff check src/ tests/
-
-# Проверь сборку
-uv build
-# Обновить версию в pyproject.toml
-# Например: 0.1.0 → 0.1.1
-
-# Создать тег
-git tag -a v0.1.1 -m "Release v0.1.1"
-
-# Отпушить тег
-git push origin v0.1.1
-После пуша тега: -1. ✅ Запускается CI/CD pipeline -2. ✅ Прогоняются тесты -3. ✅ Собирается пакет -4. ✅ Публикуется в Gitea Registry
-URL: https://git.much-data.ru/api/packages/claw/pypi
Установка: -
# Создать .pypirc в домашней директории
-cat > ~/.pypirc << EOF
-[pypi]
-username = claw
-password = YOUR_GITEA_TOKEN
-
-[git.much-data.ru]
-repository = https://git.much-data.ru/api/packages/claw/pypi
-username = claw
-password = YOUR_GITEA_TOKEN
-EOF
-
-# Установить из Gitea
-uv pip install kwork-api --index-url https://git.much-data.ru/api/packages/claw/pypi
-write:packageGITEA_TOKENВедётся в CHANGELOG.md по формату Keep a Changelog.
## [0.1.1] - 2026-03-23
-
-### Fixed
-- Исправлена ошибка аутентификации при истечении токена
-
-### Changed
-- Обновлены зависимости
-
-## [0.1.0] - 2026-03-23
-
-### Added
-- Первый релиз
-- Базовая функциональность клиента
-- Документация 100%
-# Собрать
-uv build
-
-# Опубликовать
-uv publish \
- --publish-url https://git.much-data.ru/api/packages/claw/pypi \
- --token YOUR_GITEA_TOKEN
-python-semantic-release автоматически определяет версию на основе Conventional Commits.
-Как работает: -
Commit → Анализ сообщения → Определение типа → Bump версии → Тег → Релиз
-<type>(<scope>): <description>
-
-[optional body]
-
-[optional footer]
-| Тип | -Влияние | -Пример | -Версия | -
|---|---|---|---|
feat |
-MINOR | -feat: add new API endpoint |
-0.1.0 → 0.2.0 | -
fix |
-PATCH | -fix: handle timeout errors |
-0.1.0 → 0.1.1 | -
perf |
-PATCH | -perf: optimize HTTP requests |
-0.1.0 → 0.1.1 | -
feat + BREAKING |
-MAJOR | -feat: change auth method |
-0.1.0 → 1.0.0 | -
docs, style, refactor, test, chore, ci, build |
-Нет | -docs: update README |
-Без изменений | -
git commit -m "fix: handle 404 error in catalog API"
-git commit -m "fix(auth): restore session from token correctly"
-git commit -m "perf: reduce HTTP connection overhead"
-git commit -m "feat: add batch kwork details endpoint"
-git commit -m "feat(projects): add get_payer_orders method"
-git commit -m "feat: support HTTP/2 for faster requests"
-git commit -m "feat: redesign authentication flow
-
-BREAKING CHANGE: login() now returns KworkClient instead of tuple
-
-Migration:
- Before: token, cookies = await login(user, pass)
- After: client = await KworkClient.login(user, pass)
-"
-git commit -m "docs: add usage examples to README"
-git commit -m "test: increase coverage to 95%"
-git commit -m "style: fix formatting with ruff"
-git commit -m "refactor: simplify error handling"
-git commit -m "chore: update dependencies"
-git commit -m "ci: add Gitea Actions workflow"
-git commit -m "build: configure UV build system"
-# Делай коммиты по Conventional Commits
-git commit -m "feat: add new endpoint"
-git commit -m "fix: handle edge case"
-git commit -m "docs: update documentation"
-
-# Пуш в main
-git push origin main
-1. Тесты запускаются
-2. Сборка пакета
-3. Semantic Release анализирует коммиты
-4. Определяет тип версии (MAJOR/MINOR/PATCH)
-5. Обновляет версию в pyproject.toml и __init__.py
-6. Создаёт Git тег
-7. Генерирует CHANGELOG
-8. Создаёт релиз в Gitea
-9. Публикует пакет в Gitea Registry
-✅ v0.1.1 создан
-✅ CHANGELOG.md обновлён
-✅ Пакет опубликован
-✅ Релиз в Gitea создан
-cd /root/kwork-api
-uv run semantic-release version --print
-uv run semantic-release changelog
-# Bump версии
-uv run semantic-release version --no-push
-
-# Проверить что изменилось
-git diff
-
-# Запушить
-git push origin main --tags
-v0.1.0 (2026-03-23)
- - Initial release
- - Complete API client
- - 100% documentation
-
-v0.1.1 (2026-03-24)
- - fix: handle timeout errors
- - fix: restore session correctly
-
-v0.2.0 (2026-03-25)
- - feat: add batch endpoint
- - feat: support HTTP/2
-
-v0.2.1 (2026-03-26)
- - perf: optimize requests
-
-v1.0.0 (2026-03-27)
- - feat: new authentication
- - BREAKING CHANGE: API changed
-Файл: pyproject.toml
[tool.semantic_release]
-version_toml = ["pyproject.toml:project.version"]
-version_variables = ["src/kwork_api/__init__.py:__version__"]
-branch = "main"
-build_command = "uv build"
-commit_parser = "angular"
-tag_format = "v{version}"
-
-[tool.semantic_release.commit_parser_options]
-minor_tags = ["feat"]
-patch_tags = ["fix", "perf"]
-breaking_change_tags = ["feat"]
-
-[tool.semantic_release.remote]
-type = "gitea"
-domain = "https://git.much-data.ru"
-owner = "claw"
-repo_name = "kwork-api"
-# Значит не было коммитов с типами feat/fix/perf
-# Сделай коммит с правильным форматом
-git commit -m "feat: add something new"
-# Проверь токен
-# Settings → Applications → Create new token
-# Права: write:repository, write:package
-# Обнови секрет в Gitea Actions
-# Проверь конфигурацию
-uv run semantic-release --version
-
-# Проверь что __version__ есть в __init__.py
-grep "__version__" src/kwork_api/__init__.py
-# Атомарные коммиты
-git commit -m "feat: add user endpoint"
-git commit -m "fix: handle 404 error"
-
-# Понятные описания
-git commit -m "fix: restore session from saved token"
-
-# Scope для больших изменений
-git commit -m "feat(auth): add OAuth2 support"
-# Слишком общие
-git commit -m "fix stuff"
-
-# Несколько изменений в одном
-git commit -m "feat: add user endpoint and fix auth and update docs"
-
-# Не по формату
-git commit -m "added new feature"
-KworkClient(
- token=None, cookies=None, timeout=30.0, base_url=None
-)
-Асинхронный клиент для Kwork.ru API.
-Предоставляет доступ ко всем основным эндпоинтам Kwork API: -- Каталог кворков и поиск -- Биржа проектов (фриланс заказы) -- Пользовательские данные и отзывы -- Уведомления и сообщения -- Справочные данные (города, страны, категории)
- - -Клиент использует двухэтапную аутентификацию Kwork: -1. POST /signIn — получение session cookies -2. POST /getWebAuthToken — получение web_auth_token
-async with await KworkClient.login("username", "password") as client: - catalog = await client.catalog.get_list(page=1)
-client = KworkClient(token="saved_web_auth_token") -user_info = await client.user.get_info()
-projects = await client.projects.get_list(page=1) -my_orders = await client.projects.get_payer_orders()
-Attributes:
-| Name | -Type | -Description | -
|---|---|---|
catalog |
-
- CatalogAPI
- |
-
-
-
- Доступ к каталогу кворков - |
-
projects |
-
- ProjectsAPI
- |
-
-
-
- Доступ к бирже проектов - |
-
user |
-
- UserAPI
- |
-
-
-
- Пользовательские эндпоинты - |
-
reference |
-
- ReferenceAPI
- |
-
-
-
- Справочные данные - |
-
notifications |
-
- NotificationsAPI
- |
-
-
-
- Уведомления и сообщения - |
-
other |
-
- OtherAPI
- |
-
-
-
- Прочие эндпоинты - |
-
Клиент поддерживает context manager для автоматического закрытия соединения.
-Рекомендуется использовать async with для корректного освобождения ресурсов.
Инициализация клиента.
-Создаёт неаутентифицированный клиент или восстанавливает сессию -по ранее полученному токену.
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- token
- |
-
- Optional[str]
- |
-
-
-
- Web auth token, полученный через |
-
- None
- |
-
- cookies
- |
-
- Optional[dict[str, str]]
- |
-
-
-
- Session cookies из предыдущей аутентификации. - Обычно не требуется — устанавливаются автоматически из token. - |
-
- None
- |
-
- timeout
- |
-
- float
- |
-
-
-
- Таймаут HTTP запросов в секундах. По умолчанию 30 секунд. - |
-
- 30.0
- |
-
- base_url
- |
-
- Optional[str]
- |
-
-
-
- Кастомный базовый URL. Используется только для тестирования. - |
-
- None
- |
-
client = KworkClient()
-client = KworkClient(token="eyJ0eXAiOiJKV1QiLCJhbGc...")
-client = KworkClient(timeout=60.0)
-Для полноценной работы API требуется аутентификация.
-Используйте login() или передайте сохранённый token.
src/kwork_api/client.py92 - 93 - 94 - 95 - 96 - 97 - 98 - 99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 | |
property
-
-
-¶cookies
-Session cookies.
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, str]
- |
-
-
-
- Словарь cookies включая web_auth_token. - |
-
property
-
-
-¶credentials
-Учётные данные для восстановления сессии.
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Optional[str]]
- |
-
-
-
- Словарь с token и cookies для передачи в KworkClient(). - |
-
property
-
-
-¶token
-Web auth token для аутентификации.
- - -Returns:
-| Type | -Description | -
|---|---|
- Optional[str]
- |
-
-
-
- Токен или None если клиент не аутентифицирован. - |
-
CatalogAPI(client)
-API каталога кворков.
-Предоставляет доступ к каталогу услуг Kwork: -- Поиск и фильтрация кворков -- Получение детальной информации -- Категории и сортировка
- - -catalog = await client.catalog.get_list(page=1)
-catalog = await client.catalog.get_list(category_id=5)
-details = await client.catalog.get_details(kwork_id=12345)
-src/kwork_api/client.py419 -420 | |
async
-
-
-¶get_details(kwork_id)
-Получить полную информацию о кворке.
-Возвращает расширенную информацию о кворке включая: -- Полное описание и требования -- Сроки выполнения и количество правок -- Дополнительные опции (features) -- FAQ от продавца
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- kwork_id
- |
-
- int
- |
-
-
-
- Уникальный идентификатор кворка. - |
- - required - | -
Returns:
-| Type | -Description | -
|---|---|
- KworkDetails
- |
-
-
-
- KworkDetails с полной информацией о кворке. - |
-
Raises:
-| Type | -Description | -
|---|---|
- KworkNotFoundError
- |
-
-
-
- Если кворк с таким ID не найден. - |
-
details = await client.catalog.get_details(12345) -print(f"Название: {details.title}") -print(f"Цена: {details.price} {details.currency}") -print(f"Срок: {details.delivery_time} дней") -print(f"Правки: {details.revisions}")
-src/kwork_api/client.py478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 | |
async
-
-
-¶get_details_extra(kwork_id)
-Получить дополнительные детали кворка.
-Возвращает расширенную информацию, которая не включена -в основной ответ get_details(). Может содержать: -- Дополнительные изображения -- Видео обзоры -- Детали пакетов услуг -- Статистику продаж
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- kwork_id
- |
-
- int
- |
-
-
-
- Уникальный идентификатор кворка. - |
- - required - | -
Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Словарь с дополнительными данными. Структура зависит - |
-
- dict[str, Any]
- |
-
-
-
- от конкретного кворка и не гарантируется стабильной. - |
-
Этот эндпоинт возвращает "сырые" данные без валидации. -Структура ответа может измениться без предупреждения.
-src/kwork_api/client.py511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 | |
async
-
-
-¶get_list(page=1, category_id=None, sort='recommend')
-Получить список кворков из каталога.
-Основной эндпоинт для поиска и просмотра кворков. -Возвращает пагинированный список с возможностью фильтрации.
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- page
- |
-
- int
- |
-
-
-
- Номер страницы для пагинации (начиная с 1). - |
-
- 1
- |
-
- category_id
- |
-
- Optional[int]
- |
-
-
-
- ID категории для фильтрации. - Если None — все категории. - |
-
- None
- |
-
- sort
- |
-
- str
- |
-
-
-
- Опция сортировки. Варианты: - - "recommend" — по рекомендации (по умолчанию) - - "price_asc" — по возрастанию цены - - "price_desc" — по убыванию цены - - "rating" — по рейтингу - - "reviews" — по количеству отзывов - - "newest" — по дате создания - |
-
- 'recommend'
- |
-
Returns:
-| Type | -Description | -
|---|---|
- CatalogResponse
- |
-
-
-
- CatalogResponse содержащий: - |
-
- CatalogResponse
- |
-
-
-
-
|
-
- CatalogResponse
- |
-
-
-
-
|
-
- CatalogResponse
- |
-
-
-
-
|
-
- CatalogResponse
- |
-
-
-
-
|
-
response = await client.catalog.get_list( - page=1, - sort="price_asc" -)
-for kwork in response.kworks: - print(f"{kwork.title}: {kwork.price} RUB")
-if response.pagination and response.pagination.has_next: - next_page = await client.catalog.get_list(page=2)
-src/kwork_api/client.py422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 | |
NotificationsAPI(client)
-API уведомлений и сообщений.
-Предоставляет доступ к системе уведомлений Kwork: -- Список уведомлений -- Получение новых уведомлений -- Диалоги с пользователями -- Заблокированные диалоги
- - -notifications = await client.notifications.get_list()
-new = await client.notifications.fetch()
-dialogs = await client.notifications.get_dialogs()
-src/kwork_api/client.py892 -893 | |
async
-
-
-¶fetch()
-Получить новые уведомления.
-Отличается от get_list() тем, что возвращает только -уведомления, появившиеся с момента последнего запроса. -Также может обновлять счётчик непрочитанных.
- - -Returns:
-| Type | -Description | -
|---|---|
- NotificationsResponse
- |
-
-
-
- NotificationsResponse с новыми уведомлениями. - |
-
new_notifs = await client.notifications.fetch() -if new_notifs.unread_count > 0: - print(f"У вас {new_notifs.unread_count} новых уведомлений!")
-src/kwork_api/client.py918 -919 -920 -921 -922 -923 -924 -925 -926 -927 -928 -929 -930 -931 -932 -933 -934 -935 | |
async
-
-
-¶get_blocked_dialogs()
-Получить список заблокированных диалогов.
-Возвращает диалоги с пользователями, которые были -заблокированы текущим пользователем.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Dialog]
- |
-
-
-
- Список заблокированных диалогов. - |
-
blocked = await client.notifications.get_blocked_dialogs() -print(f"Заблокировано: {len(blocked)} пользователей")
-src/kwork_api/client.py955 -956 -957 -958 -959 -960 -961 -962 -963 -964 -965 -966 -967 -968 -969 -970 | |
async
-
-
-¶get_dialogs()
-Получить список диалогов (чатов).
-Возвращает все активные диалоги пользователя с другими -пользователями Kwork.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Dialog]
- |
-
-
-
- Список диалогов с последней перепиской. - |
-
dialogs = await client.notifications.get_dialogs() -for d in dialogs: - print(f"С {d.participant.username}: {d.last_message}")
-src/kwork_api/client.py937 -938 -939 -940 -941 -942 -943 -944 -945 -946 -947 -948 -949 -950 -951 -952 -953 | |
async
-
-
-¶get_list()
-Получить список всех уведомлений.
-Возвращает все уведомления пользователя с информацией -о прочтении.
- - -Returns:
-| Type | -Description | -
|---|---|
- NotificationsResponse
- |
-
-
-
- NotificationsResponse содержащий: - |
-
- NotificationsResponse
- |
-
-
-
-
|
-
- NotificationsResponse
- |
-
-
-
-
|
-
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}")
-src/kwork_api/client.py895 -896 -897 -898 -899 -900 -901 -902 -903 -904 -905 -906 -907 -908 -909 -910 -911 -912 -913 -914 -915 -916 | |
OtherAPI(client)
-Прочее API.
-Вспомогательные эндпоинты которые не вошли в другие категории: -- Пользовательские настройки и предпочтения (wants) -- Статусы кворков и заказов -- Персональные предложения (offers) -- Настройки профиля -- Статус онлайн/оффлайн
- - -wants = await client.other.get_wants()
-status = await client.other.get_kworks_status()
-await client.other.go_offline()
-src/kwork_api/client.py996 -997 | |
async
-
-
-¶get_actor()
-Получить информацию об актёре (текущем пользователе).
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Данные актёра/пользователя. - |
-
src/kwork_api/client.py1173 -1174 -1175 -1176 -1177 -1178 -1179 -1180 | |
async
-
-
-¶get_channel()
-Получить информацию о канале пользователя.
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Данные канала (если есть). - |
-
src/kwork_api/client.py1060 -1061 -1062 -1063 -1064 -1065 -1066 -1067 | |
async
-
-
-¶get_exchange_info()
-Получить информацию об обмене валюты.
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Информация о курсах валют и обмене. - |
-
src/kwork_api/client.py1051 -1052 -1053 -1054 -1055 -1056 -1057 -1058 | |
async
-
-
-¶get_favorite_categories()
-Получить ID избранных категорий.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[int]
- |
-
-
-
- Список ID категорий, добавленных в избранное. - |
-
cats = await client.other.get_favorite_categories() -print(f"Избранные категории: {cats}")
-src/kwork_api/client.py1126 -1127 -1128 -1129 -1130 -1131 -1132 -1133 -1134 -1135 -1136 -1137 -1138 | |
async
-
-
-¶get_in_app_notification()
-Получить внутриприложенное уведомление.
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Данные in-app уведомления. - |
-
src/kwork_api/client.py1069 -1070 -1071 -1072 -1073 -1074 -1075 -1076 | |
async
-
-
-¶get_kworks_status()
-Получить статусы кворков пользователя.
-Возвращает информацию о статусах всех кворков -текущего пользователя (активен, на модерации, и т.д.).
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Словарь со статусами кворков. - |
-
status = await client.other.get_kworks_status() -print(status)
-src/kwork_api/client.py1026 -1027 -1028 -1029 -1030 -1031 -1032 -1033 -1034 -1035 -1036 -1037 -1038 -1039 -1040 | |
async
-
-
-¶get_offers()
-Получить персональные предложения.
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Список персональных предложений от Kwork. - |
-
src/kwork_api/client.py1042 -1043 -1044 -1045 -1046 -1047 -1048 -1049 | |
async
-
-
-¶get_security_user_data()
-Получить данные безопасности пользователя.
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Информация о безопасности аккаунта. - |
-
src/kwork_api/client.py1078 -1079 -1080 -1081 -1082 -1083 -1084 -1085 | |
async
-
-
-¶get_viewed_kworks()
-Получить просмотренные кворки.
-Возвращает список кворков, которые пользователь -просматривал ранее.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Kwork]
- |
-
-
-
- Список просмотренных кворков. - |
-
viewed = await client.other.get_viewed_kworks() -print(f"Просмотрено: {len(viewed)} кворков")
-src/kwork_api/client.py1109 -1110 -1111 -1112 -1113 -1114 -1115 -1116 -1117 -1118 -1119 -1120 -1121 -1122 -1123 -1124 | |
async
-
-
-¶get_wants()
-Получить пользовательские предпочтения (wants).
-Wants — это настройки интересов пользователя: -- Предпочитаемые категории -- Ключевые слова для мониторинга -- Фильтры для поиска
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Словарь с настройками предпочтений. - |
-
wants = await client.other.get_wants() -print(wants)
-src/kwork_api/client.py999 -1000 -1001 -1002 -1003 -1004 -1005 -1006 -1007 -1008 -1009 -1010 -1011 -1012 -1013 -1014 -1015 | |
async
-
-
-¶get_wants_status()
-Получить статус предпочтений.
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Статус wants с метаданными. - |
-
src/kwork_api/client.py1017 -1018 -1019 -1020 -1021 -1022 -1023 -1024 | |
async
-
-
-¶go_offline()
-Установить статус пользователя "оффлайн".
-Скрывает онлайн-статус от других пользователей.
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Подтверждение изменения статуса. - |
-
await client.other.go_offline()
-src/kwork_api/client.py1159 -1160 -1161 -1162 -1163 -1164 -1165 -1166 -1167 -1168 -1169 -1170 -1171 | |
async
-
-
-¶is_dialog_allow(user_id)
-Проверить возможность начала диалога с пользователем.
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- user_id
- |
-
- int
- |
-
-
-
- ID пользователя для проверки. - |
- - required - | -
Returns:
-| Type | -Description | -
|---|---|
- bool
- |
-
-
-
- True если диалог разрешён, False иначе. - |
-
allowed = await client.other.is_dialog_allow(12345) -if allowed: - print("Можно написать сообщение")
-src/kwork_api/client.py1087 -1088 -1089 -1090 -1091 -1092 -1093 -1094 -1095 -1096 -1097 -1098 -1099 -1100 -1101 -1102 -1103 -1104 -1105 -1106 -1107 | |
async
-
-
-¶update_settings(settings)
-Обновить настройки пользователя.
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- settings
- |
-
- dict[str, Any]
- |
-
-
-
- Словарь с настройками для обновления. - Структура зависит от конкретных настроек. - |
- - required - | -
Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Ответ API с подтверждением обновления. - |
-
await client.other.update_settings({ - "email_notifications": True, - "language": "ru" -})
-src/kwork_api/client.py1140 -1141 -1142 -1143 -1144 -1145 -1146 -1147 -1148 -1149 -1150 -1151 -1152 -1153 -1154 -1155 -1156 -1157 | |
async
-
-
-¶validate_text(text, context=None)
-Проверить текст на соответствие требованиям Kwork.
-Эндпоинт валидации текста используется для проверки: -- Описаний кворков -- Текстов проектов -- Сообщений и отзывов
-Находит потенциальные проблемы: -- Запрещённые слова и контакты -- Нарушения правил площадки -- Проблемы с форматированием
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- text
- |
-
- str
- |
-
-
-
- Текст для проверки. - |
- - required - | -
- context
- |
-
- Optional[str]
- |
-
-
-
- Контекст использования (опционально). - Например: "kwork_description", "project_text", "message". - |
-
- None
- |
-
Returns:
-| Type | -Description | -
|---|---|
- ValidationResponse
- |
-
-
-
- ValidationResponse с результатами валидации. - |
-
result = await client.other.validate_text( - "Отличный сервис, звоните +7-999-000-00-00" -) -if not result.is_valid: - print("Текст не прошёл валидацию:") - for issue in result.issues: - print(f" - {issue.message}")
-src/kwork_api/client.py1182 -1183 -1184 -1185 -1186 -1187 -1188 -1189 -1190 -1191 -1192 -1193 -1194 -1195 -1196 -1197 -1198 -1199 -1200 -1201 -1202 -1203 -1204 -1205 -1206 -1207 -1208 -1209 -1210 -1211 -1212 -1213 -1214 -1215 -1216 -1217 -1218 -1219 -1220 -1221 -1222 | |
ProjectsAPI(client)
-API биржи проектов (фриланс заказы).
-Предоставляет доступ к заказам на фриланс: -- Просмотр открытых проектов -- Заказы где вы заказчик (payer) -- Заказы где вы исполнитель (worker)
- - -projects = await client.projects.get_list(page=1)
-my_orders = await client.projects.get_payer_orders()
-my_work = await client.projects.get_worker_orders()
-src/kwork_api/client.py561 -562 | |
async
-
-
-¶get_list(page=1, category_id=None)
-Получить список проектов с биржи.
-Основной эндпоинт для просмотра доступных заказов. -Возвращает пагинированный список проектов.
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- page
- |
-
- int
- |
-
-
-
- Номер страницы (начиная с 1). - |
-
- 1
- |
-
- category_id
- |
-
- Optional[int]
- |
-
-
-
- ID категории для фильтрации. - Если None — все категории. - |
-
- None
- |
-
Returns:
-| Type | -Description | -
|---|---|
- ProjectsResponse
- |
-
-
-
- ProjectsResponse содержащий: - |
-
- ProjectsResponse
- |
-
-
-
-
|
-
- ProjectsResponse
- |
-
-
-
-
|
-
response = await client.projects.get_list(page=1)
-for project in response.projects: - print(f"{project.title}: {project.budget} {project.budget_type}")
-dev_projects = await client.projects.get_list( - page=1, - category_id=5 -)
-src/kwork_api/client.py564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 | |
async
-
-
-¶get_payer_orders()
-Получить заказы где вы являетесь заказчиком.
-Возвращает все проекты, созданные текущим пользователем, -независимо от их статуса (открыт, в работе, завершён).
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Project]
- |
-
-
-
- Список проектов где текущий пользователь — заказчик. - |
-
orders = await client.projects.get_payer_orders() -for order in orders: - print(f"Заказ #{order.id}: {order.status}")
-src/kwork_api/client.py608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 | |
async
-
-
-¶get_worker_orders()
-Получить заказы где вы являетесь исполнителем.
-Возвращает все проекты, где текущий пользователь -назначен исполнителем.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Project]
- |
-
-
-
- Список проектов где текущий пользователь — исполнитель. - |
-
work = await client.projects.get_worker_orders() -active = [p for p in work if p.status == "in_progress"] -print(f"Активных заказов: {len(active)}")
-src/kwork_api/client.py626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 | |
ReferenceAPI(client)
-Справочное API.
-Предоставляет доступ к справочным данным Kwork: -- Города, страны, часовые пояса -- Доступные функции и дополнения -- Значки пользователей
-Эти данные редко меняются и могут быть закэшированы.
- - -countries = await client.reference.get_countries()
-cities = await client.reference.get_cities()
-features = await client.reference.get_features()
-src/kwork_api/client.py769 -770 | |
async
-
-
-¶get_badges_info()
-Получить информацию о значках пользователей.
-Значки (badges) отображают достижения и статусы: -- "Профессионал" -- "Быстрый ответ" -- "Надёжный продавец" -- и т.д.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Badge]
- |
-
-
-
- Список значков с описаниями и иконками. - |
-
badges = await client.reference.get_badges_info() -for badge in badges: - print(f"{badge.name}: {badge.description}")
-src/kwork_api/client.py848 -849 -850 -851 -852 -853 -854 -855 -856 -857 -858 -859 -860 -861 -862 -863 -864 -865 -866 -867 | |
async
-
-
-¶get_cities()
-Получить список всех городов.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[City]
- |
-
-
-
- Список всех городов из справочника Kwork. - |
-
cities = await client.reference.get_cities() -moscow = next(c for c in cities if c.name == "Москва")
-src/kwork_api/client.py772 -773 -774 -775 -776 -777 -778 -779 -780 -781 -782 -783 -784 | |
async
-
-
-¶get_countries()
-Получить список всех стран.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Country]
- |
-
-
-
- Список всех стран с кодами и городами. - |
-
countries = await client.reference.get_countries() -russia = next(c for c in countries if c.code == "RU")
-src/kwork_api/client.py786 -787 -788 -789 -790 -791 -792 -793 -794 -795 -796 -797 -798 | |
async
-
-
-¶get_features()
-Получить доступные дополнительные функции (features).
-Features — это платные дополнения к кворкам: -- Увеличенные сроки -- Дополнительные правки -- Приоритетная поддержка -- и т.д.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Feature]
- |
-
-
-
- Список доступных features с названиями и ценами. - |
-
features = await client.reference.get_features() -for f in features: - print(f"{f.name}: {f.price} RUB")
-src/kwork_api/client.py814 -815 -816 -817 -818 -819 -820 -821 -822 -823 -824 -825 -826 -827 -828 -829 -830 -831 -832 -833 | |
async
-
-
-¶get_public_features()
-Получить публичные функции.
-Аналогично get_features(), но возвращает только -публично доступные опции.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Feature]
- |
-
-
-
- Список публичных features. - |
-
src/kwork_api/client.py835 -836 -837 -838 -839 -840 -841 -842 -843 -844 -845 -846 | |
async
-
-
-¶get_timezones()
-Получить список всех часовых поясов.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[TimeZone]
- |
-
-
-
- Список часовых поясов с названиями и смещениями. - |
-
timezones = await client.reference.get_timezones() -msks = next(tz for tz in timezones if "Moscow" in tz.name)
-src/kwork_api/client.py800 -801 -802 -803 -804 -805 -806 -807 -808 -809 -810 -811 -812 | |
UserAPI(client)
-Пользовательское API.
-Предоставляет доступ к данным текущего пользователя: -- Профиль и информация об аккаунте -- Отзывы (полученные и оставленные) -- Избранные кворки
- - -info = await client.user.get_info()
-reviews = await client.user.get_reviews()
-favorites = await client.user.get_favorite_kworks()
-src/kwork_api/client.py666 -667 | |
async
-
-
-¶get_favorite_kworks()
-Получить список избранных кворков.
-Возвращает все кворки, добавленные пользователем в избранное.
- - -Returns:
-| Type | -Description | -
|---|---|
- list[Kwork]
- |
-
-
-
- Список избранных кворков. - |
-
favorites = await client.user.get_favorite_kworks() -for kwork in favorites: - print(f"{kwork.title}: {kwork.price} RUB")
-src/kwork_api/client.py728 -729 -730 -731 -732 -733 -734 -735 -736 -737 -738 -739 -740 -741 -742 -743 | |
async
-
-
-¶get_info()
-Получить информацию о текущем пользователе.
-Возвращает основные данные аккаунта: -- ID, username, email -- Баланс, рейтинг -- Статус верификации -- Настройки профиля
- - -Returns:
-| Type | -Description | -
|---|---|
- dict[str, Any]
- |
-
-
-
- Словарь с информацией о пользователе. - |
-
- dict[str, Any]
- |
-
-
-
- Структура зависит от ответа API. - |
-
info = await client.user.get_info() -print(f"User: {info.get('username')}") -print(f"Balance: {info.get('balance')} RUB")
-src/kwork_api/client.py669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 | |
async
-
-
-¶get_reviews(user_id=None, page=1)
-Получить отзывы пользователя.
-Если user_id не указан — возвращает отзывы текущего пользователя. -Если указан — отзывы другого пользователя по ID.
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- user_id
- |
-
- Optional[int]
- |
-
-
-
- ID пользователя. Если None — текущий пользователь. - |
-
- None
- |
-
- page
- |
-
- int
- |
-
-
-
- Номер страницы для пагинации (начиная с 1). - |
-
- 1
- |
-
Returns:
-| Type | -Description | -
|---|---|
- ReviewsResponse
- |
-
-
-
- ReviewsResponse содержащий: - |
-
- ReviewsResponse
- |
-
-
-
-
|
-
- ReviewsResponse
- |
-
-
-
-
|
-
- ReviewsResponse
- |
-
-
-
-
|
-
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)
-src/kwork_api/client.py690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 -703 -704 -705 -706 -707 -708 -709 -710 -711 -712 -713 -714 -715 -716 -717 -718 -719 -720 -721 -722 -723 -724 -725 -726 | |
async
-
-
-¶close()
-Close HTTP client.
- - -src/kwork_api/client.py315 -316 -317 -318 | |
async
- classmethod
-
-
-¶login(username, password, timeout=30.0)
-Аутентификация по логину и паролю.
-Выполняет двухэтапный процесс аутентификации Kwork: -1. POST /signIn — проверка учётных данных, получение session cookies -2. POST /getWebAuthToken — обмен cookies на web_auth_token
-Полученный токен и cookies сохраняются в клиенте для последующих запросов.
- - -Parameters:
-| Name | -Type | -Description | -Default | -
|---|---|---|---|
- username
- |
-
- str
- |
-
-
-
- Логин или email аккаунта Kwork. - |
- - required - | -
- password
- |
-
- str
- |
-
-
-
- Пароль аккаунта Kwork. - |
- - required - | -
- timeout
- |
-
- float
- |
-
-
-
- Таймаут запросов в секундах. Применяется к каждому этапу. - |
-
- 30.0
- |
-
Returns:
-| Type | -Description | -
|---|---|
- KworkClient
- |
-
-
-
- Полностью аутентифицированный экземпляр KworkClient, - |
-
- KworkClient
- |
-
-
-
- готовый к работе с API. - |
-
Raises:
-| Type | -Description | -
|---|---|
- KworkAuthError
- |
-
-
-
- Если логин/пароль неверны или токен не получен. - |
-
- KworkNetworkError
- |
-
-
-
- Если произошла ошибка сети. - |
-
client = await KworkClient.login("myuser", "mypassword")
-client = await KworkClient.login("user", "pass", timeout=60.0)
-token = client._token
-Пароль не сохраняется в клиенте. Только token и cookies. -Рекомендуется сохранять token для повторного использования -вместо хранения пароля.
-Токен имеет ограниченное время жизни. При получении 401 ошибки -необходимо выполнить повторный login().
-src/kwork_api/client.py196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 | |
Exception classes for API errors.
- - -Исключения Kwork API.
-Все исключения предоставляют понятные сообщения для отладки. -Иерархия исключений:
-KworkError (базовое)
-├── KworkAuthError (ошибки аутентификации)
-├── KworkApiError (HTTP ошибки API)
-│ ├── KworkNotFoundError (404)
-│ ├── KworkRateLimitError (429)
-│ └── KworkValidationError (400)
-└── KworkNetworkError (ошибки сети)
-
-
-
-
-
-
-
-
-
-
-
-KworkApiError(message, status_code=None, response=None)
-
- Bases: KworkError
Ошибка HTTP запроса к API (4xx, 5xx).
-Базовый класс для HTTP ошибок API. Содержит код статуса.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
status_code |
- - | -
-
-
- HTTP код ответа (400, 404, 500, etc.) - |
-
try: - await client.catalog.get_details(999999) -except KworkApiError as e: - print(f"HTTP {e.status_code}: {e.message}")
-src/kwork_api/errors.py84 -85 -86 -87 -88 -89 -90 -91 | |
KworkAuthError(
- message="Authentication failed", response=None
-)
-
- Bases: KworkError
Ошибка аутентификации/авторизации.
-Возникает при: -- Неверном логине или пароле -- Истёкшем или невалидном токене -- Отсутствии прав доступа (403)
- - -try: - client = await KworkClient.login("user", "wrong_password") -except KworkAuthError: - print("Неверные учётные данные")
-src/kwork_api/errors.py61 -62 | |
KworkError(message, response=None)
-
- Bases: Exception
Базовое исключение для всех ошибок Kwork API.
-Все остальные исключения наследуются от этого класса.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
message |
- - | -
-
-
- Сообщение об ошибке. - |
-
response |
- - | -
-
-
- Оригинальный HTTP response (если есть). - |
-
try: - await client.catalog.get_list() -except KworkError as e: - print(f"Ошибка: {e.message}")
-src/kwork_api/errors.py36 -37 -38 -39 | |
KworkNetworkError(message='Network error', response=None)
-
- Bases: KworkError
Ошибка сети/подключения.
-Возникает при: -- Отсутствии соединения -- Таймауте запроса -- Ошибке DNS -- Проблемах с SSL
- - -try: - await client.catalog.get_list() -except KworkNetworkError: - print("Проверьте подключение к интернету")
-src/kwork_api/errors.py188 -189 | |
KworkNotFoundError(resource, response=None)
-
- Bases: KworkApiError
Ресурс не найден (404).
-Возникает при запросе несуществующего кворка, -пользователя или другого ресурса.
- - -try: - await client.catalog.get_details(999999) -except KworkNotFoundError: - print("Кворк не найден")
-src/kwork_api/errors.py113 -114 | |
KworkRateLimitError(
- message="Rate limit exceeded", response=None
-)
-
- Bases: KworkApiError
Превышен лимит запросов (429).
-Возникает при слишком частых запросах к API. -Рекомендуется сделать паузу перед повторным запросом.
- - -import asyncio
-try: - await client.catalog.get_list() -except KworkRateLimitError: - await asyncio.sleep(5) # Пауза 5 секунд
-src/kwork_api/errors.py133 -134 | |
KworkValidationError(
- message="Validation failed", fields=None, response=None
-)
-
- Bases: KworkApiError
Ошибка валидации (400).
-Возникает при некорректных данных запроса.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
fields |
- - | -
-
-
- Словарь ошибок по полям {field: [errors]}. - |
-
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]}")
-src/kwork_api/errors.py155 -156 -157 -158 -159 -160 -161 -162 | |
Pydantic models for API responses.
- - -Pydantic модели для ответов Kwork API.
-Все модели соответствуют структуре, найденной при анализе HAR дампа. -Используются для валидации и типизации ответов API.
- - - - - - - - - - -
- Bases: BaseModel
Стандартный ответ API об ошибке.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
success |
-
- bool
- |
-
-
-
- Всегда False для ошибок. - |
-
errors |
-
- list[ErrorDetail]
- |
-
-
-
- Список деталей ошибок. - |
-
message |
-
- Optional[str]
- |
-
-
-
- Общее сообщение об ошибке. - |
-
- Bases: BaseModel
Ответ API аутентификации.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
success |
-
- bool
- |
-
-
-
- Успешность аутентификации. - |
-
user_id |
-
- Optional[int]
- |
-
-
-
- ID пользователя. - |
-
username |
-
- Optional[str]
- |
-
-
-
- Имя пользователя. - |
-
web_auth_token |
-
- Optional[str]
- |
-
-
-
- Токен для последующих запросов. - |
-
message |
-
- Optional[str]
- |
-
-
-
- Сообщение (например, об ошибке). - |
-
- Bases: BaseModel
Значок (достижение) пользователя.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID значка. - |
-
name |
-
- str
- |
-
-
-
- Название значка. - |
-
description |
-
- Optional[str]
- |
-
-
-
- Описание достижения. - |
-
icon_url |
-
- Optional[str]
- |
-
-
-
- URL иконки значка. - |
-
- Bases: BaseModel
Ответ API каталога кворков.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
kworks |
-
- list[Kwork]
- |
-
-
-
- Список кворков на странице. - |
-
pagination |
-
- Optional[PaginationInfo]
- |
-
-
-
- Информация о пагинации. - |
-
filters |
-
- Optional[dict[str, Any]]
- |
-
-
-
- Доступные фильтры. - |
-
sort_options |
-
- list[str]
- |
-
-
-
- Доступные опции сортировки. - |
-
- Bases: BaseModel
Город из справочника.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID города. - |
-
name |
-
- str
- |
-
-
-
- Название города. - |
-
country_id |
-
- Optional[int]
- |
-
-
-
- ID страны. - |
-
- Bases: BaseModel
Страна из справочника.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID страны. - |
-
name |
-
- str
- |
-
-
-
- Название страны. - |
-
code |
-
- Optional[str]
- |
-
-
-
- Код страны (ISO). - |
-
cities |
-
- list[City]
- |
-
-
-
- Список городов в стране. - |
-
- Bases: BaseModel
Универсальный ответ API с данными.
-Используется как обёртка для различных ответов API.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
success |
-
- bool
- |
-
-
-
- Успешность запроса. - |
-
data |
-
- Optional[dict[str, Any]]
- |
-
-
-
- Полезные данные (словарь). - |
-
message |
-
- Optional[str]
- |
-
-
-
- Дополнительное сообщение. - |
-
- Bases: BaseModel
Диалог (чат) с пользователем.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID диалога. - |
-
participant |
-
- Optional[KworkUser]
- |
-
-
-
- Собеседник. - |
-
last_message |
-
- Optional[str]
- |
-
-
-
- Текст последнего сообщения. - |
-
unread_count |
-
- int
- |
-
-
-
- Количество непрочитанных сообщений. - |
-
updated_at |
-
- Optional[datetime]
- |
-
-
-
- Время последнего сообщения. - |
-
- Bases: BaseModel
Детали ошибки API.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
code |
-
- str
- |
-
-
-
- Код ошибки. - |
-
message |
-
- str
- |
-
-
-
- Сообщение об ошибке. - |
-
field |
-
- Optional[str]
- |
-
-
-
- Поле, вызвавшее ошибку (если применимо). - |
-
- Bases: BaseModel
Дополнительная функция (feature) для кворка.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID функции. - |
-
name |
-
- str
- |
-
-
-
- Название. - |
-
description |
-
- Optional[str]
- |
-
-
-
- Описание. - |
-
price |
-
- float
- |
-
-
-
- Стоимость в рублях. - |
-
type |
-
- str
- |
-
-
-
- Тип: "extra", "premium", etc. - |
-
- Bases: BaseModel
Кворк — услуга на Kwork.
-Базовая модель кворка с основной информацией.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID кворка. - |
-
title |
-
- str
- |
-
-
-
- Заголовок кворка. - |
-
description |
-
- Optional[str]
- |
-
-
-
- Краткое описание. - |
-
price |
-
- float
- |
-
-
-
- Цена в рублях. - |
-
currency |
-
- str
- |
-
-
-
- Валюта (по умолчанию RUB). - |
-
category_id |
-
- Optional[int]
- |
-
-
-
- ID категории. - |
-
seller |
-
- Optional[KworkUser]
- |
-
-
-
- Информация о продавце. - |
-
images |
-
- list[str]
- |
-
-
-
- Список URL изображений. - |
-
rating |
-
- Optional[float]
- |
-
-
-
- Рейтинг кворка (0-5). - |
-
reviews_count |
-
- int
- |
-
-
-
- Количество отзывов. - |
-
created_at |
-
- Optional[datetime]
- |
-
-
-
- Дата создания. - |
-
updated_at |
-
- Optional[datetime]
- |
-
-
-
- Дата последнего обновления. - |
-
- Bases: BaseModel
Категория кворков.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID категории. - |
-
name |
-
- str
- |
-
-
-
- Название категории. - |
-
slug |
-
- str
- |
-
-
-
- URL-safe идентификатор. - |
-
parent_id |
-
- Optional[int]
- |
-
-
-
- ID родительской категории для вложенности. - |
-
- Bases: Kwork
Расширенная информация о кворке.
-Наследует все поля Kwork плюс дополнительные детали.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
full_description |
-
- Optional[str]
- |
-
-
-
- Полное описание услуги. - |
-
requirements |
-
- Optional[str]
- |
-
-
-
- Требования к заказчику. - |
-
delivery_time |
-
- Optional[int]
- |
-
-
-
- Срок выполнения в днях. - |
-
revisions |
-
- Optional[int]
- |
-
-
-
- Количество бесплатных правок. - |
-
features |
-
- list[str]
- |
-
-
-
- Список дополнительных опций. - |
-
faq |
-
- list[dict[str, str]]
- |
-
-
-
- Список вопросов и ответов. - |
-
- Bases: BaseModel
Информация о пользователе Kwork.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID пользователя. - |
-
username |
-
- str
- |
-
-
-
- Имя пользователя (логин). - |
-
avatar_url |
-
- Optional[str]
- |
-
-
-
- URL аватара или None. - |
-
is_online |
-
- bool
- |
-
-
-
- Статус онлайн. - |
-
rating |
-
- Optional[float]
- |
-
-
-
- Рейтинг пользователя (0-5). - |
-
user = KworkUser(id=123, username="seller", rating=4.9) -print(f"{user.username}: {user.rating} ★")
-
- Bases: BaseModel
Уведомление пользователя.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID уведомления. - |
-
type |
-
- str
- |
-
-
-
- Тип уведомления: "message", "order", "system", etc. - |
-
title |
-
- str
- |
-
-
-
- Заголовок уведомления. - |
-
message |
-
- str
- |
-
-
-
- Текст уведомления. - |
-
is_read |
-
- bool
- |
-
-
-
- Прочитано ли уведомление. - |
-
created_at |
-
- Optional[datetime]
- |
-
-
-
- Дата создания. - |
-
link |
-
- Optional[str]
- |
-
-
-
- Ссылка для перехода (если есть). - |
-
- Bases: BaseModel
Ответ API списка уведомлений.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
notifications |
-
- list[Notification]
- |
-
-
-
- Список уведомлений. - |
-
unread_count |
-
- int
- |
-
-
-
- Количество непрочитанных уведомлений. - |
-
- Bases: BaseModel
Информация о пагинации.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
current_page |
-
- int
- |
-
-
-
- Текущая страница (начиная с 1). - |
-
total_pages |
-
- int
- |
-
-
-
- Общее количество страниц. - |
-
total_items |
-
- int
- |
-
-
-
- Общее количество элементов. - |
-
items_per_page |
-
- int
- |
-
-
-
- Элементов на странице. - |
-
has_next |
-
- bool
- |
-
-
-
- Есть ли следующая страница. - |
-
has_prev |
-
- bool
- |
-
-
-
- Есть ли предыдущая страница. - |
-
- Bases: BaseModel
Проект (заказ на бирже фриланса).
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID проекта. - |
-
title |
-
- str
- |
-
-
-
- Заголовок проекта. - |
-
description |
-
- Optional[str]
- |
-
-
-
- Описание задачи. - |
-
budget |
-
- Optional[float]
- |
-
-
-
- Бюджет проекта. - |
-
budget_type |
-
- str
- |
-
-
-
- Тип бюджета: "fixed" (фиксированный) или "hourly" (почасовой). - |
-
category_id |
-
- Optional[int]
- |
-
-
-
- ID категории. - |
-
customer |
-
- Optional[KworkUser]
- |
-
-
-
- Информация о заказчике. - |
-
status |
-
- str
- |
-
-
-
- Статус проекта: "open", "in_progress", "completed", "cancelled". - |
-
created_at |
-
- Optional[datetime]
- |
-
-
-
- Дата создания. - |
-
updated_at |
-
- Optional[datetime]
- |
-
-
-
- Дата обновления. - |
-
bids_count |
-
- int
- |
-
-
-
- Количество откликов. - |
-
skills |
-
- list[str]
- |
-
-
-
- Требуемые навыки. - |
-
- Bases: BaseModel
Ответ API списка проектов.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
projects |
-
- list[Project]
- |
-
-
-
- Список проектов. - |
-
pagination |
-
- Optional[PaginationInfo]
- |
-
-
-
- Информация о пагинации. - |
-
- Bases: BaseModel
Отзыв о кворке или проекте.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID отзыва. - |
-
rating |
-
- int
- |
-
-
-
- Оценка от 1 до 5. - |
-
comment |
-
- Optional[str]
- |
-
-
-
- Текст отзыва. - |
-
author |
-
- Optional[KworkUser]
- |
-
-
-
- Автор отзыва. - |
-
kwork_id |
-
- Optional[int]
- |
-
-
-
- ID кворка (если отзыв о кворке). - |
-
created_at |
-
- Optional[datetime]
- |
-
-
-
- Дата создания. - |
-
- Bases: BaseModel
Ответ API списка отзывов.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
reviews |
-
- list[Review]
- |
-
-
-
- Список отзывов. - |
-
pagination |
-
- Optional[PaginationInfo]
- |
-
-
-
- Информация о пагинации. - |
-
average_rating |
-
- Optional[float]
- |
-
-
-
- Средний рейтинг. - |
-
- Bases: BaseModel
Часовой пояс.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
id |
-
- int
- |
-
-
-
- Уникальный ID. - |
-
name |
-
- str
- |
-
-
-
- Название пояса. - |
-
offset |
-
- str
- |
-
-
-
- Смещение от UTC (например, "+03:00"). - |
-
- Bases: BaseModel
Проблема, найденная при валидации текста.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
type |
-
- str
- |
-
-
-
- Тип проблемы: "error", "warning", "suggestion". - |
-
code |
-
- str
- |
-
-
-
- Код ошибки (например, "SPELLING", "GRAMMAR", "LENGTH"). - |
-
message |
-
- str
- |
-
-
-
- Описание проблемы. - |
-
position |
-
- Optional[int]
- |
-
-
-
- Позиция в тексте (если применимо). - |
-
suggestion |
-
- Optional[str]
- |
-
-
-
- Предлагаемое исправление (если есть). - |
-
- Bases: BaseModel
Ответ API валидации текста.
-Используется для эндпоинта /api/validation/checktext.
- - -Attributes:
-| Name | -Type | -Description | -
|---|---|---|
success |
-
- bool
- |
-
-
-
- Успешность валидации. - |
-
is_valid |
-
- bool
- |
-
-
-
- Текст проходит валидацию (нет критических ошибок). - |
-
issues |
-
- list[ValidationIssue]
- |
-
-
-
- Список найденных проблем. - |
-
score |
-
- Optional[int]
- |
-
-
-
- Оценка качества текста (0-100, если доступна). - |
-
message |
-
- Optional[str]
- |
-
-
-
- Дополнительное сообщение. - |
-
0&&i[i.length-1])&&(p[0]===6||p[0]===2)){r=0;continue}if(p[0]===3&&(!i||p[1]>i[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function K(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],s;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(a){s={error:a}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(s)throw s.error}}return i}function B(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o