kwork-api/site/search/search_index.json
root 0975b68334 feat: complete Kwork API client with 45+ endpoints
Initial release:
- Complete async API client (45+ endpoints)
- Pydantic models for all responses
- Two-step authentication
- Comprehensive error handling
- 92% test coverage
- Gitea Actions CI/CD
- Semantic release configured
2026-03-29 00:42:54 +00:00

1 line
224 KiB
JSON

{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Kwork API \u2014 Python Client","text":"<p>Unofficial Python client for Kwork.ru API.</p>"},{"location":"#installation","title":"Installation","text":"<pre><code>pip install kwork-api\n</code></pre> <p>Or with UV:</p> <pre><code>uv add kwork-api\n</code></pre>"},{"location":"#quick-start","title":"Quick Start","text":""},{"location":"#login-with-credentials","title":"Login with credentials","text":"<pre><code>from kwork_api import KworkClient\n\n# Authenticate\nclient = await KworkClient.login(\"username\", \"password\")\n\n# Get catalog\ncatalog = await client.catalog.get_list(page=1)\n\n# Get projects\nprojects = await client.projects.get_list(page=1)\n\n# Close when done\nawait client.close()\n</code></pre>"},{"location":"#using-context-manager","title":"Using context manager","text":"<pre><code>async with await KworkClient.login(\"username\", \"password\") as client:\n catalog = await client.catalog.get_list(page=1)\n # Client automatically closes\n</code></pre>"},{"location":"#save-and-restore-session","title":"Save and restore session","text":"<pre><code># Save credentials after login\nclient = await KworkClient.login(\"username\", \"password\")\n\n# Option 1: Save token only\ntoken = client.token\n\n# Option 2: Save full credentials (token + cookies)\ncreds = client.credentials\nimport json\nwith open(\"session.json\", \"w\") as f:\n json.dump(creds, f)\n\n# Later, restore session\nclient = KworkClient(token=token)\n# or\nclient = KworkClient(**creds)\n\nuser_info = await client.user.get_info()\n</code></pre>"},{"location":"#api-overview","title":"API Overview","text":""},{"location":"#catalog-api","title":"Catalog API","text":"<ul> <li><code>client.catalog.get_list()</code> \u2014 Get kworks catalog</li> <li><code>client.catalog.get_details(kwork_id)</code> \u2014 Get kwork details</li> </ul>"},{"location":"#projects-api","title":"Projects API","text":"<ul> <li><code>client.projects.get_list()</code> \u2014 Get freelance projects</li> <li><code>client.projects.get_payer_orders()</code> \u2014 Your orders as customer</li> <li><code>client.projects.get_worker_orders()</code> \u2014 Your orders as performer</li> </ul>"},{"location":"#user-api","title":"User API","text":"<ul> <li><code>client.user.get_info()</code> \u2014 Get user profile</li> <li><code>client.user.get_reviews()</code> \u2014 Get user reviews</li> <li><code>client.user.get_favorite_kworks()</code> \u2014 Get favorite kworks</li> </ul>"},{"location":"#settings-preferences","title":"Settings &amp; Preferences","text":"<ul> <li><code>client.get_wants()</code> \u2014 User preferences</li> <li><code>client.get_kworks_status()</code> \u2014 Kworks status</li> <li><code>client.update_settings()</code> \u2014 Update settings</li> <li><code>client.go_offline()</code> \u2014 Set offline status</li> </ul> <p>See API Reference for full documentation.</p>"},{"location":"#error-handling","title":"Error Handling","text":"<pre><code>from kwork_api import KworkError, KworkAuthError, KworkApiError\n\ntry:\n await client.catalog.get_list()\nexcept KworkAuthError:\n print(\"Invalid credentials\")\nexcept KworkApiError as e:\n print(f\"API error: {e.status_code}\")\nexcept KworkError as e:\n print(f\"General error: {e.message}\")\n</code></pre>"},{"location":"ARCHITECTURE/","title":"Architecture \u2014 kwork-api","text":""},{"location":"ARCHITECTURE/#_1","title":"\ud83d\udcd0 \u041e\u0431\u0437\u043e\u0440","text":"<p>kwork-api \u2014 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 Python \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f Kwork.ru API \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439.</p>"},{"location":"ARCHITECTURE/#_2","title":"\ud83c\udfd7\ufe0f \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430","text":"<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 User Application \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 KworkClient \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\n\u2502 \u2502 Authentication Layer \u2502 \u2502\n\u2502 \u2502 - login() / token auth \u2502 \u2502\n\u2502 \u2502 - Session management \u2502 \u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\n\u2502 \u2502 API Groups \u2502 \u2502\n\u2502 \u2502 - catalog, projects, user, reference, ... \u2502 \u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\n\u2502 \u2502 HTTP Layer (httpx) \u2502 \u2502\n\u2502 \u2502 - HTTP/2 support \u2502 \u2502\n\u2502 \u2502 - Timeout handling \u2502 \u2502\n\u2502 \u2502 - Error handling \u2502 \u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Kwork.ru API (HTTPS) \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n</code></pre>"},{"location":"ARCHITECTURE/#_3","title":"\ud83d\udcc1 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430","text":"<pre><code>kwork-api/\n\u251c\u2500\u2500 src/kwork_api/\n\u2502 \u251c\u2500\u2500 __init__.py # Public API\n\u2502 \u251c\u2500\u2500 client.py # KworkClient + API groups\n\u2502 \u251c\u2500\u2500 models.py # Pydantic models\n\u2502 \u2514\u2500\u2500 errors.py # Exception classes\n\u2502\n\u251c\u2500\u2500 tests/\n\u2502 \u251c\u2500\u2500 test_client.py # Client tests\n\u2502 \u251c\u2500\u2500 test_models.py # Model tests\n\u2502 \u2514\u2500\u2500 test_all_endpoints.py # Endpoint tests\n\u2502\n\u251c\u2500\u2500 docs/\n\u2502 \u251c\u2500\u2500 index.md # Quick start\n\u2502 \u251c\u2500\u2500 api-reference.md # API docs\n\u2502 \u251c\u2500\u2500 RELEASE.md # Release guide\n\u2502 \u2514\u2500\u2500 ARCHITECTURE.md # This file\n\u2502\n\u251c\u2500\u2500 .github/workflows/\n\u2502 \u2514\u2500\u2500 ci.yml # CI/CD pipeline\n\u2502\n\u251c\u2500\u2500 pyproject.toml # Project config\n\u251c\u2500\u2500 uv.lock # Dependencies lock\n\u2514\u2500\u2500 README.md # Main documentation\n</code></pre>"},{"location":"ARCHITECTURE/#_4","title":"\ud83d\udd11 \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b","text":""},{"location":"ARCHITECTURE/#1-kworkclient","title":"1. KworkClient","text":"<p>\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 API</p> <p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438: - \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f (login / token) - \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0435\u0439 - \u0414\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 API \u0433\u0440\u0443\u043f\u043f\u0430\u043c</p> <p>API Groups: <pre><code>client.catalog # CatalogAPI\nclient.projects # ProjectsAPI\nclient.user # UserAPI\nclient.reference # ReferenceAPI\nclient.notifications # NotificationsAPI\nclient.other # OtherAPI\n</code></pre></p>"},{"location":"ARCHITECTURE/#2-models-pydantic","title":"2. Models (Pydantic)","text":"<p>\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0438 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 API</p> <p>\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: - 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</p>"},{"location":"ARCHITECTURE/#3-errors","title":"3. Errors","text":"<p>\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a API</p> <p>\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f: <pre><code>KworkError (base)\n\u251c\u2500\u2500 KworkAuthError # 401, 403\n\u251c\u2500\u2500 KworkApiError # 4xx, 5xx\n\u2502 \u251c\u2500\u2500 KworkNotFoundError # 404\n\u2502 \u251c\u2500\u2500 KworkRateLimitError # 429\n\u2502 \u2514\u2500\u2500 KworkValidationError # 400\n\u2514\u2500\u2500 KworkNetworkError # Network issues\n</code></pre></p>"},{"location":"ARCHITECTURE/#4-http-layer-httpx","title":"4. HTTP Layer (httpx)","text":"<p>\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c: HTTP \u0437\u0430\u043f\u0440\u043e\u0441\u044b</p> <p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438: - HTTP/2 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 - \u0422\u0430\u0439\u043c\u0430\u0443\u0442\u044b - Cookies management - Token authentication - Error handling</p>"},{"location":"ARCHITECTURE/#flow","title":"\ud83d\udd04 Flow: \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f","text":"<pre><code>User \u2192 KworkClient.login(username, password)\n \u2502\n \u25bc\n POST /signIn (cookies)\n \u2502\n \u25bc\n POST /getWebAuthToken (token)\n \u2502\n \u25bc\n Store token + cookies\n \u2502\n \u25bc\n Return authenticated client\n</code></pre>"},{"location":"ARCHITECTURE/#flow-api-request","title":"\ud83d\udd04 Flow: API Request","text":"<pre><code>User \u2192 client.catalog.get_list(page=1)\n \u2502\n \u25bc\n CatalogAPI.get_list()\n \u2502\n \u25bc\n KworkClient._request()\n \u2502\n \u25bc\n httpx.AsyncClient.post()\n \u2502\n \u25bc\n KworkClient._handle_response()\n \u2502\n \u25bc\n CatalogResponse.model_validate()\n \u2502\n \u25bc\n Return typed response\n</code></pre>"},{"location":"ARCHITECTURE/#cicd-pipeline","title":"\ud83d\ude80 CI/CD Pipeline","text":"<pre><code>Push/Tag \u2192 GitHub Actions\n \u2502\n \u251c\u2500\u2500 Test Job\n \u2502 \u251c\u2500\u2500 Install UV + Python\n \u2502 \u251c\u2500\u2500 Run linters (ruff)\n \u2502 \u251c\u2500\u2500 Run tests (pytest)\n \u2502 \u2514\u2500\u2500 Upload coverage\n \u2502\n \u251c\u2500\u2500 Build Job\n \u2502 \u251c\u2500\u2500 Build wheel + sdist\n \u2502 \u2514\u2500\u2500 Upload artifacts\n \u2502\n \u251c\u2500\u2500 Publish Job (on tag)\n \u2502 \u251c\u2500\u2500 Download artifacts\n \u2502 \u2514\u2500\u2500 Publish to Gitea Registry\n \u2502\n \u2514\u2500\u2500 Docs Job\n \u251c\u2500\u2500 Build MkDocs\n \u2514\u2500\u2500 Upload site\n</code></pre>"},{"location":"ARCHITECTURE/#_5","title":"\ud83d\udcca \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438","text":""},{"location":"ARCHITECTURE/#runtime","title":"Runtime","text":"<ul> <li><code>httpx[http2]&gt;=0.26.0</code> \u2014 HTTP client</li> <li><code>pydantic&gt;=2.0.0</code> \u2014 Data validation</li> <li><code>structlog&gt;=24.0.0</code> \u2014 Logging</li> </ul>"},{"location":"ARCHITECTURE/#development","title":"Development","text":"<ul> <li><code>pytest&gt;=8.0.0</code> \u2014 Testing</li> <li><code>pytest-cov&gt;=4.0.0</code> \u2014 Coverage</li> <li><code>pytest-asyncio&gt;=0.23.0</code> \u2014 Async tests</li> <li><code>respx&gt;=0.20.0</code> \u2014 HTTP mocking</li> <li><code>ruff&gt;=0.3.0</code> \u2014 Linting</li> <li><code>mkdocs + mkdocstrings</code> \u2014 Documentation</li> </ul>"},{"location":"ARCHITECTURE/#_6","title":"\ud83d\udd12 \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c","text":"<ul> <li>\u0422\u043e\u043a\u0435\u043d\u044b: \u041d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043b\u043e\u0433\u0430\u0445</li> <li>\u041f\u0430\u0440\u043e\u043b\u0438: \u041f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 login()</li> <li>\u0421\u0435\u0441\u0441\u0438\u0438: Token + cookies \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0435</li> <li>HTTPS: \u0412\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0447\u0435\u0440\u0435\u0437 HTTPS</li> </ul>"},{"location":"ARCHITECTURE/#_7","title":"\ud83d\udcc8 \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c","text":"<ul> <li>Async/Await: \u041d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b</li> <li>HTTP/2: Multiplexing \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432</li> <li>Connection pooling: \u041f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439</li> <li>Timeouts: \u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u0439</li> </ul>"},{"location":"ARCHITECTURE/#_8","title":"\ud83e\uddea \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","text":"<ul> <li>Unit \u0442\u0435\u0441\u0442\u044b: 92% coverage</li> <li>Mock HTTP: respx \u0434\u043b\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438</li> <li>Async tests: pytest-asyncio</li> <li>CI: \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0435</li> </ul>"},{"location":"ARCHITECTURE/#_9","title":"\ud83d\udcdd \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f","text":"<p>MIT License \u2014 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430.</p>"},{"location":"GITEA_PAGES/","title":"Gitea Pages \u2014 \u0425\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438","text":""},{"location":"GITEA_PAGES/#_1","title":"\ud83d\udccb \u041e\u0431\u0437\u043e\u0440","text":"<p>Gitea Pages \u2014 \u0430\u043d\u0430\u043b\u043e\u0433 GitHub Pages \u0434\u043b\u044f \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0430\u0439\u0442\u043e\u0432 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 Gitea.</p> <p>URL \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438: <code>https://git.much-data.ru/claw/kwork-api/</code></p>"},{"location":"GITEA_PAGES/#_2","title":"\ud83d\udd27 \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0410","text":""},{"location":"GITEA_PAGES/#1-pages","title":"\u0428\u0430\u0433 1: \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c Pages \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438","text":"<ol> <li>\u0417\u0430\u0439\u0434\u0438 \u0432 https://git.much-data.ru/claw/kwork-api</li> <li>Settings \u2192 Pages</li> <li>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c Enable Pages</li> <li>\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a:</li> <li>Source: <code>gh-pages</code> branch</li> <li>Folder: <code>/ (root)</code></li> <li>Save</li> </ol>"},{"location":"GITEA_PAGES/#2-gitea-token","title":"\u0428\u0430\u0433 2: \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Gitea Token","text":"<ol> <li>https://git.much-data.ru \u2192 Settings \u2192 Applications</li> <li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438:</li> <li><code>write:repository</code></li> <li><code>write:package</code></li> <li>\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d</li> <li>\u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: Settings \u2192 Secrets</li> <li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043a\u0440\u0435\u0442: <code>GITEA_TOKEN</code> = \u0442\u0432\u043e\u0439 \u0442\u043e\u043a\u0435\u043d</li> </ol>"},{"location":"GITEA_PAGES/#3","title":"\u0428\u0430\u0433 3: \u041f\u0435\u0440\u0432\u044b\u0439 \u0434\u0435\u043f\u043b\u043e\u0439","text":"<pre><code>cd /root/kwork-api\n\n# \u0421\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e\nuv run mkdocs build\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0442\u043e site/ \u0441\u043e\u0437\u0434\u0430\u043d\nls -la site/\n\n# \u0417\u0430\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0448\u0438\u0442\u044c\ngit add .\ngit commit -m \"docs: initial documentation\"\ngit push origin main\n\n# CI/CD \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u0442 \u043d\u0430 gh-pages\n</code></pre>"},{"location":"GITEA_PAGES/#4","title":"\u0428\u0430\u0433 4: \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c","text":"<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e CI/CD:</p> <p>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430: <pre><code>https://git.much-data.ru/claw/kwork-api/\n</code></pre></p> <p>\u0418\u043b\u0438 \u0435\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d custom domain: <pre><code>https://kwork-api.much-data.ru/\n</code></pre></p>"},{"location":"GITEA_PAGES/#_3","title":"\ud83d\udd04 \u0410\u0412\u0422\u041e\u041c\u0410\u0422\u0418\u0427\u0415\u0421\u041a\u0418\u0419 \u0414\u0415\u041f\u041b\u041e\u0419","text":"<p>Workflow \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438: - \u2705 Push \u0432 <code>main</code> \u0432\u0435\u0442\u043a\u0443 - \u2705 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0442\u0435\u0433\u0430 \u0440\u0435\u043b\u0438\u0437\u0430</p> <p>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442: 1. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442 MkDocs \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e 2. \u041f\u0443\u0448\u0438\u0442 \u0432 <code>gh-pages</code> \u0432\u0435\u0442\u043a\u0443 3. Gitea Pages \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0430\u0439\u0442</p>"},{"location":"GITEA_PAGES/#custom-domain","title":"\ud83c\udf10 CUSTOM DOMAIN (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e)","text":""},{"location":"GITEA_PAGES/#dns","title":"DNS \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430:","text":"<pre><code># \u0412 \u043f\u0430\u043d\u0435\u043b\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043c\u0435\u043d\u043e\u043c much-data.ru\n\n# CNAME \u0437\u0430\u043f\u0438\u0441\u044c:\nkwork-api CNAME git.much-data.ru\n\n# \u0418\u043b\u0438 A \u0437\u0430\u043f\u0438\u0441\u044c:\nkwork-api A 5.188.26.192\n</code></pre>"},{"location":"GITEA_PAGES/#gitea-pages_1","title":"\u0412 Gitea Pages:","text":"<ol> <li>Settings \u2192 Pages</li> <li>Custom Domain: <code>kwork-api.much-data.ru</code></li> <li>Save</li> </ol>"},{"location":"GITEA_PAGES/#cname","title":"\u0421\u043e\u0437\u0434\u0430\u0442\u044c CNAME \u0444\u0430\u0439\u043b:","text":"<pre><code># \u0412 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u043d\u0435 \u0432 site/)\necho \"kwork-api.much-data.ru\" &gt; static/CNAME\ngit add static/CNAME\ngit commit -m \"docs: add custom domain\"\ngit push\n</code></pre>"},{"location":"GITEA_PAGES/#_4","title":"\ud83d\udcca \u0421\u0422\u0420\u0423\u041a\u0422\u0423\u0420\u0410 \u0412\u0415\u0422\u041a\u0418","text":"<pre><code>main (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434)\n\u251c\u2500\u2500 src/\n\u251c\u2500\u2500 docs/\n\u251c\u2500\u2500 mkdocs.yml\n\u2514\u2500\u2500 .github/workflows/ci.yml\n\ngh-pages (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u0439\u0442)\n\u251c\u2500\u2500 index.html\n\u251c\u2500\u2500 api-reference/\n\u251c\u2500\u2500 search/\n\u2514\u2500\u2500 ...\n</code></pre>"},{"location":"GITEA_PAGES/#troubleshooting","title":"\ud83d\udd0d TROUBLESHOOTING","text":""},{"location":"GITEA_PAGES/#pages","title":"Pages \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f:","text":"<pre><code># \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0442\u043e Gitea \u0432\u0435\u0440\u0441\u0438\u044f &gt;= 1.19\n# \u0410\u0434\u043c\u0438\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c Pages \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n</code></pre>"},{"location":"GITEA_PAGES/#cicd","title":"CI/CD \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u0435\u043f\u043b\u043e\u044f:","text":"<pre><code># \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d\n# \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u0442\u043e\u043a\u0435\u043d\u0430 (write:repository)\n# \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0442\u043e gh-pages \u0432\u0435\u0442\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\n</code></pre>"},{"location":"GITEA_PAGES/#404","title":"404 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435:","text":"<pre><code># \u041f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c 1-2 \u043c\u0438\u043d\u0443\u0442\u044b (Gitea \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442)\n# \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0442\u043e site/ \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439\n# \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c workflow \u043b\u043e\u0433\u0438\n</code></pre>"},{"location":"GITEA_PAGES/#_5","title":"\ud83d\udccb \u0427\u0415\u041a\u041b\u0418\u0421\u0422","text":"<ul> <li> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c Pages \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f</li> <li> \u0421\u043e\u0437\u0434\u0430\u0442\u044c Gitea Token</li> <li> \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0432 Secrets (<code>GITEA_TOKEN</code>)</li> <li> \u0417\u0430\u043f\u0443\u0448\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 main</li> <li> \u0414\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f CI/CD</li> <li> \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c https://git.much-data.ru/claw/kwork-api/</li> <li> (\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c custom domain</li> </ul>"},{"location":"GITEA_PAGES/#_6","title":"\ud83c\udfaf \u0410\u041b\u042c\u0422\u0415\u0420\u041d\u0410\u0422\u0418\u0412\u042b","text":"<p>\u0415\u0441\u043b\u0438 Gitea Pages \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:</p>"},{"location":"GITEA_PAGES/#1-netlify","title":"1. Netlify (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e)","text":"<pre><code># \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\n# Build command: uv run mkdocs build\n# Publish directory: site/\n</code></pre>"},{"location":"GITEA_PAGES/#2-vercel","title":"2. Vercel (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e)","text":"<pre><code># \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e Netlify\n# \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0435\u043f\u043b\u043e\u0439 \u0438\u0437 Git\n</code></pre>"},{"location":"GITEA_PAGES/#3-cloudflare-pages","title":"3. Cloudflare Pages (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e)","text":"<pre><code># \u0411\u044b\u0441\u0442\u0440\u044b\u0439 CDN\n# \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 HTTPS\n</code></pre>"},{"location":"GITEA_PAGES/#4-nginx","title":"4. \u0421\u0432\u043e\u0451 \u0441\u0435\u0440\u0432\u0435\u0440 (nginx)","text":"<pre><code># \u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c site/ \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\n# \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c nginx \u043d\u0430 /var/www/kwork-api-docs/\n</code></pre>"},{"location":"GITEA_PAGES/#_7","title":"\ud83d\udcde \u0421\u0421\u042b\u041b\u041a\u0418","text":"<ul> <li>Gitea Pages Documentation</li> <li>MkDocs Documentation</li> <li>Gitea Actions</li> </ul>"},{"location":"RELEASE/","title":"Release Guide \u2014 kwork-api","text":""},{"location":"RELEASE/#_1","title":"\ud83d\udccb \u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f","text":"<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c SemVer (Semantic Versioning): <code>MAJOR.MINOR.PATCH</code></p> <ul> <li>MAJOR \u2014 \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f API</li> <li>MINOR \u2014 \u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430\u044f)</li> <li>PATCH \u2014 \u0431\u0430\u0433\u0444\u0438\u043a\u0441\u044b (\u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435)</li> </ul>"},{"location":"RELEASE/#_2","title":"\ud83d\ude80 \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0435\u043b\u0438\u0437\u0430","text":""},{"location":"RELEASE/#1","title":"1. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430","text":"<pre><code># \u0423\u0431\u0435\u0434\u0438\u0441\u044c \u0447\u0442\u043e \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442\nuv run pytest\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u044c \u043b\u0438\u043d\u0442\u0435\u0440\u044b\nuv run ruff check src/ tests/\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u044c \u0441\u0431\u043e\u0440\u043a\u0443\nuv build\n</code></pre>"},{"location":"RELEASE/#2","title":"2. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438","text":"<pre><code># \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0432 pyproject.toml\n# \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: 0.1.0 \u2192 0.1.1\n\n# \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u0433\ngit tag -a v0.1.1 -m \"Release v0.1.1\"\n\n# \u041e\u0442\u043f\u0443\u0448\u0438\u0442\u044c \u0442\u0435\u0433\ngit push origin v0.1.1\n</code></pre>"},{"location":"RELEASE/#3","title":"3. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f","text":"<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0448\u0430 \u0442\u0435\u0433\u0430: 1. \u2705 \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f CI/CD pipeline 2. \u2705 \u041f\u0440\u043e\u0433\u043e\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u044b 3. \u2705 \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442 4. \u2705 \u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442\u0441\u044f \u0432 Gitea Registry</p>"},{"location":"RELEASE/#gitea-package-registry","title":"\ud83d\udce6 Gitea Package Registry","text":"<p>URL: <code>https://git.much-data.ru/api/packages/claw/pypi</code></p> <p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430: <pre><code># \u0421\u043e\u0437\u0434\u0430\u0442\u044c .pypirc \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438\ncat &gt; ~/.pypirc &lt;&lt; EOF\n[pypi]\nusername = claw\npassword = YOUR_GITEA_TOKEN\n\n[git.much-data.ru]\nrepository = https://git.much-data.ru/api/packages/claw/pypi\nusername = claw\npassword = YOUR_GITEA_TOKEN\nEOF\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0437 Gitea\nuv pip install kwork-api --index-url https://git.much-data.ru/api/packages/claw/pypi\n</code></pre></p>"},{"location":"RELEASE/#gitea-token","title":"\ud83d\udd11 \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 Gitea Token","text":"<ol> <li>\u0417\u0430\u0439\u0434\u0438 \u0432 https://git.much-data.ru</li> <li>\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u2192 Settings \u2192 Applications</li> <li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 <code>write:package</code></li> <li>\u0421\u043e\u0445\u0440\u0430\u043d\u0438 \u0442\u043e\u043a\u0435\u043d \u0432 \u0441\u0435\u043a\u0440\u0435\u0442\u044b \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f: <code>GITEA_TOKEN</code></li> </ol>"},{"location":"RELEASE/#changelog","title":"\ud83d\udcca Changelog","text":"<p>\u0412\u0435\u0434\u0451\u0442\u0441\u044f \u0432 <code>CHANGELOG.md</code> \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0443 Keep a Changelog.</p>"},{"location":"RELEASE/#_3","title":"\u041f\u0440\u0438\u043c\u0435\u0440:","text":"<pre><code>## [0.1.1] - 2026-03-23\n\n### Fixed\n- \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0442\u043e\u043a\u0435\u043d\u0430\n\n### Changed\n- \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438\n\n## [0.1.0] - 2026-03-23\n\n### Added\n- \u041f\u0435\u0440\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437\n- \u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\n- \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f 100%\n</code></pre>"},{"location":"RELEASE/#_4","title":"\u2705 \u0427\u0435\u043a\u043b\u0438\u0441\u0442 \u043f\u0435\u0440\u0435\u0434 \u0440\u0435\u043b\u0438\u0437\u043e\u043c","text":"<ul> <li> \u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442</li> <li> \u041b\u0438\u043d\u0442\u0435\u0440\u044b \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a</li> <li> \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430</li> <li> CHANGELOG.md \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d</li> <li> \u0412\u0435\u0440\u0441\u0438\u044f \u0432 pyproject.toml \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430</li> <li> \u0422\u0435\u0433 \u0441\u043e\u0437\u0434\u0430\u043d \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d</li> <li> CI/CD pipeline \u0443\u0441\u043f\u0435\u0448\u0435\u043d</li> <li> \u041f\u0430\u043a\u0435\u0442 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d</li> </ul>"},{"location":"RELEASE/#_5","title":"\ud83d\udd27 \u0420\u0443\u0447\u043d\u0430\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f (\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e)","text":"<pre><code># \u0421\u043e\u0431\u0440\u0430\u0442\u044c\nuv build\n\n# \u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c\nuv publish \\\n --publish-url https://git.much-data.ru/api/packages/claw/pypi \\\n --token YOUR_GITEA_TOKEN\n</code></pre>"},{"location":"SEMANTIC_RELEASE/","title":"Semantic Release \u2014 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","text":""},{"location":"SEMANTIC_RELEASE/#_1","title":"\ud83d\udccb \u041e\u0431\u0437\u043e\u0440","text":"<p>python-semantic-release \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Conventional Commits.</p> <p>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: <pre><code>Commit \u2192 \u0410\u043d\u0430\u043b\u0438\u0437 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u2192 \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u2192 Bump \u0432\u0435\u0440\u0441\u0438\u0438 \u2192 \u0422\u0435\u0433 \u2192 \u0420\u0435\u043b\u0438\u0437\n</code></pre></p>"},{"location":"SEMANTIC_RELEASE/#conventional-commits","title":"\ud83c\udfaf CONVENTIONAL COMMITS","text":""},{"location":"SEMANTIC_RELEASE/#_2","title":"\u0424\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u043c\u043c\u0438\u0442\u0430:","text":"<pre><code>&lt;type&gt;(&lt;scope&gt;): &lt;description&gt;\n\n[optional body]\n\n[optional footer]\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_3","title":"\u0422\u0438\u043f\u044b \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432 \u0438 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044e:","text":"\u0422\u0438\u043f \u0412\u043b\u0438\u044f\u043d\u0438\u0435 \u041f\u0440\u0438\u043c\u0435\u0440 \u0412\u0435\u0440\u0441\u0438\u044f <code>feat</code> MINOR <code>feat: add new API endpoint</code> 0.1.0 \u2192 0.2.0 <code>fix</code> PATCH <code>fix: handle timeout errors</code> 0.1.0 \u2192 0.1.1 <code>perf</code> PATCH <code>perf: optimize HTTP requests</code> 0.1.0 \u2192 0.1.1 <code>feat</code> + BREAKING MAJOR <code>feat: change auth method</code> 0.1.0 \u2192 1.0.0 <code>docs</code>, <code>style</code>, <code>refactor</code>, <code>test</code>, <code>chore</code>, <code>ci</code>, <code>build</code> \u041d\u0435\u0442 <code>docs: update README</code> \u0411\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439"},{"location":"SEMANTIC_RELEASE/#_4","title":"\ud83d\udcdd \u041f\u0420\u0418\u041c\u0415\u0420\u042b \u041a\u041e\u041c\u041c\u0418\u0422\u041e\u0412","text":""},{"location":"SEMANTIC_RELEASE/#patch","title":"PATCH (\u0431\u0430\u0433\u0444\u0438\u043a\u0441\u044b):","text":"<pre><code>git commit -m \"fix: handle 404 error in catalog API\"\ngit commit -m \"fix(auth): restore session from token correctly\"\ngit commit -m \"perf: reduce HTTP connection overhead\"\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#minor","title":"MINOR (\u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c):","text":"<pre><code>git commit -m \"feat: add batch kwork details endpoint\"\ngit commit -m \"feat(projects): add get_payer_orders method\"\ngit commit -m \"feat: support HTTP/2 for faster requests\"\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#major","title":"MAJOR (\u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f):","text":"<pre><code>git commit -m \"feat: redesign authentication flow\n\nBREAKING CHANGE: login() now returns KworkClient instead of tuple\n\nMigration:\n Before: token, cookies = await login(user, pass)\n After: client = await KworkClient.login(user, pass)\n\"\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_5","title":"\u0411\u0435\u0437 \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044e:","text":"<pre><code>git commit -m \"docs: add usage examples to README\"\ngit commit -m \"test: increase coverage to 95%\"\ngit commit -m \"style: fix formatting with ruff\"\ngit commit -m \"refactor: simplify error handling\"\ngit commit -m \"chore: update dependencies\"\ngit commit -m \"ci: add Gitea Actions workflow\"\ngit commit -m \"build: configure UV build system\"\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#workflow","title":"\ud83d\udd04 WORKFLOW","text":""},{"location":"SEMANTIC_RELEASE/#_6","title":"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430:","text":"<pre><code># \u0414\u0435\u043b\u0430\u0439 \u043a\u043e\u043c\u043c\u0438\u0442\u044b \u043f\u043e Conventional Commits\ngit commit -m \"feat: add new endpoint\"\ngit commit -m \"fix: handle edge case\"\ngit commit -m \"docs: update documentation\"\n\n# \u041f\u0443\u0448 \u0432 main\ngit push origin main\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#cicd","title":"CI/CD (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438):","text":"<pre><code>1. \u0422\u0435\u0441\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f\n2. \u0421\u0431\u043e\u0440\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430\n3. Semantic Release \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u043c\u0438\u0442\u044b\n4. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0438\u043f \u0432\u0435\u0440\u0441\u0438\u0438 (MAJOR/MINOR/PATCH)\n5. \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0432 pyproject.toml \u0438 __init__.py\n6. \u0421\u043e\u0437\u0434\u0430\u0451\u0442 Git \u0442\u0435\u0433\n7. \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 CHANGELOG\n8. \u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u0440\u0435\u043b\u0438\u0437 \u0432 Gitea\n9. \u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043f\u0430\u043a\u0435\u0442 \u0432 Gitea Registry\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_7","title":"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:","text":"<pre><code>\u2705 v0.1.1 \u0441\u043e\u0437\u0434\u0430\u043d\n\u2705 CHANGELOG.md \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\n\u2705 \u041f\u0430\u043a\u0435\u0442 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\n\u2705 \u0420\u0435\u043b\u0438\u0437 \u0432 Gitea \u0441\u043e\u0437\u0434\u0430\u043d\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_8","title":"\ud83d\udd27 \u0420\u0423\u0427\u041d\u041e\u0415 \u0423\u041f\u0420\u0410\u0412\u041b\u0415\u041d\u0418\u0415","text":""},{"location":"SEMANTIC_RELEASE/#_9","title":"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e:","text":"<pre><code>cd /root/kwork-api\nuv run semantic-release version --print\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#changelog","title":"\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c CHANGELOG:","text":"<pre><code>uv run semantic-release changelog\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_10","title":"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u043b\u0438\u0437 \u0432\u0440\u0443\u0447\u043d\u0443\u044e:","text":"<pre><code># Bump \u0432\u0435\u0440\u0441\u0438\u0438\nuv run semantic-release version --no-push\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c\ngit diff\n\n# \u0417\u0430\u043f\u0443\u0448\u0438\u0442\u044c\ngit push origin main --tags\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_11","title":"\ud83d\udcca \u041f\u0420\u0418\u041c\u0415\u0420 \u0418\u0421\u0422\u041e\u0420\u0418\u0418 \u0412\u0415\u0420\u0421\u0418\u0419","text":"<pre><code>v0.1.0 (2026-03-23)\n - Initial release\n - Complete API client\n - 100% documentation\n\nv0.1.1 (2026-03-24)\n - fix: handle timeout errors\n - fix: restore session correctly\n\nv0.2.0 (2026-03-25)\n - feat: add batch endpoint\n - feat: support HTTP/2\n\nv0.2.1 (2026-03-26)\n - perf: optimize requests\n\nv1.0.0 (2026-03-27)\n - feat: new authentication\n - BREAKING CHANGE: API changed\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_12","title":"\u2699\ufe0f \u041a\u041e\u041d\u0424\u0418\u0413\u0423\u0420\u0410\u0426\u0418\u042f","text":"<p>\u0424\u0430\u0439\u043b: <code>pyproject.toml</code></p> <pre><code>[tool.semantic_release]\nversion_toml = [\"pyproject.toml:project.version\"]\nversion_variables = [\"src/kwork_api/__init__.py:__version__\"]\nbranch = \"main\"\nbuild_command = \"uv build\"\ncommit_parser = \"angular\"\ntag_format = \"v{version}\"\n\n[tool.semantic_release.commit_parser_options]\nminor_tags = [\"feat\"]\npatch_tags = [\"fix\", \"perf\"]\nbreaking_change_tags = [\"feat\"]\n\n[tool.semantic_release.remote]\ntype = \"gitea\"\ndomain = \"https://git.much-data.ru\"\nowner = \"claw\"\nrepo_name = \"kwork-api\"\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#troubleshooting","title":"\ud83d\udea8 TROUBLESHOOTING","text":""},{"location":"SEMANTIC_RELEASE/#no-commits-to-release","title":"\u041e\u0448\u0438\u0431\u043a\u0430: \"No commits to release\"","text":"<pre><code># \u0417\u043d\u0430\u0447\u0438\u0442 \u043d\u0435 \u0431\u044b\u043b\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432 \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 feat/fix/perf\n# \u0421\u0434\u0435\u043b\u0430\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c\ngit commit -m \"feat: add something new\"\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#gitea-token-invalid","title":"\u041e\u0448\u0438\u0431\u043a\u0430: \"Gitea token invalid\"","text":"<pre><code># \u041f\u0440\u043e\u0432\u0435\u0440\u044c \u0442\u043e\u043a\u0435\u043d\n# Settings \u2192 Applications \u2192 Create new token\n# \u041f\u0440\u0430\u0432\u0430: write:repository, write:package\n# \u041e\u0431\u043d\u043e\u0432\u0438 \u0441\u0435\u043a\u0440\u0435\u0442 \u0432 Gitea Actions\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_13","title":"\u0412\u0435\u0440\u0441\u0438\u044f \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f","text":"<pre><code># \u041f\u0440\u043e\u0432\u0435\u0440\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e\nuv run semantic-release --version\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u044c \u0447\u0442\u043e __version__ \u0435\u0441\u0442\u044c \u0432 __init__.py\ngrep \"__version__\" src/kwork_api/__init__.py\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_14","title":"\ud83d\udccb \u0427\u0415\u041a\u041b\u0418\u0421\u0422 \u041f\u0415\u0420\u0415\u0414 \u041f\u0423\u0428\u0415\u041c","text":"<ul> <li> \u041a\u043e\u043c\u043c\u0438\u0442\u044b \u043f\u043e Conventional Commits</li> <li> \u0422\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442</li> <li> CHANGELOG \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438)</li> <li> \u0412\u0435\u0440\u0441\u0438\u044f \u0432 init.py \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442</li> <li> GITEA_TOKEN \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0445</li> </ul>"},{"location":"SEMANTIC_RELEASE/#best-practices","title":"\ud83c\udfaf BEST PRACTICES","text":""},{"location":"SEMANTIC_RELEASE/#_15","title":"\u2705 \u0414\u0435\u043b\u0430\u0439:","text":"<pre><code># \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044b\ngit commit -m \"feat: add user endpoint\"\ngit commit -m \"fix: handle 404 error\"\n\n# \u041f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\ngit commit -m \"fix: restore session from saved token\"\n\n# Scope \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439\ngit commit -m \"feat(auth): add OAuth2 support\"\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_16","title":"\u274c \u041d\u0435 \u0434\u0435\u043b\u0430\u0439:","text":"<pre><code># \u0421\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0431\u0449\u0438\u0435\ngit commit -m \"fix stuff\"\n\n# \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043e\u0434\u043d\u043e\u043c\ngit commit -m \"feat: add user endpoint and fix auth and update docs\"\n\n# \u041d\u0435 \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0443\ngit commit -m \"added new feature\"\n</code></pre>"},{"location":"SEMANTIC_RELEASE/#_17","title":"\ud83d\udcde \u0421\u0421\u042b\u041b\u041a\u0418","text":"<ul> <li>python-semantic-release</li> <li>Conventional Commits</li> <li>Angular Commit Guidelines</li> </ul>"},{"location":"api-reference/","title":"API Reference","text":"<p>Complete API documentation for Kwork API client.</p>"},{"location":"api-reference/#modules","title":"Modules","text":"<ul> <li>Client \u2014 Main client class and API groups</li> <li>Models \u2014 Pydantic models for API responses</li> <li>Errors \u2014 Exception classes</li> </ul>"},{"location":"api/client/","title":"Client API","text":""},{"location":"api/client/#kwork_api.client.KworkClient","title":"kwork_api.client.KworkClient","text":"<pre><code>KworkClient(\n token=None, cookies=None, timeout=30.0, base_url=None\n)\n</code></pre> <p>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f Kwork.ru API.</p> <p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u043c Kwork API: - \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u0438 \u043f\u043e\u0438\u0441\u043a - \u0411\u0438\u0440\u0436\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 (\u0444\u0440\u0438\u043b\u0430\u043d\u0441 \u0437\u0430\u043a\u0430\u0437\u044b) - \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043e\u0442\u0437\u044b\u0432\u044b - \u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f - \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0433\u043e\u0440\u043e\u0434\u0430, \u0441\u0442\u0440\u0430\u043d\u044b, \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438)</p> \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f <p>\u041a\u043b\u0438\u0435\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0432\u0443\u0445\u044d\u0442\u0430\u043f\u043d\u0443\u044e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e Kwork: 1. POST /signIn \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 session cookies 2. POST /getWebAuthToken \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 web_auth_token</p> \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <p>Attributes:</p> Name Type Description <code>catalog</code> <code>CatalogAPI</code> <p>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u043a\u0432\u043e\u0440\u043a\u043e\u0432</p> <code>projects</code> <code>ProjectsAPI</code> <p>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0438\u0440\u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432</p> <code>user</code> <code>UserAPI</code> <p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b</p> <code>reference</code> <code>ReferenceAPI</code> <p>\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435</p> <code>notifications</code> <code>NotificationsAPI</code> <p>\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f</p> <code>other</code> <code>OtherAPI</code> <p>\u041f\u0440\u043e\u0447\u0438\u0435 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b</p> Note <p>\u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 context manager \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>async with</code> \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.</p> <p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430.</p> <p>\u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u0435\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438\u043b\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u044e \u043f\u043e \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u043e\u043a\u0435\u043d\u0443.</p> <p>Parameters:</p> Name Type Description Default <code>token</code> <code>Optional[str]</code> <p>Web auth token, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 <code>getWebAuthToken</code> \u0438\u043b\u0438 <code>login()</code>. \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 cookies.</p> <code>None</code> <code>cookies</code> <code>Optional[dict[str, str]]</code> <p>Session cookies \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u2014 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437 token.</p> <code>None</code> <code>timeout</code> <code>float</code> <p>\u0422\u0430\u0439\u043c\u0430\u0443\u0442 HTTP \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 30 \u0441\u0435\u043a\u0443\u043d\u0434.</p> <code>30.0</code> <code>base_url</code> <code>Optional[str]</code> <p>\u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 URL. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.</p> <code>None</code> Example Note <p>\u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b API \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>login()</code> \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 token.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(\n self,\n token: Optional[str] = None,\n cookies: Optional[dict[str, str]] = None,\n timeout: float = 30.0,\n base_url: Optional[str] = None,\n):\n \"\"\"\n \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\n\n \u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u0435\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438\u043b\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u044e\n \u043f\u043e \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u043e\u043a\u0435\u043d\u0443.\n\n Args:\n token: Web auth token, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 `getWebAuthToken` \u0438\u043b\u0438 `login()`.\n \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 cookies.\n cookies: Session cookies \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.\n \u041e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u2014 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437 token.\n timeout: \u0422\u0430\u0439\u043c\u0430\u0443\u0442 HTTP \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 30 \u0441\u0435\u043a\u0443\u043d\u0434.\n base_url: \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 URL. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\n\n Example:\n # \u041d\u043e\u0432\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u0435\u0437 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438\n client = KworkClient()\n\n # \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438\n client = KworkClient(token=\"eyJ0eXAiOiJKV1QiLCJhbGc...\")\n\n # \u041a\u043b\u0438\u0435\u043d\u0442 \u0441 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c\n client = KworkClient(timeout=60.0)\n\n Note:\n \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b API \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.\n \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 `login()` \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 token.\n \"\"\"\n self.base_url = base_url or self.BASE_URL\n self.timeout = timeout\n self._token = token\n self._cookies = cookies or {}\n\n # Initialize HTTP client\n self._client: Optional[httpx.AsyncClient] = None\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient--_1","title":"\u0412\u0445\u043e\u0434 \u043f\u043e \u043b\u043e\u0433\u0438\u043d\u0443/\u043f\u0430\u0440\u043e\u043b\u044e","text":"<p>async with await KworkClient.login(\"username\", \"password\") as client: catalog = await client.catalog.get_list(page=1)</p>"},{"location":"api/client/#kwork_api.client.KworkClient--_2","title":"\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u043f\u043e \u0442\u043e\u043a\u0435\u043d\u0443","text":"<p>client = KworkClient(token=\"saved_web_auth_token\") user_info = await client.user.get_info()</p>"},{"location":"api/client/#kwork_api.client.KworkClient--_3","title":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438","text":"<p>projects = await client.projects.get_list(page=1) my_orders = await client.projects.get_payer_orders()</p>"},{"location":"api/client/#kwork_api.client.KworkClient--_1","title":"\u041d\u043e\u0432\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u0435\u0437 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438","text":"<p>client = KworkClient()</p>"},{"location":"api/client/#kwork_api.client.KworkClient--_2","title":"\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438","text":"<p>client = KworkClient(token=\"eyJ0eXAiOiJKV1QiLCJhbGc...\")</p>"},{"location":"api/client/#kwork_api.client.KworkClient--_3","title":"\u041a\u043b\u0438\u0435\u043d\u0442 \u0441 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c","text":"<p>client = KworkClient(timeout=60.0)</p>"},{"location":"api/client/#kwork_api.client.KworkClient-attributes","title":"Attributes","text":""},{"location":"api/client/#kwork_api.client.KworkClient.catalog","title":"catalog <code>property</code>","text":"<pre><code>catalog\n</code></pre> <p>API \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.cookies","title":"cookies <code>property</code>","text":"<pre><code>cookies\n</code></pre> <p>Session cookies.</p> <p>Returns:</p> Type Description <code>dict[str, str]</code> <p>\u0421\u043b\u043e\u0432\u0430\u0440\u044c cookies \u0432\u043a\u043b\u044e\u0447\u0430\u044f web_auth_token.</p> Example"},{"location":"api/client/#kwork_api.client.KworkClient.cookies--_1","title":"\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438","text":"<p>client = await KworkClient.login(\"user\", \"pass\") creds = client.credentials</p>"},{"location":"api/client/#kwork_api.client.KworkClient.cookies--_2","title":"\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435","text":"<p>client = KworkClient(**creds)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.credentials","title":"credentials <code>property</code>","text":"<pre><code>credentials\n</code></pre> <p>\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438.</p> <p>Returns:</p> Type Description <code>dict[str, Optional[str]]</code> <p>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 token \u0438 cookies \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 KworkClient().</p> Example"},{"location":"api/client/#kwork_api.client.KworkClient.credentials--_1","title":"\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435","text":"<p>client = await KworkClient.login(\"user\", \"pass\") import json with open(\"session.json\", \"w\") as f: json.dump(client.credentials, f)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.credentials--_2","title":"\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435","text":"<p>with open(\"session.json\") as f: creds = json.load(f) client = KworkClient(**creds)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.notifications","title":"notifications <code>property</code>","text":"<pre><code>notifications\n</code></pre> <p>API \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.other","title":"other <code>property</code>","text":"<pre><code>other\n</code></pre> <p>\u041f\u0440\u043e\u0447\u0435\u0435 API.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.projects","title":"projects <code>property</code>","text":"<pre><code>projects\n</code></pre> <p>API \u0431\u0438\u0440\u0436\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.reference","title":"reference <code>property</code>","text":"<pre><code>reference\n</code></pre> <p>\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u043e\u0435 API.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.token","title":"token <code>property</code>","text":"<pre><code>token\n</code></pre> <p>Web auth token \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.</p> <p>Returns:</p> Type Description <code>Optional[str]</code> <p>\u0422\u043e\u043a\u0435\u043d \u0438\u043b\u0438 None \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d.</p> Example"},{"location":"api/client/#kwork_api.client.KworkClient.token--_1","title":"\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f","text":"<p>client = await KworkClient.login(\"user\", \"pass\") token = client.token</p>"},{"location":"api/client/#kwork_api.client.KworkClient.token--_2","title":"\u041f\u043e\u0437\u0436\u0435: \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438","text":"<p>client = KworkClient(token=token)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.user","title":"user <code>property</code>","text":"<pre><code>user\n</code></pre> <p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 API.</p>"},{"location":"api/client/#kwork_api.client.KworkClient-classes","title":"Classes","text":""},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI","title":"CatalogAPI","text":"<pre><code>CatalogAPI(client)\n</code></pre> <p>API \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.</p> <p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u0443\u0441\u043b\u0443\u0433 Kwork: - \u041f\u043e\u0438\u0441\u043a \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043a\u0432\u043e\u0440\u043a\u043e\u0432 - \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 - \u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430</p> Example Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI--_1","title":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430","text":"<p>catalog = await client.catalog.get_list(page=1)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI--_2","title":"\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438","text":"<p>catalog = await client.catalog.get_list(category_id=5)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI--_3","title":"\u0414\u0435\u0442\u0430\u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u0432\u043e\u0440\u043a\u0430","text":"<p>details = await client.catalog.get_details(kwork_id=12345)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI.get_details","title":"get_details <code>async</code>","text":"<pre><code>get_details(kwork_id)\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0432\u043e\u0440\u043a\u0435.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0432\u043e\u0440\u043a\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f: - \u041f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f - \u0421\u0440\u043e\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0430\u0432\u043e\u043a - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 (features) - FAQ \u043e\u0442 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u0430</p> <p>Parameters:</p> Name Type Description Default <code>kwork_id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0432\u043e\u0440\u043a\u0430.</p> required <p>Returns:</p> Type Description <code>KworkDetails</code> <p>KworkDetails \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043a\u0432\u043e\u0440\u043a\u0435.</p> <p>Raises:</p> Type Description <code>KworkNotFoundError</code> <p>\u0415\u0441\u043b\u0438 \u043a\u0432\u043e\u0440\u043a \u0441 \u0442\u0430\u043a\u0438\u043c ID \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.</p> Example <p>details = await client.catalog.get_details(12345) print(f\"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435: {details.title}\") print(f\"\u0426\u0435\u043d\u0430: {details.price} {details.currency}\") print(f\"\u0421\u0440\u043e\u043a: {details.delivery_time} \u0434\u043d\u0435\u0439\") print(f\"\u041f\u0440\u0430\u0432\u043a\u0438: {details.revisions}\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_details(self, kwork_id: int) -&gt; KworkDetails:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0432\u043e\u0440\u043a\u0435.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0432\u043e\u0440\u043a\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f:\n - \u041f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\n - \u0421\u0440\u043e\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0430\u0432\u043e\u043a\n - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 (features)\n - FAQ \u043e\u0442 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u0430\n\n Args:\n kwork_id: \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0432\u043e\u0440\u043a\u0430.\n\n Returns:\n KworkDetails \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043a\u0432\u043e\u0440\u043a\u0435.\n\n Raises:\n KworkNotFoundError: \u0415\u0441\u043b\u0438 \u043a\u0432\u043e\u0440\u043a \u0441 \u0442\u0430\u043a\u0438\u043c ID \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.\n\n Example:\n details = await client.catalog.get_details(12345)\n print(f\"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435: {details.title}\")\n print(f\"\u0426\u0435\u043d\u0430: {details.price} {details.currency}\")\n print(f\"\u0421\u0440\u043e\u043a: {details.delivery_time} \u0434\u043d\u0435\u0439\")\n print(f\"\u041f\u0440\u0430\u0432\u043a\u0438: {details.revisions}\")\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/getKworkDetails\",\n json={\"kwork_id\": kwork_id},\n )\n return KworkDetails.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI.get_details_extra","title":"get_details_extra <code>async</code>","text":"<pre><code>get_details_extra(kwork_id)\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043a\u0432\u043e\u0440\u043a\u0430.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043e\u0442\u0432\u0435\u0442 get_details(). \u041c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c: - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f - \u0412\u0438\u0434\u0435\u043e \u043e\u0431\u0437\u043e\u0440\u044b - \u0414\u0435\u0442\u0430\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0443\u0441\u043b\u0443\u0433 - \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u0440\u043e\u0434\u0430\u0436</p> <p>Parameters:</p> Name Type Description Default <code>kwork_id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0432\u043e\u0440\u043a\u0430.</p> required <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442</p> <code>dict[str, Any]</code> <p>\u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u0432\u043e\u0440\u043a\u0430 \u0438 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439.</p> Note <p>\u042d\u0442\u043e\u0442 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \"\u0441\u044b\u0440\u044b\u0435\" \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0437 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_details_extra(self, kwork_id: int) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043a\u0432\u043e\u0440\u043a\u0430.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430\n \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043e\u0442\u0432\u0435\u0442 get_details(). \u041c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c:\n - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\n - \u0412\u0438\u0434\u0435\u043e \u043e\u0431\u0437\u043e\u0440\u044b\n - \u0414\u0435\u0442\u0430\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0443\u0441\u043b\u0443\u0433\n - \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u0440\u043e\u0434\u0430\u0436\n\n Args:\n kwork_id: \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0432\u043e\u0440\u043a\u0430.\n\n Returns:\n \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442\n \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u0432\u043e\u0440\u043a\u0430 \u0438 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439.\n\n Note:\n \u042d\u0442\u043e\u0442 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \"\u0441\u044b\u0440\u044b\u0435\" \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0437 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.\n \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f.\n \"\"\"\n return await self.client._request(\n \"POST\",\n \"/getKworkDetailsExtra\",\n json={\"kwork_id\": kwork_id},\n )\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI.get_list","title":"get_list <code>async</code>","text":"<pre><code>get_list(page=1, category_id=None, sort='recommend')\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430.</p> <p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043a\u0432\u043e\u0440\u043a\u043e\u0432. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438.</p> <p>Parameters:</p> Name Type Description Default <code>page</code> <code>int</code> <p>\u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1).</p> <code>1</code> <code>category_id</code> <code>Optional[int]</code> <p>ID \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 None \u2014 \u0432\u0441\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.</p> <code>None</code> <code>sort</code> <code>str</code> <p>\u041e\u043f\u0446\u0438\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b: - \"recommend\" \u2014 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) - \"price_asc\" \u2014 \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e \u0446\u0435\u043d\u044b - \"price_desc\" \u2014 \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u0446\u0435\u043d\u044b - \"rating\" \u2014 \u043f\u043e \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0443 - \"reviews\" \u2014 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043e\u0442\u0437\u044b\u0432\u043e\u0432 - \"newest\" \u2014 \u043f\u043e \u0434\u0430\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f</p> <code>'recommend'</code> <p>Returns:</p> Type Description <code>CatalogResponse</code> <p>CatalogResponse \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439:</p> <code>CatalogResponse</code> <ul> <li>kworks: \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435</li> </ul> <code>CatalogResponse</code> <ul> <li>pagination: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438</li> </ul> <code>CatalogResponse</code> <ul> <li>filters: \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b</li> </ul> <code>CatalogResponse</code> <ul> <li>sort_options: \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438</li> </ul> Example Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_list(\n self,\n page: int = 1,\n category_id: Optional[int] = None,\n sort: str = \"recommend\",\n) -&gt; CatalogResponse:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430.\n\n \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438.\n\n Args:\n page: \u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1).\n category_id: ID \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438.\n \u0415\u0441\u043b\u0438 None \u2014 \u0432\u0441\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.\n sort: \u041e\u043f\u0446\u0438\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b:\n - \"recommend\" \u2014 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)\n - \"price_asc\" \u2014 \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e \u0446\u0435\u043d\u044b\n - \"price_desc\" \u2014 \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u0446\u0435\u043d\u044b\n - \"rating\" \u2014 \u043f\u043e \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0443\n - \"reviews\" \u2014 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043e\u0442\u0437\u044b\u0432\u043e\u0432\n - \"newest\" \u2014 \u043f\u043e \u0434\u0430\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\n\n Returns:\n CatalogResponse \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439:\n - kworks: \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\n - pagination: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438\n - filters: \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b\n - sort_options: \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438\n\n Example:\n # \u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u0446\u0435\u043d\u0435\n response = await client.catalog.get_list(\n page=1,\n sort=\"price_asc\"\n )\n\n for kwork in response.kworks:\n print(f\"{kwork.title}: {kwork.price} RUB\")\n\n # \u041f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044f\n if response.pagination and response.pagination.has_next:\n next_page = await client.catalog.get_list(page=2)\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/catalogMainv2\",\n json={\n \"page\": page,\n \"category_id\": category_id,\n \"sort\": sort,\n },\n )\n return CatalogResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI.get_list--_1","title":"\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u0446\u0435\u043d\u0435","text":"<p>response = await client.catalog.get_list( page=1, sort=\"price_asc\" )</p> <p>for kwork in response.kworks: print(f\"{kwork.title}: {kwork.price} RUB\")</p>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI.get_list--_2","title":"\u041f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044f","text":"<p>if response.pagination and response.pagination.has_next: next_page = await client.catalog.get_list(page=2)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI","title":"NotificationsAPI","text":"<pre><code>NotificationsAPI(client)\n</code></pre> <p>API \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.</p> <p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 Kwork: - \u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 - \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 - \u0414\u0438\u0430\u043b\u043e\u0433\u0438 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 - \u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u043b\u043e\u0433\u0438</p> Example Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI--_1","title":"\u0412\u0441\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f","text":"<p>notifications = await client.notifications.get_list()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI--_2","title":"\u041d\u043e\u0432\u044b\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f","text":"<p>new = await client.notifications.fetch()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI--_3","title":"\u0414\u0438\u0430\u043b\u043e\u0433\u0438","text":"<p>dialogs = await client.notifications.get_dialogs()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI.fetch","title":"fetch <code>async</code>","text":"<pre><code>fetch()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.</p> <p>\u041e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 get_list() \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445.</p> <p>Returns:</p> Type Description <code>NotificationsResponse</code> <p>NotificationsResponse \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f\u043c\u0438.</p> Example <p>new_notifs = await client.notifications.fetch() if new_notifs.unread_count &gt; 0: print(f\"\u0423 \u0432\u0430\u0441 {new_notifs.unread_count} \u043d\u043e\u0432\u044b\u0445 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439!\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def fetch(self) -&gt; NotificationsResponse:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.\n\n \u041e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 get_list() \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e\n \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.\n \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445.\n\n Returns:\n NotificationsResponse \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f\u043c\u0438.\n\n Example:\n new_notifs = await client.notifications.fetch()\n if new_notifs.unread_count &gt; 0:\n print(f\"\u0423 \u0432\u0430\u0441 {new_notifs.unread_count} \u043d\u043e\u0432\u044b\u0445 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439!\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/notificationsFetch\")\n return NotificationsResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI.get_blocked_dialogs","title":"get_blocked_dialogs <code>async</code>","text":"<pre><code>get_blocked_dialogs()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.</p> <p>Returns:</p> Type Description <code>list[Dialog]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432.</p> Example <p>blocked = await client.notifications.get_blocked_dialogs() print(f\"\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043e: {len(blocked)} \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_blocked_dialogs(self) -&gt; list[Dialog]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438\n \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432.\n\n Example:\n blocked = await client.notifications.get_blocked_dialogs()\n print(f\"\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043e: {len(blocked)} \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/blockedDialogList\")\n return [Dialog.model_validate(d) for d in data.get(\"dialogs\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI.get_dialogs","title":"get_dialogs <code>async</code>","text":"<pre><code>get_dialogs()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432 (\u0447\u0430\u0442\u043e\u0432).</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 Kwork.</p> <p>Returns:</p> Type Description <code>list[Dialog]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u043e\u0439.</p> Example <p>dialogs = await client.notifications.get_dialogs() for d in dialogs: print(f\"\u0421 {d.participant.username}: {d.last_message}\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_dialogs(self) -&gt; list[Dialog]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432 (\u0447\u0430\u0442\u043e\u0432).\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438\n \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 Kwork.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u043e\u0439.\n\n Example:\n dialogs = await client.notifications.get_dialogs()\n for d in dialogs:\n print(f\"\u0421 {d.participant.username}: {d.last_message}\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/dialogs\")\n return [Dialog.model_validate(d) for d in data.get(\"dialogs\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI.get_list","title":"get_list <code>async</code>","text":"<pre><code>get_list()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0438.</p> <p>Returns:</p> Type Description <code>NotificationsResponse</code> <p>NotificationsResponse \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439:</p> <code>NotificationsResponse</code> <ul> <li>notifications: \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439</li> </ul> <code>NotificationsResponse</code> <ul> <li>unread_count: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445</li> </ul> Example <p>notifs = await client.notifications.get_list() print(f\"\u041d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445: {notifs.unread_count}\")</p> <p>for n in notifs.notifications: if not n.is_read: print(f\"\u041d\u043e\u0432\u043e\u0435: {n.title}\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_list(self) -&gt; NotificationsResponse:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439\n \u043e \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0438.\n\n Returns:\n NotificationsResponse \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439:\n - notifications: \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439\n - unread_count: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445\n\n Example:\n notifs = await client.notifications.get_list()\n print(f\"\u041d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445: {notifs.unread_count}\")\n\n for n in notifs.notifications:\n if not n.is_read:\n print(f\"\u041d\u043e\u0432\u043e\u0435: {n.title}\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/notifications\")\n return NotificationsResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI","title":"OtherAPI","text":"<pre><code>OtherAPI(client)\n</code></pre> <p>\u041f\u0440\u043e\u0447\u0435\u0435 API.</p> <p>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u043e\u0448\u043b\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: - \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f (wants) - \u0421\u0442\u0430\u0442\u0443\u0441\u044b \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u0438 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 - \u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f (offers) - \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044f - \u0421\u0442\u0430\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d/\u043e\u0444\u0444\u043b\u0430\u0439\u043d</p> Example Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI--_1","title":"\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f","text":"<p>wants = await client.other.get_wants()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI--_2","title":"\u0421\u0442\u0430\u0442\u0443\u0441 \u043a\u0432\u043e\u0440\u043a\u043e\u0432","text":"<p>status = await client.other.get_kworks_status()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI--_3","title":"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0444\u0444\u043b\u0430\u0439\u043d","text":"<p>await client.other.go_offline()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_actor","title":"get_actor <code>async</code>","text":"<pre><code>get_actor()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u043a\u0442\u0451\u0440\u0435 (\u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435).</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0430\u043a\u0442\u0451\u0440\u0430/\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_actor(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u043a\u0442\u0451\u0440\u0435 (\u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435).\n\n Returns:\n \u0414\u0430\u043d\u043d\u044b\u0435 \u0430\u043a\u0442\u0451\u0440\u0430/\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\n \"\"\"\n return await self.client._request(\"POST\", \"/actor\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_channel","title":"get_channel <code>async</code>","text":"<pre><code>get_channel()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0430\u043d\u0430\u043b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0414\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u0430 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c).</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_channel(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0430\u043d\u0430\u043b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\n\n Returns:\n \u0414\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u0430 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c).\n \"\"\"\n return await self.client._request(\"POST\", \"/getChannel\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_exchange_info","title":"get_exchange_info <code>async</code>","text":"<pre><code>get_exchange_info()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u043e\u0431\u043c\u0435\u043d\u0435 \u0432\u0430\u043b\u044e\u0442\u044b.</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u0443\u0440\u0441\u0430\u0445 \u0432\u0430\u043b\u044e\u0442 \u0438 \u043e\u0431\u043c\u0435\u043d\u0435.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_exchange_info(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u043e\u0431\u043c\u0435\u043d\u0435 \u0432\u0430\u043b\u044e\u0442\u044b.\n\n Returns:\n \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u0443\u0440\u0441\u0430\u0445 \u0432\u0430\u043b\u044e\u0442 \u0438 \u043e\u0431\u043c\u0435\u043d\u0435.\n \"\"\"\n return await self.client._request(\"POST\", \"/exchangeInfo\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_favorite_categories","title":"get_favorite_categories <code>async</code>","text":"<pre><code>get_favorite_categories()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c ID \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439.</p> <p>Returns:</p> Type Description <code>list[int]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a ID \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435.</p> Example <p>cats = await client.other.get_favorite_categories() print(f\"\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: {cats}\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_favorite_categories(self) -&gt; list[int]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c ID \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a ID \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435.\n\n Example:\n cats = await client.other.get_favorite_categories()\n print(f\"\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: {cats}\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/favoriteCategories\")\n return data.get(\"categories\", [])\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_in_app_notification","title":"get_in_app_notification <code>async</code>","text":"<pre><code>get_in_app_notification()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435.</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0414\u0430\u043d\u043d\u044b\u0435 in-app \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_in_app_notification(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435.\n\n Returns:\n \u0414\u0430\u043d\u043d\u044b\u0435 in-app \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.\n \"\"\"\n return await self.client._request(\"POST\", \"/getInAppNotification\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_kworks_status","title":"get_kworks_status <code>async</code>","text":"<pre><code>get_kworks_status()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u0445 \u0432\u0441\u0435\u0445 \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u0430\u043a\u0442\u0438\u0432\u0435\u043d, \u043d\u0430 \u043c\u043e\u0434\u0435\u0440\u0430\u0446\u0438\u0438, \u0438 \u0442.\u0434.).</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.</p> Example <p>status = await client.other.get_kworks_status() print(status)</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_kworks_status(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u0445 \u0432\u0441\u0435\u0445 \u043a\u0432\u043e\u0440\u043a\u043e\u0432\n \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u0430\u043a\u0442\u0438\u0432\u0435\u043d, \u043d\u0430 \u043c\u043e\u0434\u0435\u0440\u0430\u0446\u0438\u0438, \u0438 \u0442.\u0434.).\n\n Returns:\n \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.\n\n Example:\n status = await client.other.get_kworks_status()\n print(status)\n \"\"\"\n return await self.client._request(\"POST\", \"/kworksStatusList\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_offers","title":"get_offers <code>async</code>","text":"<pre><code>get_offers()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f.</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 Kwork.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_offers(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 Kwork.\n \"\"\"\n return await self.client._request(\"POST\", \"/offers\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_security_user_data","title":"get_security_user_data <code>async</code>","text":"<pre><code>get_security_user_data()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_security_user_data(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\n\n Returns:\n \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430.\n \"\"\"\n return await self.client._request(\"POST\", \"/getSecurityUserData\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_viewed_kworks","title":"get_viewed_kworks <code>async</code>","text":"<pre><code>get_viewed_kworks()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u043a\u0432\u043e\u0440\u043a\u0438.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0432\u043e\u0440\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0440\u0430\u043d\u0435\u0435.</p> <p>Returns:</p> Type Description <code>list[Kwork]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.</p> Example <p>viewed = await client.other.get_viewed_kworks() print(f\"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e: {len(viewed)} \u043a\u0432\u043e\u0440\u043a\u043e\u0432\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_viewed_kworks(self) -&gt; list[Kwork]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u043a\u0432\u043e\u0440\u043a\u0438.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0432\u043e\u0440\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\n \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0440\u0430\u043d\u0435\u0435.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.\n\n Example:\n viewed = await client.other.get_viewed_kworks()\n print(f\"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e: {len(viewed)} \u043a\u0432\u043e\u0440\u043a\u043e\u0432\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/viewedCatalogKworks\")\n return [Kwork.model_validate(k) for k in data.get(\"kworks\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_wants","title":"get_wants <code>async</code>","text":"<pre><code>get_wants()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f (wants).</p> <p>Wants \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: - \u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 - \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 - \u0424\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439.</p> Example <p>wants = await client.other.get_wants() print(wants)</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_wants(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f (wants).\n\n Wants \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:\n - \u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438\n - \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430\n - \u0424\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430\n\n Returns:\n \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439.\n\n Example:\n wants = await client.other.get_wants()\n print(wants)\n \"\"\"\n return await self.client._request(\"POST\", \"/myWants\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_wants_status","title":"get_wants_status <code>async</code>","text":"<pre><code>get_wants_status()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439.</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0421\u0442\u0430\u0442\u0443\u0441 wants \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_wants_status(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439.\n\n Returns:\n \u0421\u0442\u0430\u0442\u0443\u0441 wants \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438.\n \"\"\"\n return await self.client._request(\"POST\", \"/wantsStatusList\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.go_offline","title":"go_offline <code>async</code>","text":"<pre><code>go_offline()\n</code></pre> <p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \"\u043e\u0444\u0444\u043b\u0430\u0439\u043d\".</p> <p>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u043d\u043b\u0430\u0439\u043d-\u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430.</p> Example <p>await client.other.go_offline()</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def go_offline(self) -&gt; dict[str, Any]:\n \"\"\"\n \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \"\u043e\u0444\u0444\u043b\u0430\u0439\u043d\".\n\n \u0421\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u043d\u043b\u0430\u0439\u043d-\u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.\n\n Returns:\n \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430.\n\n Example:\n await client.other.go_offline()\n \"\"\"\n return await self.client._request(\"POST\", \"/offline\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.is_dialog_allow","title":"is_dialog_allow <code>async</code>","text":"<pre><code>is_dialog_allow(user_id)\n</code></pre> <p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.</p> <p>Parameters:</p> Name Type Description Default <code>user_id</code> <code>int</code> <p>ID \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.</p> required <p>Returns:</p> Type Description <code>bool</code> <p>True \u0435\u0441\u043b\u0438 \u0434\u0438\u0430\u043b\u043e\u0433 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d, False \u0438\u043d\u0430\u0447\u0435.</p> Example <p>allowed = await client.other.is_dialog_allow(12345) if allowed: print(\"\u041c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def is_dialog_allow(self, user_id: int) -&gt; bool:\n \"\"\"\n \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.\n\n Args:\n user_id: ID \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.\n\n Returns:\n True \u0435\u0441\u043b\u0438 \u0434\u0438\u0430\u043b\u043e\u0433 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d, False \u0438\u043d\u0430\u0447\u0435.\n\n Example:\n allowed = await client.other.is_dialog_allow(12345)\n if allowed:\n print(\"\u041c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\")\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/isDialogAllow\",\n json={\"user_id\": user_id},\n )\n return data.get(\"allowed\", False)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.update_settings","title":"update_settings <code>async</code>","text":"<pre><code>update_settings(settings)\n</code></pre> <p>\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <p>Parameters:</p> Name Type Description Default <code>settings</code> <code>dict[str, Any]</code> <p>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a.</p> required <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u041e\u0442\u0432\u0435\u0442 API \u0441 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.</p> Example <p>await client.other.update_settings({ \"email_notifications\": True, \"language\": \"ru\" })</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def update_settings(self, settings: dict[str, Any]) -&gt; dict[str, Any]:\n \"\"\"\n \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\n\n Args:\n settings: \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.\n \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a.\n\n Returns:\n \u041e\u0442\u0432\u0435\u0442 API \u0441 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.\n\n Example:\n await client.other.update_settings({\n \"email_notifications\": True,\n \"language\": \"ru\"\n })\n \"\"\"\n return await self.client._request(\"POST\", \"/updateSettings\", json=settings)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.validate_text","title":"validate_text <code>async</code>","text":"<pre><code>validate_text(text, context=None)\n</code></pre> <p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c Kwork.</p> <p>\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438: - \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u043a\u0432\u043e\u0440\u043a\u043e\u0432 - \u0422\u0435\u043a\u0441\u0442\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 - \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u043e\u0442\u0437\u044b\u0432\u043e\u0432</p> <p>\u041d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: - \u0417\u0430\u043f\u0440\u0435\u0449\u0451\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b - \u041d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0438 - \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c</p> <p>Parameters:</p> Name Type Description Default <code>text</code> <code>str</code> <p>\u0422\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.</p> required <code>context</code> <code>Optional[str]</code> <p>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \"kwork_description\", \"project_text\", \"message\".</p> <code>None</code> <p>Returns:</p> Type Description <code>ValidationResponse</code> <p>ValidationResponse \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.</p> Example <p>result = await client.other.validate_text( \"\u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u0437\u0432\u043e\u043d\u0438\u0442\u0435 +7-999-000-00-00\" ) if not result.is_valid: print(\"\u0422\u0435\u043a\u0441\u0442 \u043d\u0435 \u043f\u0440\u043e\u0448\u0451\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e:\") for issue in result.issues: print(f\" - {issue.message}\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def validate_text(self, text: str, context: Optional[str] = None) -&gt; ValidationResponse:\n \"\"\"\n \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c Kwork.\n\n \u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438:\n - \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u043a\u0432\u043e\u0440\u043a\u043e\u0432\n - \u0422\u0435\u043a\u0441\u0442\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432\n - \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u043e\u0442\u0437\u044b\u0432\u043e\u0432\n\n \u041d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:\n - \u0417\u0430\u043f\u0440\u0435\u0449\u0451\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b\n - \u041d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0438\n - \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c\n\n Args:\n text: \u0422\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.\n context: \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e).\n \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \"kwork_description\", \"project_text\", \"message\".\n\n Returns:\n ValidationResponse \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.\n\n Example:\n result = await client.other.validate_text(\n \"\u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u0437\u0432\u043e\u043d\u0438\u0442\u0435 +7-999-000-00-00\"\n )\n if not result.is_valid:\n print(\"\u0422\u0435\u043a\u0441\u0442 \u043d\u0435 \u043f\u0440\u043e\u0448\u0451\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e:\")\n for issue in result.issues:\n print(f\" - {issue.message}\")\n \"\"\"\n payload = {\"text\": text}\n if context:\n payload[\"context\"] = context\n\n data = await self.client._request(\n \"POST\",\n \"/api/validation/checktext\",\n json=payload,\n )\n return ValidationResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI","title":"ProjectsAPI","text":"<pre><code>ProjectsAPI(client)\n</code></pre> <p>API \u0431\u0438\u0440\u0436\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 (\u0444\u0440\u0438\u043b\u0430\u043d\u0441 \u0437\u0430\u043a\u0430\u0437\u044b).</p> <p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0437\u0430\u043a\u0430\u0437\u0430\u043c \u043d\u0430 \u0444\u0440\u0438\u043b\u0430\u043d\u0441: - \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 - \u0417\u0430\u043a\u0430\u0437\u044b \u0433\u0434\u0435 \u0432\u044b \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a (payer) - \u0417\u0430\u043a\u0430\u0437\u044b \u0433\u0434\u0435 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c (worker)</p> Example Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI--_1","title":"\u041d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b","text":"<p>projects = await client.projects.get_list(page=1)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI--_2","title":"\u041c\u043e\u0438 \u0437\u0430\u043a\u0430\u0437\u044b \u043a\u0430\u043a \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430","text":"<p>my_orders = await client.projects.get_payer_orders()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI--_3","title":"\u041c\u043e\u0438 \u0437\u0430\u043a\u0430\u0437\u044b \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044f","text":"<p>my_work = await client.projects.get_worker_orders()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI.get_list","title":"get_list <code>async</code>","text":"<pre><code>get_list(page=1, category_id=None)\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 \u0431\u0438\u0440\u0436\u0438.</p> <p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0437\u0430\u043a\u0430\u0437\u043e\u0432. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.</p> <p>Parameters:</p> Name Type Description Default <code>page</code> <code>int</code> <p>\u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1).</p> <code>1</code> <code>category_id</code> <code>Optional[int]</code> <p>ID \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 None \u2014 \u0432\u0441\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.</p> <code>None</code> <p>Returns:</p> Type Description <code>ProjectsResponse</code> <p>ProjectsResponse \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439:</p> <code>ProjectsResponse</code> <ul> <li>projects: \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435</li> </ul> <code>ProjectsResponse</code> <ul> <li>pagination: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438</li> </ul> Example Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_list(\n self,\n page: int = 1,\n category_id: Optional[int] = None,\n) -&gt; ProjectsResponse:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 \u0431\u0438\u0440\u0436\u0438.\n\n \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0437\u0430\u043a\u0430\u0437\u043e\u0432.\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.\n\n Args:\n page: \u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1).\n category_id: ID \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438.\n \u0415\u0441\u043b\u0438 None \u2014 \u0432\u0441\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.\n\n Returns:\n ProjectsResponse \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439:\n - projects: \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\n - pagination: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438\n\n Example:\n # \u0412\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b\n response = await client.projects.get_list(page=1)\n\n for project in response.projects:\n print(f\"{project.title}: {project.budget} {project.budget_type}\")\n\n # \u0422\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f \"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\"\n dev_projects = await client.projects.get_list(\n page=1,\n category_id=5\n )\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/projects\",\n json={\n \"page\": page,\n \"category_id\": category_id,\n },\n )\n return ProjectsResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI.get_list--_1","title":"\u0412\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b","text":"<p>response = await client.projects.get_list(page=1)</p> <p>for project in response.projects: print(f\"{project.title}: {project.budget} {project.budget_type}\")</p>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI.get_list--_2","title":"\u0422\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f \"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\"","text":"<p>dev_projects = await client.projects.get_list( page=1, category_id=5 )</p>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI.get_payer_orders","title":"get_payer_orders <code>async</code>","text":"<pre><code>get_payer_orders()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u043a\u0430\u0437\u044b \u0433\u0434\u0435 \u0432\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0435\u0441\u044c \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u043e\u043c.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0438\u0445 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 (\u043e\u0442\u043a\u0440\u044b\u0442, \u0432 \u0440\u0430\u0431\u043e\u0442\u0435, \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d).</p> <p>Returns:</p> Type Description <code>list[Project]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0433\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u2014 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a.</p> Example <p>orders = await client.projects.get_payer_orders() for order in orders: print(f\"\u0417\u0430\u043a\u0430\u0437 #{order.id}: {order.status}\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_payer_orders(self) -&gt; list[Project]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u043a\u0430\u0437\u044b \u0433\u0434\u0435 \u0432\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0435\u0441\u044c \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u043e\u043c.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c,\n \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0438\u0445 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 (\u043e\u0442\u043a\u0440\u044b\u0442, \u0432 \u0440\u0430\u0431\u043e\u0442\u0435, \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d).\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0433\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u2014 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a.\n\n Example:\n orders = await client.projects.get_payer_orders()\n for order in orders:\n print(f\"\u0417\u0430\u043a\u0430\u0437 #{order.id}: {order.status}\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/payerOrders\")\n return [Project.model_validate(p) for p in data.get(\"orders\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI.get_worker_orders","title":"get_worker_orders <code>async</code>","text":"<pre><code>get_worker_orders()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u043a\u0430\u0437\u044b \u0433\u0434\u0435 \u0432\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u043c.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0433\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u043c.</p> <p>Returns:</p> Type Description <code>list[Project]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0433\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u2014 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c.</p> Example <p>work = await client.projects.get_worker_orders() active = [p for p in work if p.status == \"in_progress\"] print(f\"\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u043a\u0430\u0437\u043e\u0432: {len(active)}\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_worker_orders(self) -&gt; list[Project]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u043a\u0430\u0437\u044b \u0433\u0434\u0435 \u0432\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u043c.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0433\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\n \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u043c.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0433\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u2014 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c.\n\n Example:\n work = await client.projects.get_worker_orders()\n active = [p for p in work if p.status == \"in_progress\"]\n print(f\"\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u043a\u0430\u0437\u043e\u0432: {len(active)}\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/workerOrders\")\n return [Project.model_validate(p) for p in data.get(\"orders\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI","title":"ReferenceAPI","text":"<pre><code>ReferenceAPI(client)\n</code></pre> <p>\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u043e\u0435 API.</p> <p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c Kwork: - \u0413\u043e\u0440\u043e\u0434\u0430, \u0441\u0442\u0440\u0430\u043d\u044b, \u0447\u0430\u0441\u043e\u0432\u044b\u0435 \u043f\u043e\u044f\u0441\u0430 - \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f - \u0417\u043d\u0430\u0447\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439</p> <p>\u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u044b.</p> Example Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI--_1","title":"\u0412\u0441\u0435 \u0441\u0442\u0440\u0430\u043d\u044b","text":"<p>countries = await client.reference.get_countries()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI--_2","title":"\u0412\u0441\u0435 \u0433\u043e\u0440\u043e\u0434\u0430","text":"<p>cities = await client.reference.get_cities()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI--_3","title":"\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0444\u0438\u0447\u0438","text":"<p>features = await client.reference.get_features()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_badges_info","title":"get_badges_info <code>async</code>","text":"<pre><code>get_badges_info()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0437\u043d\u0430\u0447\u043a\u0430\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.</p> <p>\u0417\u043d\u0430\u0447\u043a\u0438 (badges) \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u044b: - \"\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\" - \"\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\" - \"\u041d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0430\u0432\u0435\u0446\" - \u0438 \u0442.\u0434.</p> <p>Returns:</p> Type Description <code>list[Badge]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438.</p> Example <p>badges = await client.reference.get_badges_info() for badge in badges: print(f\"{badge.name}: {badge.description}\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_badges_info(self) -&gt; list[Badge]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0437\u043d\u0430\u0447\u043a\u0430\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.\n\n \u0417\u043d\u0430\u0447\u043a\u0438 (badges) \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u044b:\n - \"\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\"\n - \"\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\"\n - \"\u041d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0430\u0432\u0435\u0446\"\n - \u0438 \u0442.\u0434.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438.\n\n Example:\n badges = await client.reference.get_badges_info()\n for badge in badges:\n print(f\"{badge.name}: {badge.description}\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/getBadgesInfo\")\n return [Badge.model_validate(b) for b in data.get(\"badges\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_cities","title":"get_cities <code>async</code>","text":"<pre><code>get_cities()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432.</p> <p>Returns:</p> Type Description <code>list[City]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 Kwork.</p> Example <p>cities = await client.reference.get_cities() moscow = next(c for c in cities if c.name == \"\u041c\u043e\u0441\u043a\u0432\u0430\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_cities(self) -&gt; list[City]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 Kwork.\n\n Example:\n cities = await client.reference.get_cities()\n moscow = next(c for c in cities if c.name == \"\u041c\u043e\u0441\u043a\u0432\u0430\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/cities\")\n return [City.model_validate(c) for c in data.get(\"cities\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_countries","title":"get_countries <code>async</code>","text":"<pre><code>get_countries()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d.</p> <p>Returns:</p> Type Description <code>list[Country]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d \u0441 \u043a\u043e\u0434\u0430\u043c\u0438 \u0438 \u0433\u043e\u0440\u043e\u0434\u0430\u043c\u0438.</p> Example <p>countries = await client.reference.get_countries() russia = next(c for c in countries if c.code == \"RU\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_countries(self) -&gt; list[Country]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d \u0441 \u043a\u043e\u0434\u0430\u043c\u0438 \u0438 \u0433\u043e\u0440\u043e\u0434\u0430\u043c\u0438.\n\n Example:\n countries = await client.reference.get_countries()\n russia = next(c for c in countries if c.code == \"RU\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/countries\")\n return [Country.model_validate(c) for c in data.get(\"countries\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_features","title":"get_features <code>async</code>","text":"<pre><code>get_features()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (features).</p> <p>Features \u2014 \u044d\u0442\u043e \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a \u043a\u0432\u043e\u0440\u043a\u0430\u043c: - \u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u043e\u043a\u0438 - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 - \u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 - \u0438 \u0442.\u0434.</p> <p>Returns:</p> Type Description <code>list[Feature]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 features \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u0446\u0435\u043d\u0430\u043c\u0438.</p> Example <p>features = await client.reference.get_features() for f in features: print(f\"{f.name}: {f.price} RUB\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_features(self) -&gt; list[Feature]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (features).\n\n Features \u2014 \u044d\u0442\u043e \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a \u043a\u0432\u043e\u0440\u043a\u0430\u043c:\n - \u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u043e\u043a\u0438\n - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438\n - \u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430\n - \u0438 \u0442.\u0434.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 features \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u0446\u0435\u043d\u0430\u043c\u0438.\n\n Example:\n features = await client.reference.get_features()\n for f in features:\n print(f\"{f.name}: {f.price} RUB\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/getAvailableFeatures\")\n return [Feature.model_validate(f) for f in data.get(\"features\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_public_features","title":"get_public_features <code>async</code>","text":"<pre><code>get_public_features()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.</p> <p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e get_features(), \u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438.</p> <p>Returns:</p> Type Description <code>list[Feature]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 features.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_public_features(self) -&gt; list[Feature]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.\n\n \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e get_features(), \u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e\n \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 features.\n \"\"\"\n data = await self.client._request(\"POST\", \"/getPublicFeatures\")\n return [Feature.model_validate(f) for f in data.get(\"features\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_timezones","title":"get_timezones <code>async</code>","text":"<pre><code>get_timezones()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0447\u0430\u0441\u043e\u0432\u044b\u0445 \u043f\u043e\u044f\u0441\u043e\u0432.</p> <p>Returns:</p> Type Description <code>list[TimeZone]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0447\u0430\u0441\u043e\u0432\u044b\u0445 \u043f\u043e\u044f\u0441\u043e\u0432 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438.</p> Example <p>timezones = await client.reference.get_timezones() msks = next(tz for tz in timezones if \"Moscow\" in tz.name)</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_timezones(self) -&gt; list[TimeZone]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0447\u0430\u0441\u043e\u0432\u044b\u0445 \u043f\u043e\u044f\u0441\u043e\u0432.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u0447\u0430\u0441\u043e\u0432\u044b\u0445 \u043f\u043e\u044f\u0441\u043e\u0432 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438.\n\n Example:\n timezones = await client.reference.get_timezones()\n msks = next(tz for tz in timezones if \"Moscow\" in tz.name)\n \"\"\"\n data = await self.client._request(\"POST\", \"/timezones\")\n return [TimeZone.model_validate(t) for t in data.get(\"timezones\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI","title":"UserAPI","text":"<pre><code>UserAPI(client)\n</code></pre> <p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 API.</p> <p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: - \u041f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 - \u041e\u0442\u0437\u044b\u0432\u044b (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435) - \u0418\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u0432\u043e\u0440\u043a\u0438</p> Example Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI--_1","title":"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435","text":"<p>info = await client.user.get_info()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI--_2","title":"\u041c\u043e\u0438 \u043e\u0442\u0437\u044b\u0432\u044b","text":"<p>reviews = await client.user.get_reviews()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI--_3","title":"\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u0432\u043e\u0440\u043a\u0438","text":"<p>favorites = await client.user.get_favorite_kworks()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI.get_favorite_kworks","title":"get_favorite_kworks <code>async</code>","text":"<pre><code>get_favorite_kworks()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043a\u0432\u043e\u0440\u043a\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432 \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435.</p> <p>Returns:</p> Type Description <code>list[Kwork]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.</p> Example <p>favorites = await client.user.get_favorite_kworks() for kwork in favorites: print(f\"{kwork.title}: {kwork.price} RUB\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_favorite_kworks(self) -&gt; list[Kwork]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043a\u0432\u043e\u0440\u043a\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432 \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435.\n\n Returns:\n \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.\n\n Example:\n favorites = await client.user.get_favorite_kworks()\n for kwork in favorites:\n print(f\"{kwork.title}: {kwork.price} RUB\")\n \"\"\"\n data = await self.client._request(\"POST\", \"/favoriteKworks\")\n return [Kwork.model_validate(k) for k in data.get(\"kworks\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI.get_info","title":"get_info <code>async</code>","text":"<pre><code>get_info()\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435.</p> <p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430: - ID, username, email - \u0411\u0430\u043b\u0430\u043d\u0441, \u0440\u0435\u0439\u0442\u0438\u043d\u0433 - \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 - \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044f</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435.</p> <code>dict[str, Any]</code> <p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 API.</p> Example <p>info = await client.user.get_info() print(f\"User: {info.get('username')}\") print(f\"Balance: {info.get('balance')} RUB\")</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_info(self) -&gt; dict[str, Any]:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435.\n\n \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430:\n - ID, username, email\n - \u0411\u0430\u043b\u0430\u043d\u0441, \u0440\u0435\u0439\u0442\u0438\u043d\u0433\n - \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438\n - \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\n\n Returns:\n \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435.\n \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 API.\n\n Example:\n info = await client.user.get_info()\n print(f\"User: {info.get('username')}\")\n print(f\"Balance: {info.get('balance')} RUB\")\n \"\"\"\n return await self.client._request(\"POST\", \"/user\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI.get_reviews","title":"get_reviews <code>async</code>","text":"<pre><code>get_reviews(user_id=None, page=1)\n</code></pre> <p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0437\u044b\u0432\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <p>\u0415\u0441\u043b\u0438 user_id \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u0437\u044b\u0432\u044b \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d \u2014 \u043e\u0442\u0437\u044b\u0432\u044b \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e ID.</p> <p>Parameters:</p> Name Type Description Default <code>user_id</code> <code>Optional[int]</code> <p>ID \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 None \u2014 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.</p> <code>None</code> <code>page</code> <code>int</code> <p>\u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1).</p> <code>1</code> <p>Returns:</p> Type Description <code>ReviewsResponse</code> <p>ReviewsResponse \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439:</p> <code>ReviewsResponse</code> <ul> <li>reviews: \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0442\u0437\u044b\u0432\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435</li> </ul> <code>ReviewsResponse</code> <ul> <li>pagination: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438</li> </ul> <code>ReviewsResponse</code> <ul> <li>average_rating: \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u0439\u0442\u0438\u043d\u0433</li> </ul> Example Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_reviews(\n self,\n user_id: Optional[int] = None,\n page: int = 1,\n) -&gt; ReviewsResponse:\n \"\"\"\n \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0437\u044b\u0432\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\n\n \u0415\u0441\u043b\u0438 user_id \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u0437\u044b\u0432\u044b \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\n \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d \u2014 \u043e\u0442\u0437\u044b\u0432\u044b \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e ID.\n\n Args:\n user_id: ID \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 None \u2014 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.\n page: \u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1).\n\n Returns:\n ReviewsResponse \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439:\n - reviews: \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0442\u0437\u044b\u0432\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\n - pagination: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438\n - average_rating: \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\n\n Example:\n # \u041c\u043e\u0438 \u043e\u0442\u0437\u044b\u0432\u044b\n my_reviews = await client.user.get_reviews()\n\n # \u041e\u0442\u0437\u044b\u0432\u044b \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\n user_reviews = await client.user.get_reviews(user_id=12345)\n\n # \u0421 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0435\u0439\n page2 = await client.user.get_reviews(page=2)\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/userReviews\",\n json={\"user_id\": user_id, \"page\": page},\n )\n return ReviewsResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI.get_reviews--_1","title":"\u041c\u043e\u0438 \u043e\u0442\u0437\u044b\u0432\u044b","text":"<p>my_reviews = await client.user.get_reviews()</p>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI.get_reviews--_2","title":"\u041e\u0442\u0437\u044b\u0432\u044b \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f","text":"<p>user_reviews = await client.user.get_reviews(user_id=12345)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI.get_reviews--_3","title":"\u0421 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0435\u0439","text":"<p>page2 = await client.user.get_reviews(page=2)</p>"},{"location":"api/client/#kwork_api.client.KworkClient-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.close","title":"close <code>async</code>","text":"<pre><code>close()\n</code></pre> <p>Close HTTP client.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def close(self) -&gt; None:\n \"\"\"Close HTTP client.\"\"\"\n if self._client and not self._client.is_closed:\n await self._client.aclose()\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.login","title":"login <code>async</code> <code>classmethod</code>","text":"<pre><code>login(username, password, timeout=30.0)\n</code></pre> <p>\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e \u043b\u043e\u0433\u0438\u043d\u0443 \u0438 \u043f\u0430\u0440\u043e\u043b\u044e.</p> <p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0434\u0432\u0443\u0445\u044d\u0442\u0430\u043f\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Kwork: 1. POST /signIn \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 session cookies 2. POST /getWebAuthToken \u2014 \u043e\u0431\u043c\u0435\u043d cookies \u043d\u0430 web_auth_token</p> <p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d \u0438 cookies \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.</p> <p>Parameters:</p> Name Type Description Default <code>username</code> <code>str</code> <p>\u041b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 email \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 Kwork.</p> required <code>password</code> <code>str</code> <p>\u041f\u0430\u0440\u043e\u043b\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 Kwork.</p> required <code>timeout</code> <code>float</code> <p>\u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u0442\u0430\u043f\u0443.</p> <code>30.0</code> <p>Returns:</p> Type Description <code>KworkClient</code> <p>\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 KworkClient,</p> <code>KworkClient</code> <p>\u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 API.</p> <p>Raises:</p> Type Description <code>KworkAuthError</code> <p>\u0415\u0441\u043b\u0438 \u043b\u043e\u0433\u0438\u043d/\u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435\u0432\u0435\u0440\u043d\u044b \u0438\u043b\u0438 \u0442\u043e\u043a\u0435\u043d \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d.</p> <code>KworkNetworkError</code> <p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0442\u0438.</p> Example Security <p>\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0435. \u0422\u043e\u043b\u044c\u043a\u043e token \u0438 cookies. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c token \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f.</p> Note <p>\u0422\u043e\u043a\u0435\u043d \u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438. \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 401 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 login().</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>@classmethod\nasync def login(\n cls,\n username: str,\n password: str,\n timeout: float = 30.0,\n) -&gt; \"KworkClient\":\n \"\"\"\n \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e \u043b\u043e\u0433\u0438\u043d\u0443 \u0438 \u043f\u0430\u0440\u043e\u043b\u044e.\n\n \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0434\u0432\u0443\u0445\u044d\u0442\u0430\u043f\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Kwork:\n 1. POST /signIn \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 session cookies\n 2. POST /getWebAuthToken \u2014 \u043e\u0431\u043c\u0435\u043d cookies \u043d\u0430 web_auth_token\n\n \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d \u0438 cookies \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\n\n Args:\n username: \u041b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 email \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 Kwork.\n password: \u041f\u0430\u0440\u043e\u043b\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 Kwork.\n timeout: \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u0442\u0430\u043f\u0443.\n\n Returns:\n \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 KworkClient,\n \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 API.\n\n Raises:\n KworkAuthError: \u0415\u0441\u043b\u0438 \u043b\u043e\u0433\u0438\u043d/\u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435\u0432\u0435\u0440\u043d\u044b \u0438\u043b\u0438 \u0442\u043e\u043a\u0435\u043d \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d.\n KworkNetworkError: \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0442\u0438.\n\n Example:\n # \u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\n client = await KworkClient.login(\"myuser\", \"mypassword\")\n\n # \u0421 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c\n client = await KworkClient.login(\"user\", \"pass\", timeout=60.0)\n\n # \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n token = client._token\n # \u041f\u043e\u0437\u0436\u0435: client = KworkClient(token=token)\n\n Security:\n \u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0435. \u0422\u043e\u043b\u044c\u043a\u043e token \u0438 cookies.\n \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c token \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n \u0432\u043c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f.\n\n Note:\n \u0422\u043e\u043a\u0435\u043d \u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438. \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 401 \u043e\u0448\u0438\u0431\u043a\u0438\n \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 login().\n \"\"\"\n client = cls(timeout=timeout)\n\n try:\n async with client._get_httpx_client() as http_client:\n # Step 1: Login to get session cookies\n login_data = {\n \"login_or_email\": username,\n \"password\": password,\n }\n\n response = await http_client.post(\n cls.LOGIN_URL,\n data=login_data,\n headers={\"Referer\": \"https://kwork.ru/\"},\n )\n\n if response.status_code != 200:\n raise KworkAuthError(f\"Login failed: {response.status_code}\")\n\n # Extract cookies\n cookies = dict(response.cookies)\n\n if \"userId\" not in cookies:\n raise KworkAuthError(\"Login failed: no userId in cookies\")\n\n # Step 2: Get web auth token\n token_response = await http_client.post(\n cls.TOKEN_URL,\n json={},\n )\n\n if token_response.status_code != 200:\n raise KworkAuthError(f\"Token request failed: {token_response.status_code}\")\n\n token_data = token_response.json()\n web_token = token_data.get(\"web_auth_token\")\n\n if not web_token:\n raise KworkAuthError(\"No web_auth_token in response\")\n\n # Create new client with token\n return cls(token=web_token, cookies=cookies, timeout=timeout)\n\n except httpx.RequestError as e:\n raise KworkNetworkError(f\"Login request failed: {e}\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.login--_1","title":"\u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435","text":"<p>client = await KworkClient.login(\"myuser\", \"mypassword\")</p>"},{"location":"api/client/#kwork_api.client.KworkClient.login--_2","title":"\u0421 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c","text":"<p>client = await KworkClient.login(\"user\", \"pass\", timeout=60.0)</p>"},{"location":"api/client/#kwork_api.client.KworkClient.login--_3","title":"\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f","text":"<p>token = client._token</p>"},{"location":"api/client/#kwork_api.client.KworkClient.login--client-kworkclienttokentoken","title":"\u041f\u043e\u0437\u0436\u0435: client = KworkClient(token=token)","text":""},{"location":"api/errors/","title":"Errors","text":"<p>Exception classes for API errors.</p>"},{"location":"api/errors/#kwork_api.errors","title":"kwork_api.errors","text":"<p>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f Kwork API.</p> <p>\u0412\u0441\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439:</p> <pre><code>KworkError (\u0431\u0430\u0437\u043e\u0432\u043e\u0435)\n\u251c\u2500\u2500 KworkAuthError (\u043e\u0448\u0438\u0431\u043a\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438)\n\u251c\u2500\u2500 KworkApiError (HTTP \u043e\u0448\u0438\u0431\u043a\u0438 API)\n\u2502 \u251c\u2500\u2500 KworkNotFoundError (404)\n\u2502 \u251c\u2500\u2500 KworkRateLimitError (429)\n\u2502 \u2514\u2500\u2500 KworkValidationError (400)\n\u2514\u2500\u2500 KworkNetworkError (\u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0438)\n</code></pre>"},{"location":"api/errors/#kwork_api.errors-classes","title":"Classes","text":""},{"location":"api/errors/#kwork_api.errors.KworkApiError","title":"KworkApiError","text":"<pre><code>KworkApiError(message, status_code=None, response=None)\n</code></pre> <p> Bases: <code>KworkError</code></p> <p>\u041e\u0448\u0438\u0431\u043a\u0430 HTTP \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a API (4xx, 5xx).</p> <p>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f HTTP \u043e\u0448\u0438\u0431\u043e\u043a API. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u0434 \u0441\u0442\u0430\u0442\u0443\u0441\u0430.</p> <p>Attributes:</p> Name Type Description <code>status_code</code> <p>HTTP \u043a\u043e\u0434 \u043e\u0442\u0432\u0435\u0442\u0430 (400, 404, 500, etc.)</p> Example <p>try: await client.catalog.get_details(999999) except KworkApiError as e: print(f\"HTTP {e.status_code}: {e.message}\")</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(\n self,\n message: str,\n status_code: Optional[int] = None,\n response: Optional[Any] = None,\n):\n self.status_code = status_code\n super().__init__(message, response)\n</code></pre>"},{"location":"api/errors/#kwork_api.errors.KworkAuthError","title":"KworkAuthError","text":"<pre><code>KworkAuthError(\n message=\"Authentication failed\", response=None\n)\n</code></pre> <p> Bases: <code>KworkError</code></p> <p>\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438/\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.</p> <p>\u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u0438: - \u041d\u0435\u0432\u0435\u0440\u043d\u043e\u043c \u043b\u043e\u0433\u0438\u043d\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0435 - \u0418\u0441\u0442\u0451\u043a\u0448\u0435\u043c \u0438\u043b\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e\u043c \u0442\u043e\u043a\u0435\u043d\u0435 - \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (403)</p> Example <p>try: client = await KworkClient.login(\"user\", \"wrong_password\") except KworkAuthError: print(\"\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\")</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, message: str = \"Authentication failed\", response: Optional[Any] = None):\n super().__init__(message, response)\n</code></pre>"},{"location":"api/errors/#kwork_api.errors.KworkError","title":"KworkError","text":"<pre><code>KworkError(message, response=None)\n</code></pre> <p> Bases: <code>Exception</code></p> <p>\u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0448\u0438\u0431\u043e\u043a Kwork API.</p> <p>\u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.</p> <p>Attributes:</p> Name Type Description <code>message</code> <p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.</p> <code>response</code> <p>\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 HTTP response (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c).</p> Example <p>try: await client.catalog.get_list() except KworkError as e: print(f\"\u041e\u0448\u0438\u0431\u043a\u0430: {e.message}\")</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, message: str, response: Optional[Any] = None):\n self.message = message\n self.response = response\n super().__init__(self.message)\n</code></pre>"},{"location":"api/errors/#kwork_api.errors.KworkNetworkError","title":"KworkNetworkError","text":"<pre><code>KworkNetworkError(message='Network error', response=None)\n</code></pre> <p> Bases: <code>KworkError</code></p> <p>\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0442\u0438/\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.</p> <p>\u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u0438: - \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f - \u0422\u0430\u0439\u043c\u0430\u0443\u0442\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 - \u041e\u0448\u0438\u0431\u043a\u0435 DNS - \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 \u0441 SSL</p> Example <p>try: await client.catalog.get_list() except KworkNetworkError: print(\"\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443\")</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, message: str = \"Network error\", response: Optional[Any] = None):\n super().__init__(message, response)\n</code></pre>"},{"location":"api/errors/#kwork_api.errors.KworkNotFoundError","title":"KworkNotFoundError","text":"<pre><code>KworkNotFoundError(resource, response=None)\n</code></pre> <p> Bases: <code>KworkApiError</code></p> <p>\u0420\u0435\u0441\u0443\u0440\u0441 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d (404).</p> <p>\u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u0432\u043e\u0440\u043a\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430.</p> Example <p>try: await client.catalog.get_details(999999) except KworkNotFoundError: print(\"\u041a\u0432\u043e\u0440\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\")</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, resource: str, response: Optional[Any] = None):\n super().__init__(f\"Resource not found: {resource}\", 404, response)\n</code></pre>"},{"location":"api/errors/#kwork_api.errors.KworkRateLimitError","title":"KworkRateLimitError","text":"<pre><code>KworkRateLimitError(\n message=\"Rate limit exceeded\", response=None\n)\n</code></pre> <p> Bases: <code>KworkApiError</code></p> <p>\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d \u043b\u0438\u043c\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (429).</p> <p>\u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0447\u0430\u0441\u0442\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043a API. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u0443\u0437\u0443 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c.</p> Example <p>import asyncio</p> <p>try: await client.catalog.get_list() except KworkRateLimitError: await asyncio.sleep(5) # \u041f\u0430\u0443\u0437\u0430 5 \u0441\u0435\u043a\u0443\u043d\u0434</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, message: str = \"Rate limit exceeded\", response: Optional[Any] = None):\n super().__init__(message, 429, response)\n</code></pre>"},{"location":"api/errors/#kwork_api.errors.KworkValidationError","title":"KworkValidationError","text":"<pre><code>KworkValidationError(\n message=\"Validation failed\", fields=None, response=None\n)\n</code></pre> <p> Bases: <code>KworkApiError</code></p> <p>\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 (400).</p> <p>\u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u0438 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.</p> <p>Attributes:</p> Name Type Description <code>fields</code> <p>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e \u043f\u043e\u043b\u044f\u043c {field: [errors]}.</p> Example <p>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]}\")</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(\n self,\n message: str = \"Validation failed\",\n fields: Optional[dict[str, list[str]]] = None,\n response: Optional[Any] = None,\n):\n self.fields = fields or {}\n super().__init__(message, 400, response)\n</code></pre>"},{"location":"api/models/","title":"Models","text":"<p>Pydantic models for API responses.</p>"},{"location":"api/models/#kwork_api.models","title":"kwork_api.models","text":"<p>Pydantic \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 Kwork API.</p> <p>\u0412\u0441\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 HAR \u0434\u0430\u043c\u043f\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0438 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 API.</p>"},{"location":"api/models/#kwork_api.models-classes","title":"Classes","text":""},{"location":"api/models/#kwork_api.models.APIErrorResponse","title":"APIErrorResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 API \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.</p> <p>Attributes:</p> Name Type Description <code>success</code> <code>bool</code> <p>\u0412\u0441\u0435\u0433\u0434\u0430 False \u0434\u043b\u044f \u043e\u0448\u0438\u0431\u043e\u043a.</p> <code>errors</code> <code>list[ErrorDetail]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u043e\u0448\u0438\u0431\u043e\u043a.</p> <code>message</code> <code>Optional[str]</code> <p>\u041e\u0431\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.</p>"},{"location":"api/models/#kwork_api.models.AuthResponse","title":"AuthResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041e\u0442\u0432\u0435\u0442 API \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.</p> <p>Attributes:</p> Name Type Description <code>success</code> <code>bool</code> <p>\u0423\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.</p> <code>user_id</code> <code>Optional[int]</code> <p>ID \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <code>username</code> <code>Optional[str]</code> <p>\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <code>web_auth_token</code> <code>Optional[str]</code> <p>\u0422\u043e\u043a\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.</p> <code>message</code> <code>Optional[str]</code> <p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435).</p>"},{"location":"api/models/#kwork_api.models.Badge","title":"Badge","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0417\u043d\u0430\u0447\u043e\u043a (\u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435) \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u0437\u043d\u0430\u0447\u043a\u0430.</p> <code>name</code> <code>str</code> <p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u043a\u0430.</p> <code>description</code> <code>Optional[str]</code> <p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f.</p> <code>icon_url</code> <code>Optional[str]</code> <p>URL \u0438\u043a\u043e\u043d\u043a\u0438 \u0437\u043d\u0430\u0447\u043a\u0430.</p>"},{"location":"api/models/#kwork_api.models.CatalogResponse","title":"CatalogResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041e\u0442\u0432\u0435\u0442 API \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043a\u0432\u043e\u0440\u043a\u043e\u0432.</p> <p>Attributes:</p> Name Type Description <code>kworks</code> <code>list[Kwork]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0432\u043e\u0440\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435.</p> <code>pagination</code> <code>Optional[PaginationInfo]</code> <p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.</p> <code>filters</code> <code>Optional[dict[str, Any]]</code> <p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b.</p> <code>sort_options</code> <code>list[str]</code> <p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.</p>"},{"location":"api/models/#kwork_api.models.City","title":"City","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0413\u043e\u0440\u043e\u0434 \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u0433\u043e\u0440\u043e\u0434\u0430.</p> <code>name</code> <code>str</code> <p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0440\u043e\u0434\u0430.</p> <code>country_id</code> <code>Optional[int]</code> <p>ID \u0441\u0442\u0440\u0430\u043d\u044b.</p>"},{"location":"api/models/#kwork_api.models.Country","title":"Country","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0421\u0442\u0440\u0430\u043d\u0430 \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u0441\u0442\u0440\u0430\u043d\u044b.</p> <code>name</code> <code>str</code> <p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u044b.</p> <code>code</code> <code>Optional[str]</code> <p>\u041a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b (ISO).</p> <code>cities</code> <code>list[City]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0432 \u0441\u0442\u0440\u0430\u043d\u0435.</p>"},{"location":"api/models/#kwork_api.models.DataResponse","title":"DataResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 API \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.</p> <p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 API.</p> <p>Attributes:</p> Name Type Description <code>success</code> <code>bool</code> <p>\u0423\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0430.</p> <code>data</code> <code>Optional[dict[str, Any]]</code> <p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0441\u043b\u043e\u0432\u0430\u0440\u044c).</p> <code>message</code> <code>Optional[str]</code> <p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.</p>"},{"location":"api/models/#kwork_api.models.Dialog","title":"Dialog","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0414\u0438\u0430\u043b\u043e\u0433 (\u0447\u0430\u0442) \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u0434\u0438\u0430\u043b\u043e\u0433\u0430.</p> <code>participant</code> <code>Optional[KworkUser]</code> <p>\u0421\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a.</p> <code>last_message</code> <code>Optional[str]</code> <p>\u0422\u0435\u043a\u0441\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.</p> <code>unread_count</code> <code>int</code> <p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.</p> <code>updated_at</code> <code>Optional[datetime]</code> <p>\u0412\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.</p>"},{"location":"api/models/#kwork_api.models.ErrorDetail","title":"ErrorDetail","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0414\u0435\u0442\u0430\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 API.</p> <p>Attributes:</p> Name Type Description <code>code</code> <code>str</code> <p>\u041a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438.</p> <code>message</code> <code>str</code> <p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.</p> <code>field</code> <code>Optional[str]</code> <p>\u041f\u043e\u043b\u0435, \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0435\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 (\u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e).</p>"},{"location":"api/models/#kwork_api.models.Feature","title":"Feature","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f (feature) \u0434\u043b\u044f \u043a\u0432\u043e\u0440\u043a\u0430.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u0444\u0443\u043d\u043a\u0446\u0438\u0438.</p> <code>name</code> <code>str</code> <p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435.</p> <code>description</code> <code>Optional[str]</code> <p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435.</p> <code>price</code> <code>float</code> <p>\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0440\u0443\u0431\u043b\u044f\u0445.</p> <code>type</code> <code>str</code> <p>\u0422\u0438\u043f: \"extra\", \"premium\", etc.</p>"},{"location":"api/models/#kwork_api.models.Kwork","title":"Kwork","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041a\u0432\u043e\u0440\u043a \u2014 \u0443\u0441\u043b\u0443\u0433\u0430 \u043d\u0430 Kwork.</p> <p>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u0432\u043e\u0440\u043a\u0430 \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u043a\u0432\u043e\u0440\u043a\u0430.</p> <code>title</code> <code>str</code> <p>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u0432\u043e\u0440\u043a\u0430.</p> <code>description</code> <code>Optional[str]</code> <p>\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435.</p> <code>price</code> <code>float</code> <p>\u0426\u0435\u043d\u0430 \u0432 \u0440\u0443\u0431\u043b\u044f\u0445.</p> <code>currency</code> <code>str</code> <p>\u0412\u0430\u043b\u044e\u0442\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e RUB).</p> <code>category_id</code> <code>Optional[int]</code> <p>ID \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.</p> <code>seller</code> <code>Optional[KworkUser]</code> <p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u0435.</p> <code>images</code> <code>list[str]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a URL \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439.</p> <code>rating</code> <code>Optional[float]</code> <p>\u0420\u0435\u0439\u0442\u0438\u043d\u0433 \u043a\u0432\u043e\u0440\u043a\u0430 (0-5).</p> <code>reviews_count</code> <code>int</code> <p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0437\u044b\u0432\u043e\u0432.</p> <code>created_at</code> <code>Optional[datetime]</code> <p>\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.</p> <code>updated_at</code> <code>Optional[datetime]</code> <p>\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.</p>"},{"location":"api/models/#kwork_api.models.KworkCategory","title":"KworkCategory","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f \u043a\u0432\u043e\u0440\u043a\u043e\u0432.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.</p> <code>name</code> <code>str</code> <p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.</p> <code>slug</code> <code>str</code> <p>URL-safe \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.</p> <code>parent_id</code> <code>Optional[int]</code> <p>ID \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438.</p>"},{"location":"api/models/#kwork_api.models.KworkDetails","title":"KworkDetails","text":"<p> Bases: <code>Kwork</code></p> <p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u0432\u043e\u0440\u043a\u0435.</p> <p>\u041d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f Kwork \u043f\u043b\u044e\u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438.</p> <p>Attributes:</p> Name Type Description <code>full_description</code> <code>Optional[str]</code> <p>\u041f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0443\u0441\u043b\u0443\u0433\u0438.</p> <code>requirements</code> <code>Optional[str]</code> <p>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0443.</p> <code>delivery_time</code> <code>Optional[int]</code> <p>\u0421\u0440\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0434\u043d\u044f\u0445.</p> <code>revisions</code> <code>Optional[int]</code> <p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u043e\u043a.</p> <code>features</code> <code>list[str]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0446\u0438\u0439.</p> <code>faq</code> <code>list[dict[str, str]]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u0432.</p>"},{"location":"api/models/#kwork_api.models.KworkUser","title":"KworkUser","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 Kwork.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <code>username</code> <code>str</code> <p>\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u043b\u043e\u0433\u0438\u043d).</p> <code>avatar_url</code> <code>Optional[str]</code> <p>URL \u0430\u0432\u0430\u0442\u0430\u0440\u0430 \u0438\u043b\u0438 None.</p> <code>is_online</code> <code>bool</code> <p>\u0421\u0442\u0430\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d.</p> <code>rating</code> <code>Optional[float]</code> <p>\u0420\u0435\u0439\u0442\u0438\u043d\u0433 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (0-5).</p> Example <p>user = KworkUser(id=123, username=\"seller\", rating=4.9) print(f\"{user.username}: {user.rating} \u2605\")</p>"},{"location":"api/models/#kwork_api.models.Notification","title":"Notification","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.</p> <code>type</code> <code>str</code> <p>\u0422\u0438\u043f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f: \"message\", \"order\", \"system\", etc.</p> <code>title</code> <code>str</code> <p>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.</p> <code>message</code> <code>str</code> <p>\u0422\u0435\u043a\u0441\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.</p> <code>is_read</code> <code>bool</code> <p>\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e \u043b\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435.</p> <code>created_at</code> <code>Optional[datetime]</code> <p>\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.</p> <code>link</code> <code>Optional[str]</code> <p>\u0421\u0441\u044b\u043b\u043a\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c).</p>"},{"location":"api/models/#kwork_api.models.NotificationsResponse","title":"NotificationsResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041e\u0442\u0432\u0435\u0442 API \u0441\u043f\u0438\u0441\u043a\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439.</p> <p>Attributes:</p> Name Type Description <code>notifications</code> <code>list[Notification]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439.</p> <code>unread_count</code> <code>int</code> <p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439.</p>"},{"location":"api/models/#kwork_api.models.PaginationInfo","title":"PaginationInfo","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.</p> <p>Attributes:</p> Name Type Description <code>current_page</code> <code>int</code> <p>\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1).</p> <code>total_pages</code> <code>int</code> <p>\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446.</p> <code>total_items</code> <code>int</code> <p>\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.</p> <code>items_per_page</code> <code>int</code> <p>\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435.</p> <code>has_next</code> <code>bool</code> <p>\u0415\u0441\u0442\u044c \u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430.</p> <code>has_prev</code> <code>bool</code> <p>\u0415\u0441\u0442\u044c \u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430.</p>"},{"location":"api/models/#kwork_api.models.Project","title":"Project","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041f\u0440\u043e\u0435\u043a\u0442 (\u0437\u0430\u043a\u0430\u0437 \u043d\u0430 \u0431\u0438\u0440\u0436\u0435 \u0444\u0440\u0438\u043b\u0430\u043d\u0441\u0430).</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u043f\u0440\u043e\u0435\u043a\u0442\u0430.</p> <code>title</code> <code>str</code> <p>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0430.</p> <code>description</code> <code>Optional[str]</code> <p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438.</p> <code>budget</code> <code>Optional[float]</code> <p>\u0411\u044e\u0434\u0436\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.</p> <code>budget_type</code> <code>str</code> <p>\u0422\u0438\u043f \u0431\u044e\u0434\u0436\u0435\u0442\u0430: \"fixed\" (\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439) \u0438\u043b\u0438 \"hourly\" (\u043f\u043e\u0447\u0430\u0441\u043e\u0432\u043e\u0439).</p> <code>category_id</code> <code>Optional[int]</code> <p>ID \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.</p> <code>customer</code> <code>Optional[KworkUser]</code> <p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0435.</p> <code>status</code> <code>str</code> <p>\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: \"open\", \"in_progress\", \"completed\", \"cancelled\".</p> <code>created_at</code> <code>Optional[datetime]</code> <p>\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.</p> <code>updated_at</code> <code>Optional[datetime]</code> <p>\u0414\u0430\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.</p> <code>bids_count</code> <code>int</code> <p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043a\u043b\u0438\u043a\u043e\u0432.</p> <code>skills</code> <code>list[str]</code> <p>\u0422\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438.</p>"},{"location":"api/models/#kwork_api.models.ProjectsResponse","title":"ProjectsResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041e\u0442\u0432\u0435\u0442 API \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.</p> <p>Attributes:</p> Name Type Description <code>projects</code> <code>list[Project]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.</p> <code>pagination</code> <code>Optional[PaginationInfo]</code> <p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.</p>"},{"location":"api/models/#kwork_api.models.Review","title":"Review","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041e\u0442\u0437\u044b\u0432 \u043e \u043a\u0432\u043e\u0440\u043a\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0435.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u043e\u0442\u0437\u044b\u0432\u0430.</p> <code>rating</code> <code>int</code> <p>\u041e\u0446\u0435\u043d\u043a\u0430 \u043e\u0442 1 \u0434\u043e 5.</p> <code>comment</code> <code>Optional[str]</code> <p>\u0422\u0435\u043a\u0441\u0442 \u043e\u0442\u0437\u044b\u0432\u0430.</p> <code>author</code> <code>Optional[KworkUser]</code> <p>\u0410\u0432\u0442\u043e\u0440 \u043e\u0442\u0437\u044b\u0432\u0430.</p> <code>kwork_id</code> <code>Optional[int]</code> <p>ID \u043a\u0432\u043e\u0440\u043a\u0430 (\u0435\u0441\u043b\u0438 \u043e\u0442\u0437\u044b\u0432 \u043e \u043a\u0432\u043e\u0440\u043a\u0435).</p> <code>created_at</code> <code>Optional[datetime]</code> <p>\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.</p>"},{"location":"api/models/#kwork_api.models.ReviewsResponse","title":"ReviewsResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041e\u0442\u0432\u0435\u0442 API \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0442\u0437\u044b\u0432\u043e\u0432.</p> <p>Attributes:</p> Name Type Description <code>reviews</code> <code>list[Review]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0442\u0437\u044b\u0432\u043e\u0432.</p> <code>pagination</code> <code>Optional[PaginationInfo]</code> <p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.</p> <code>average_rating</code> <code>Optional[float]</code> <p>\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u0439\u0442\u0438\u043d\u0433.</p>"},{"location":"api/models/#kwork_api.models.TimeZone","title":"TimeZone","text":"<p> Bases: <code>BaseModel</code></p> <p>\u0427\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441.</p> <p>Attributes:</p> Name Type Description <code>id</code> <code>int</code> <p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID.</p> <code>name</code> <code>str</code> <p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u044f\u0441\u0430.</p> <code>offset</code> <code>str</code> <p>\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 UTC (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \"+03:00\").</p>"},{"location":"api/models/#kwork_api.models.ValidationIssue","title":"ValidationIssue","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430.</p> <p>Attributes:</p> Name Type Description <code>type</code> <code>str</code> <p>\u0422\u0438\u043f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \"error\", \"warning\", \"suggestion\".</p> <code>code</code> <code>str</code> <p>\u041a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \"SPELLING\", \"GRAMMAR\", \"LENGTH\").</p> <code>message</code> <code>str</code> <p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.</p> <code>position</code> <code>Optional[int]</code> <p>\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 (\u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e).</p> <code>suggestion</code> <code>Optional[str]</code> <p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c).</p>"},{"location":"api/models/#kwork_api.models.ValidationResponse","title":"ValidationResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>\u041e\u0442\u0432\u0435\u0442 API \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430.</p> <p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 /api/validation/checktext.</p> <p>Attributes:</p> Name Type Description <code>success</code> <code>bool</code> <p>\u0423\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.</p> <code>is_valid</code> <code>bool</code> <p>\u0422\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e (\u043d\u0435\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a).</p> <code>issues</code> <code>list[ValidationIssue]</code> <p>\u0421\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.</p> <code>score</code> <code>Optional[int]</code> <p>\u041e\u0446\u0435\u043d\u043a\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 (0-100, \u0435\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430).</p> <code>message</code> <code>Optional[str]</code> <p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.</p>"}]}