kwork-api/site/api/client/index.html
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

7193 lines
284 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Unofficial Python client for Kwork.ru API">
<link rel="canonical" href="https://github.com/claw/kwork-api/api/client/">
<link rel="prev" href="../../api-reference/">
<link rel="next" href="../models/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
<title>Client - Kwork API</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.484c7ddc.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#client-api" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Kwork API" class="md-header__button md-logo" aria-label="Kwork API" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Kwork API
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Client
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6m0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4M7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/claw/kwork-api" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
claw/kwork-api
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../.." class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../../api-reference/" class="md-tabs__link">
API Reference
</a>
</li>
<li class="md-tabs__item">
<a href="../../examples.md" class="md-tabs__link">
Examples
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Kwork API" class="md-nav__button md-logo" aria-label="Kwork API" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
Kwork API
</label>
<div class="md-nav__source">
<a href="https://github.com/claw/kwork-api" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
claw/kwork-api
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-ellipsis">
API Reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
API Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../api-reference/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Client
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Client
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient" class="md-nav__link">
<span class="md-ellipsis">
KworkClient
</span>
</a>
<nav class="md-nav" aria-label="KworkClient">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient--_1" class="md-nav__link">
<span class="md-ellipsis">
Вход по логину/паролю
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient--_2" class="md-nav__link">
<span class="md-ellipsis">
Восстановление сессии по токену
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient--_3" class="md-nav__link">
<span class="md-ellipsis">
Работа с проектами
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient--_1" class="md-nav__link">
<span class="md-ellipsis">
Новый клиент без аутентификации
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient--_2" class="md-nav__link">
<span class="md-ellipsis">
Восстановление сессии
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient--_3" class="md-nav__link">
<span class="md-ellipsis">
Клиент с кастомным таймаутом
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient-attributes" class="md-nav__link">
<span class="md-ellipsis">
Attributes
</span>
</a>
<nav class="md-nav" aria-label="Attributes">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.catalog" class="md-nav__link">
<span class="md-ellipsis">
catalog
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.cookies" class="md-nav__link">
<span class="md-ellipsis">
cookies
</span>
</a>
<nav class="md-nav" aria-label="cookies">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.cookies--_1" class="md-nav__link">
<span class="md-ellipsis">
Сохранение полной сессии
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.cookies--_2" class="md-nav__link">
<span class="md-ellipsis">
Восстановление
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.credentials" class="md-nav__link">
<span class="md-ellipsis">
credentials
</span>
</a>
<nav class="md-nav" aria-label="credentials">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.credentials--_1" class="md-nav__link">
<span class="md-ellipsis">
Сохранение
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.credentials--_2" class="md-nav__link">
<span class="md-ellipsis">
Восстановление
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.notifications" class="md-nav__link">
<span class="md-ellipsis">
notifications
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.other" class="md-nav__link">
<span class="md-ellipsis">
other
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.projects" class="md-nav__link">
<span class="md-ellipsis">
projects
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.reference" class="md-nav__link">
<span class="md-ellipsis">
reference
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.token" class="md-nav__link">
<span class="md-ellipsis">
token
</span>
</a>
<nav class="md-nav" aria-label="token">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.token--_1" class="md-nav__link">
<span class="md-ellipsis">
Сохранение токена для последующего использования
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.token--_2" class="md-nav__link">
<span class="md-ellipsis">
Позже: восстановление сессии
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.user" class="md-nav__link">
<span class="md-ellipsis">
user
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient-classes" class="md-nav__link">
<span class="md-ellipsis">
Classes
</span>
</a>
<nav class="md-nav" aria-label="Classes">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI" class="md-nav__link">
<span class="md-ellipsis">
CatalogAPI
</span>
</a>
<nav class="md-nav" aria-label="CatalogAPI">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI--_1" class="md-nav__link">
<span class="md-ellipsis">
Получить первую страницу каталога
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI--_2" class="md-nav__link">
<span class="md-ellipsis">
Фильтрация по категории
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI--_3" class="md-nav__link">
<span class="md-ellipsis">
Детали конкретного кворка
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI.get_details" class="md-nav__link">
<span class="md-ellipsis">
get_details
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI.get_details_extra" class="md-nav__link">
<span class="md-ellipsis">
get_details_extra
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI.get_list" class="md-nav__link">
<span class="md-ellipsis">
get_list
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI.get_list--_1" class="md-nav__link">
<span class="md-ellipsis">
Первая страница, сортировка по цене
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.CatalogAPI.get_list--_2" class="md-nav__link">
<span class="md-ellipsis">
Пагинация
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.NotificationsAPI" class="md-nav__link">
<span class="md-ellipsis">
NotificationsAPI
</span>
</a>
<nav class="md-nav" aria-label="NotificationsAPI">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.NotificationsAPI--_1" class="md-nav__link">
<span class="md-ellipsis">
Все уведомления
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.NotificationsAPI--_2" class="md-nav__link">
<span class="md-ellipsis">
Новые уведомления
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.NotificationsAPI--_3" class="md-nav__link">
<span class="md-ellipsis">
Диалоги
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.NotificationsAPI-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.NotificationsAPI.fetch" class="md-nav__link">
<span class="md-ellipsis">
fetch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.NotificationsAPI.get_blocked_dialogs" class="md-nav__link">
<span class="md-ellipsis">
get_blocked_dialogs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.NotificationsAPI.get_dialogs" class="md-nav__link">
<span class="md-ellipsis">
get_dialogs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.NotificationsAPI.get_list" class="md-nav__link">
<span class="md-ellipsis">
get_list
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI" class="md-nav__link">
<span class="md-ellipsis">
OtherAPI
</span>
</a>
<nav class="md-nav" aria-label="OtherAPI">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI--_1" class="md-nav__link">
<span class="md-ellipsis">
Пользовательские предпочтения
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI--_2" class="md-nav__link">
<span class="md-ellipsis">
Статус кворков
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI--_3" class="md-nav__link">
<span class="md-ellipsis">
Установить статус оффлайн
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_actor" class="md-nav__link">
<span class="md-ellipsis">
get_actor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_channel" class="md-nav__link">
<span class="md-ellipsis">
get_channel
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_exchange_info" class="md-nav__link">
<span class="md-ellipsis">
get_exchange_info
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_favorite_categories" class="md-nav__link">
<span class="md-ellipsis">
get_favorite_categories
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_in_app_notification" class="md-nav__link">
<span class="md-ellipsis">
get_in_app_notification
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_kworks_status" class="md-nav__link">
<span class="md-ellipsis">
get_kworks_status
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_offers" class="md-nav__link">
<span class="md-ellipsis">
get_offers
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_security_user_data" class="md-nav__link">
<span class="md-ellipsis">
get_security_user_data
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_viewed_kworks" class="md-nav__link">
<span class="md-ellipsis">
get_viewed_kworks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_wants" class="md-nav__link">
<span class="md-ellipsis">
get_wants
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.get_wants_status" class="md-nav__link">
<span class="md-ellipsis">
get_wants_status
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.go_offline" class="md-nav__link">
<span class="md-ellipsis">
go_offline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.is_dialog_allow" class="md-nav__link">
<span class="md-ellipsis">
is_dialog_allow
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.update_settings" class="md-nav__link">
<span class="md-ellipsis">
update_settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.OtherAPI.validate_text" class="md-nav__link">
<span class="md-ellipsis">
validate_text
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI" class="md-nav__link">
<span class="md-ellipsis">
ProjectsAPI
</span>
</a>
<nav class="md-nav" aria-label="ProjectsAPI">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI--_1" class="md-nav__link">
<span class="md-ellipsis">
Новые проекты
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI--_2" class="md-nav__link">
<span class="md-ellipsis">
Мои заказы как заказчика
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI--_3" class="md-nav__link">
<span class="md-ellipsis">
Мои заказы как исполнителя
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI.get_list" class="md-nav__link">
<span class="md-ellipsis">
get_list
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI.get_list--_1" class="md-nav__link">
<span class="md-ellipsis">
Все новые проекты
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI.get_list--_2" class="md-nav__link">
<span class="md-ellipsis">
Только категория "Разработка"
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI.get_payer_orders" class="md-nav__link">
<span class="md-ellipsis">
get_payer_orders
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ProjectsAPI.get_worker_orders" class="md-nav__link">
<span class="md-ellipsis">
get_worker_orders
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI" class="md-nav__link">
<span class="md-ellipsis">
ReferenceAPI
</span>
</a>
<nav class="md-nav" aria-label="ReferenceAPI">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI--_1" class="md-nav__link">
<span class="md-ellipsis">
Все страны
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI--_2" class="md-nav__link">
<span class="md-ellipsis">
Все города
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI--_3" class="md-nav__link">
<span class="md-ellipsis">
Доступные фичи
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_badges_info" class="md-nav__link">
<span class="md-ellipsis">
get_badges_info
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_cities" class="md-nav__link">
<span class="md-ellipsis">
get_cities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_countries" class="md-nav__link">
<span class="md-ellipsis">
get_countries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_features" class="md-nav__link">
<span class="md-ellipsis">
get_features
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_public_features" class="md-nav__link">
<span class="md-ellipsis">
get_public_features
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_timezones" class="md-nav__link">
<span class="md-ellipsis">
get_timezones
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI" class="md-nav__link">
<span class="md-ellipsis">
UserAPI
</span>
</a>
<nav class="md-nav" aria-label="UserAPI">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI--_1" class="md-nav__link">
<span class="md-ellipsis">
Информация о пользователе
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI--_2" class="md-nav__link">
<span class="md-ellipsis">
Мои отзывы
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI--_3" class="md-nav__link">
<span class="md-ellipsis">
Избранные кворки
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI.get_favorite_kworks" class="md-nav__link">
<span class="md-ellipsis">
get_favorite_kworks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI.get_info" class="md-nav__link">
<span class="md-ellipsis">
get_info
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI.get_reviews" class="md-nav__link">
<span class="md-ellipsis">
get_reviews
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI.get_reviews--_1" class="md-nav__link">
<span class="md-ellipsis">
Мои отзывы
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI.get_reviews--_2" class="md-nav__link">
<span class="md-ellipsis">
Отзывы другого пользователя
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.UserAPI.get_reviews--_3" class="md-nav__link">
<span class="md-ellipsis">
С пагинацией
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient-functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.close" class="md-nav__link">
<span class="md-ellipsis">
close
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.login" class="md-nav__link">
<span class="md-ellipsis">
login
</span>
</a>
<nav class="md-nav" aria-label="login">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.login--_1" class="md-nav__link">
<span class="md-ellipsis">
Базовое использование
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.login--_2" class="md-nav__link">
<span class="md-ellipsis">
С кастомным таймаутом
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.login--_3" class="md-nav__link">
<span class="md-ellipsis">
Сохранение токена для повторного использования
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#kwork_api.client.KworkClient.login--client-kworkclienttokentoken" class="md-nav__link">
<span class="md-ellipsis">
Позже: client = KworkClient(token=token)
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../models/" class="md-nav__link">
<span class="md-ellipsis">
Models
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../errors/" class="md-nav__link">
<span class="md-ellipsis">
Errors
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../examples.md" class="md-nav__link">
<span class="md-ellipsis">
Examples
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="client-api">Client API<a class="headerlink" href="#client-api" title="Permanent link">&para;</a></h1>
<div class="doc doc-object doc-class">
<h2 id="kwork_api.client.KworkClient" class="doc doc-heading">
<span class="doc doc-object-name doc-class-name">kwork_api.client.KworkClient</span>
<a href="#kwork_api.client.KworkClient" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">KworkClient</span><span class="p">(</span>
<span class="n">token</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">cookies</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">30.0</span><span class="p">,</span> <span class="n">base_url</span><span class="o">=</span><span class="kc">None</span>
<span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents first">
<p>Асинхронный клиент для Kwork.ru API.</p>
<p>Предоставляет доступ ко всем основным эндпоинтам Kwork API:
- Каталог кворков и поиск
- Биржа проектов (фриланс заказы)
- Пользовательские данные и отзывы
- Уведомления и сообщения
- Справочные данные (города, страны, категории)</p>
<details class="аутентификация" open>
<summary>Аутентификация</summary>
<p>Клиент использует двухэтапную аутентификацию Kwork:
1. POST /signIn — получение session cookies
2. POST /getWebAuthToken — получение web_auth_token</p>
</details>
<details class="примеры-использования" open>
<summary>Примеры использования</summary>
<h3 id="kwork_api.client.KworkClient--_1">Вход по логину/паролю<a class="headerlink" href="#kwork_api.client.KworkClient--_1" title="Permanent link">&para;</a></h3>
<p>async with await KworkClient.login("username", "password") as client:
catalog = await client.catalog.get_list(page=1)</p>
<h3 id="kwork_api.client.KworkClient--_2">Восстановление сессии по токену<a class="headerlink" href="#kwork_api.client.KworkClient--_2" title="Permanent link">&para;</a></h3>
<p>client = KworkClient(token="saved_web_auth_token")
user_info = await client.user.get_info()</p>
<h3 id="kwork_api.client.KworkClient--_3">Работа с проектами<a class="headerlink" href="#kwork_api.client.KworkClient--_3" title="Permanent link">&para;</a></h3>
<p>projects = await client.projects.get_list(page=1)
my_orders = await client.projects.get_payer_orders()</p>
</details>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><a class="autorefs autorefs-internal" title="catalog
property
(kwork_api.client.KworkClient.catalog)" href="#kwork_api.client.KworkClient.catalog">catalog</a></code></td>
<td>
<code><a class="autorefs autorefs-internal" title="CatalogAPI (kwork_api.client.KworkClient.CatalogAPI)" href="#kwork_api.client.KworkClient.CatalogAPI">CatalogAPI</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Доступ к каталогу кворков</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><a class="autorefs autorefs-internal" title="projects
property
(kwork_api.client.KworkClient.projects)" href="#kwork_api.client.KworkClient.projects">projects</a></code></td>
<td>
<code><a class="autorefs autorefs-internal" title="ProjectsAPI (kwork_api.client.KworkClient.ProjectsAPI)" href="#kwork_api.client.KworkClient.ProjectsAPI">ProjectsAPI</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Доступ к бирже проектов</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><a class="autorefs autorefs-internal" title="user
property
(kwork_api.client.KworkClient.user)" href="#kwork_api.client.KworkClient.user">user</a></code></td>
<td>
<code><a class="autorefs autorefs-internal" title="UserAPI (kwork_api.client.KworkClient.UserAPI)" href="#kwork_api.client.KworkClient.UserAPI">UserAPI</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Пользовательские эндпоинты</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><a class="autorefs autorefs-internal" title="reference
property
(kwork_api.client.KworkClient.reference)" href="#kwork_api.client.KworkClient.reference">reference</a></code></td>
<td>
<code><a class="autorefs autorefs-internal" title="ReferenceAPI (kwork_api.client.KworkClient.ReferenceAPI)" href="#kwork_api.client.KworkClient.ReferenceAPI">ReferenceAPI</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Справочные данные</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><a class="autorefs autorefs-internal" title="notifications
property
(kwork_api.client.KworkClient.notifications)" href="#kwork_api.client.KworkClient.notifications">notifications</a></code></td>
<td>
<code><a class="autorefs autorefs-internal" title="NotificationsAPI (kwork_api.client.KworkClient.NotificationsAPI)" href="#kwork_api.client.KworkClient.NotificationsAPI">NotificationsAPI</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Уведомления и сообщения</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><a class="autorefs autorefs-internal" title="other
property
(kwork_api.client.KworkClient.other)" href="#kwork_api.client.KworkClient.other">other</a></code></td>
<td>
<code><a class="autorefs autorefs-internal" title="OtherAPI (kwork_api.client.KworkClient.OtherAPI)" href="#kwork_api.client.KworkClient.OtherAPI">OtherAPI</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Прочие эндпоинты</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="note" open>
<summary>Note</summary>
<p>Клиент поддерживает context manager для автоматического закрытия соединения.
Рекомендуется использовать <code>async with</code> для корректного освобождения ресурсов.</p>
</details>
<p>Инициализация клиента.</p>
<p>Создаёт неаутентифицированный клиент или восстанавливает сессию
по ранее полученному токену.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>token</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Web auth token, полученный через <code>getWebAuthToken</code> или <code>login()</code>.
Если указан, автоматически добавляется в cookies.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>cookies</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="dict">dict</span>[<span title="str">str</span>, <span title="str">str</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Session cookies из предыдущей аутентификации.
Обычно не требуется — устанавливаются автоматически из token.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>timeout</code>
</td>
<td>
<code><span title="float">float</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Таймаут HTTP запросов в секундах. По умолчанию 30 секунд.</p>
</div>
</td>
<td>
<code>30.0</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>base_url</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Кастомный базовый URL. Используется только для тестирования.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<h3 id="kwork_api.client.KworkClient--_1">Новый клиент без аутентификации<a class="headerlink" href="#kwork_api.client.KworkClient--_1" title="Permanent link">&para;</a></h3>
<p>client = KworkClient()</p>
<h3 id="kwork_api.client.KworkClient--_2">Восстановление сессии<a class="headerlink" href="#kwork_api.client.KworkClient--_2" title="Permanent link">&para;</a></h3>
<p>client = KworkClient(token="eyJ0eXAiOiJKV1QiLCJhbGc...")</p>
<h3 id="kwork_api.client.KworkClient--_3">Клиент с кастомным таймаутом<a class="headerlink" href="#kwork_api.client.KworkClient--_3" title="Permanent link">&para;</a></h3>
<p>client = KworkClient(timeout=60.0)</p>
</details>
<details class="note" open>
<summary>Note</summary>
<p>Для полноценной работы API требуется аутентификация.
Используйте <code>login()</code> или передайте сохранённый token.</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">token</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">cookies</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">timeout</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">30.0</span><span class="p">,</span>
<span class="n">base_url</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Инициализация клиента.</span>
<span class="sd"> Создаёт неаутентифицированный клиент или восстанавливает сессию</span>
<span class="sd"> по ранее полученному токену.</span>
<span class="sd"> Args:</span>
<span class="sd"> token: Web auth token, полученный через `getWebAuthToken` или `login()`.</span>
<span class="sd"> Если указан, автоматически добавляется в cookies.</span>
<span class="sd"> cookies: Session cookies из предыдущей аутентификации.</span>
<span class="sd"> Обычно не требуется — устанавливаются автоматически из token.</span>
<span class="sd"> timeout: Таймаут HTTP запросов в секундах. По умолчанию 30 секунд.</span>
<span class="sd"> base_url: Кастомный базовый URL. Используется только для тестирования.</span>
<span class="sd"> Example:</span>
<span class="sd"> # Новый клиент без аутентификации</span>
<span class="sd"> client = KworkClient()</span>
<span class="sd"> # Восстановление сессии</span>
<span class="sd"> client = KworkClient(token=&quot;eyJ0eXAiOiJKV1QiLCJhbGc...&quot;)</span>
<span class="sd"> # Клиент с кастомным таймаутом</span>
<span class="sd"> client = KworkClient(timeout=60.0)</span>
<span class="sd"> Note:</span>
<span class="sd"> Для полноценной работы API требуется аутентификация.</span>
<span class="sd"> Используйте `login()` или передайте сохранённый token.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">base_url</span> <span class="o">=</span> <span class="n">base_url</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">BASE_URL</span>
<span class="bp">self</span><span class="o">.</span><span class="n">timeout</span> <span class="o">=</span> <span class="n">timeout</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_token</span> <span class="o">=</span> <span class="n">token</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cookies</span> <span class="o">=</span> <span class="n">cookies</span> <span class="ow">or</span> <span class="p">{}</span>
<span class="c1"># Initialize HTTP client</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">httpx</span><span class="o">.</span><span class="n">AsyncClient</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h3 id="kwork_api.client.KworkClient-attributes">Attributes<a href="#kwork_api.client.KworkClient-attributes" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-object doc-attribute">
<h4 id="kwork_api.client.KworkClient.catalog" class="doc doc-heading">
<span class="doc doc-object-name doc-attribute-name">catalog</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
<a href="#kwork_api.client.KworkClient.catalog" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="n">catalog</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>API каталога кворков.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h4 id="kwork_api.client.KworkClient.cookies" class="doc doc-heading">
<span class="doc doc-object-name doc-attribute-name">cookies</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
<a href="#kwork_api.client.KworkClient.cookies" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="n">cookies</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Session cookies.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Словарь cookies включая web_auth_token.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.cookies--_1">Сохранение полной сессии<a class="headerlink" href="#kwork_api.client.KworkClient.cookies--_1" title="Permanent link">&para;</a></h5>
<p>client = await KworkClient.login("user", "pass")
creds = client.credentials</p>
<h5 id="kwork_api.client.KworkClient.cookies--_2">Восстановление<a class="headerlink" href="#kwork_api.client.KworkClient.cookies--_2" title="Permanent link">&para;</a></h5>
<p>client = KworkClient(**creds)</p>
</details>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h4 id="kwork_api.client.KworkClient.credentials" class="doc doc-heading">
<span class="doc doc-object-name doc-attribute-name">credentials</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
<a href="#kwork_api.client.KworkClient.credentials" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="n">credentials</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Учётные данные для восстановления сессии.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Optional">Optional</span>[<span title="str">str</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Словарь с token и cookies для передачи в KworkClient().</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.credentials--_1">Сохранение<a class="headerlink" href="#kwork_api.client.KworkClient.credentials--_1" title="Permanent link">&para;</a></h5>
<p>client = await KworkClient.login("user", "pass")
import json
with open("session.json", "w") as f:
json.dump(client.credentials, f)</p>
<h5 id="kwork_api.client.KworkClient.credentials--_2">Восстановление<a class="headerlink" href="#kwork_api.client.KworkClient.credentials--_2" title="Permanent link">&para;</a></h5>
<p>with open("session.json") as f:
creds = json.load(f)
client = KworkClient(**creds)</p>
</details>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h4 id="kwork_api.client.KworkClient.notifications" class="doc doc-heading">
<span class="doc doc-object-name doc-attribute-name">notifications</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
<a href="#kwork_api.client.KworkClient.notifications" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="n">notifications</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>API уведомлений.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h4 id="kwork_api.client.KworkClient.other" class="doc doc-heading">
<span class="doc doc-object-name doc-attribute-name">other</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
<a href="#kwork_api.client.KworkClient.other" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="n">other</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Прочее API.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h4 id="kwork_api.client.KworkClient.projects" class="doc doc-heading">
<span class="doc doc-object-name doc-attribute-name">projects</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
<a href="#kwork_api.client.KworkClient.projects" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="n">projects</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>API биржи проектов.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h4 id="kwork_api.client.KworkClient.reference" class="doc doc-heading">
<span class="doc doc-object-name doc-attribute-name">reference</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
<a href="#kwork_api.client.KworkClient.reference" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="n">reference</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Справочное API.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h4 id="kwork_api.client.KworkClient.token" class="doc doc-heading">
<span class="doc doc-object-name doc-attribute-name">token</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
<a href="#kwork_api.client.KworkClient.token" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="n">token</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Web auth token для аутентификации.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Токен или None если клиент не аутентифицирован.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.token--_1">Сохранение токена для последующего использования<a class="headerlink" href="#kwork_api.client.KworkClient.token--_1" title="Permanent link">&para;</a></h5>
<p>client = await KworkClient.login("user", "pass")
token = client.token</p>
<h5 id="kwork_api.client.KworkClient.token--_2">Позже: восстановление сессии<a class="headerlink" href="#kwork_api.client.KworkClient.token--_2" title="Permanent link">&para;</a></h5>
<p>client = KworkClient(token=token)</p>
</details>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h4 id="kwork_api.client.KworkClient.user" class="doc doc-heading">
<span class="doc doc-object-name doc-attribute-name">user</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-property"><code>property</code></small>
</span>
<a href="#kwork_api.client.KworkClient.user" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="n">user</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Пользовательское API.</p>
</div>
</div>
<h3 id="kwork_api.client.KworkClient-classes">Classes<a href="#kwork_api.client.KworkClient-classes" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-object doc-class">
<h4 id="kwork_api.client.KworkClient.CatalogAPI" class="doc doc-heading">
<span class="doc doc-object-name doc-class-name">CatalogAPI</span>
<a href="#kwork_api.client.KworkClient.CatalogAPI" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">CatalogAPI</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>API каталога кворков.</p>
<p>Предоставляет доступ к каталогу услуг Kwork:
- Поиск и фильтрация кворков
- Получение детальной информации
- Категории и сортировка</p>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.CatalogAPI--_1">Получить первую страницу каталога<a class="headerlink" href="#kwork_api.client.KworkClient.CatalogAPI--_1" title="Permanent link">&para;</a></h5>
<p>catalog = await client.catalog.get_list(page=1)</p>
<h5 id="kwork_api.client.KworkClient.CatalogAPI--_2">Фильтрация по категории<a class="headerlink" href="#kwork_api.client.KworkClient.CatalogAPI--_2" title="Permanent link">&para;</a></h5>
<p>catalog = await client.catalog.get_list(category_id=5)</p>
<h5 id="kwork_api.client.KworkClient.CatalogAPI--_3">Детали конкретного кворка<a class="headerlink" href="#kwork_api.client.KworkClient.CatalogAPI--_3" title="Permanent link">&para;</a></h5>
<p>details = await client.catalog.get_details(kwork_id=12345)</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">419</span>
<span class="normal">420</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">:</span> <span class="s2">&quot;KworkClient&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="kwork_api.client.KworkClient.CatalogAPI-functions">Functions<a href="#kwork_api.client.KworkClient.CatalogAPI-functions" class="headerlink" title="Permanent link">&para;</a></h5>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.CatalogAPI.get_details" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_details</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.CatalogAPI.get_details" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_details</span><span class="p">(</span><span class="n">kwork_id</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить полную информацию о кворке.</p>
<p>Возвращает расширенную информацию о кворке включая:
- Полное описание и требования
- Сроки выполнения и количество правок
- Дополнительные опции (features)
- FAQ от продавца</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>kwork_id</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Уникальный идентификатор кворка.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="KworkDetails (kwork_api.models.KworkDetails)" href="../models/#kwork_api.models.KworkDetails">KworkDetails</a></code>
</td>
<td>
<div class="doc-md-description">
<p>KworkDetails с полной информацией о кворке.</p>
</div>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="KworkNotFoundError (kwork_api.errors.KworkNotFoundError)" href="../errors/#kwork_api.errors.KworkNotFoundError">KworkNotFoundError</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Если кворк с таким ID не найден.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>details = await client.catalog.get_details(12345)
print(f"Название: {details.title}")
print(f"Цена: {details.price} {details.currency}")
print(f"Срок: {details.delivery_time} дней")
print(f"Правки: {details.revisions}")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">478</span>
<span class="normal">479</span>
<span class="normal">480</span>
<span class="normal">481</span>
<span class="normal">482</span>
<span class="normal">483</span>
<span class="normal">484</span>
<span class="normal">485</span>
<span class="normal">486</span>
<span class="normal">487</span>
<span class="normal">488</span>
<span class="normal">489</span>
<span class="normal">490</span>
<span class="normal">491</span>
<span class="normal">492</span>
<span class="normal">493</span>
<span class="normal">494</span>
<span class="normal">495</span>
<span class="normal">496</span>
<span class="normal">497</span>
<span class="normal">498</span>
<span class="normal">499</span>
<span class="normal">500</span>
<span class="normal">501</span>
<span class="normal">502</span>
<span class="normal">503</span>
<span class="normal">504</span>
<span class="normal">505</span>
<span class="normal">506</span>
<span class="normal">507</span>
<span class="normal">508</span>
<span class="normal">509</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwork_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">KworkDetails</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить полную информацию о кворке.</span>
<span class="sd"> Возвращает расширенную информацию о кворке включая:</span>
<span class="sd"> - Полное описание и требования</span>
<span class="sd"> - Сроки выполнения и количество правок</span>
<span class="sd"> - Дополнительные опции (features)</span>
<span class="sd"> - FAQ от продавца</span>
<span class="sd"> Args:</span>
<span class="sd"> kwork_id: Уникальный идентификатор кворка.</span>
<span class="sd"> Returns:</span>
<span class="sd"> KworkDetails с полной информацией о кворке.</span>
<span class="sd"> Raises:</span>
<span class="sd"> KworkNotFoundError: Если кворк с таким ID не найден.</span>
<span class="sd"> Example:</span>
<span class="sd"> details = await client.catalog.get_details(12345)</span>
<span class="sd"> print(f&quot;Название: {details.title}&quot;)</span>
<span class="sd"> print(f&quot;Цена: {details.price} {details.currency}&quot;)</span>
<span class="sd"> print(f&quot;Срок: {details.delivery_time} дней&quot;)</span>
<span class="sd"> print(f&quot;Правки: {details.revisions}&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span>
<span class="s2">&quot;POST&quot;</span><span class="p">,</span>
<span class="s2">&quot;/getKworkDetails&quot;</span><span class="p">,</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;kwork_id&quot;</span><span class="p">:</span> <span class="n">kwork_id</span><span class="p">},</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">KworkDetails</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.CatalogAPI.get_details_extra" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_details_extra</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.CatalogAPI.get_details_extra" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_details_extra</span><span class="p">(</span><span class="n">kwork_id</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить дополнительные детали кворка.</p>
<p>Возвращает расширенную информацию, которая не включена
в основной ответ get_details(). Может содержать:
- Дополнительные изображения
- Видео обзоры
- Детали пакетов услуг
- Статистику продаж</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>kwork_id</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Уникальный идентификатор кворка.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Словарь с дополнительными данными. Структура зависит</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>от конкретного кворка и не гарантируется стабильной.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="note" open>
<summary>Note</summary>
<p>Этот эндпоинт возвращает "сырые" данные без валидации.
Структура ответа может измениться без предупреждения.</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">511</span>
<span class="normal">512</span>
<span class="normal">513</span>
<span class="normal">514</span>
<span class="normal">515</span>
<span class="normal">516</span>
<span class="normal">517</span>
<span class="normal">518</span>
<span class="normal">519</span>
<span class="normal">520</span>
<span class="normal">521</span>
<span class="normal">522</span>
<span class="normal">523</span>
<span class="normal">524</span>
<span class="normal">525</span>
<span class="normal">526</span>
<span class="normal">527</span>
<span class="normal">528</span>
<span class="normal">529</span>
<span class="normal">530</span>
<span class="normal">531</span>
<span class="normal">532</span>
<span class="normal">533</span>
<span class="normal">534</span>
<span class="normal">535</span>
<span class="normal">536</span>
<span class="normal">537</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_details_extra</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwork_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить дополнительные детали кворка.</span>
<span class="sd"> Возвращает расширенную информацию, которая не включена</span>
<span class="sd"> в основной ответ get_details(). Может содержать:</span>
<span class="sd"> - Дополнительные изображения</span>
<span class="sd"> - Видео обзоры</span>
<span class="sd"> - Детали пакетов услуг</span>
<span class="sd"> - Статистику продаж</span>
<span class="sd"> Args:</span>
<span class="sd"> kwork_id: Уникальный идентификатор кворка.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Словарь с дополнительными данными. Структура зависит</span>
<span class="sd"> от конкретного кворка и не гарантируется стабильной.</span>
<span class="sd"> Note:</span>
<span class="sd"> Этот эндпоинт возвращает &quot;сырые&quot; данные без валидации.</span>
<span class="sd"> Структура ответа может измениться без предупреждения.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span>
<span class="s2">&quot;POST&quot;</span><span class="p">,</span>
<span class="s2">&quot;/getKworkDetailsExtra&quot;</span><span class="p">,</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;kwork_id&quot;</span><span class="p">:</span> <span class="n">kwork_id</span><span class="p">},</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.CatalogAPI.get_list" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_list</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.CatalogAPI.get_list" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_list</span><span class="p">(</span><span class="n">page</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">category_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="s1">&#39;recommend&#39;</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить список кворков из каталога.</p>
<p>Основной эндпоинт для поиска и просмотра кворков.
Возвращает пагинированный список с возможностью фильтрации.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>page</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Номер страницы для пагинации (начиная с 1).</p>
</div>
</td>
<td>
<code>1</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>category_id</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="int">int</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>ID категории для фильтрации.
Если None — все категории.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>sort</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Опция сортировки. Варианты:
- "recommend" — по рекомендации (по умолчанию)
- "price_asc" — по возрастанию цены
- "price_desc" — по убыванию цены
- "rating" — по рейтингу
- "reviews" — по количеству отзывов
- "newest" — по дате создания</p>
</div>
</td>
<td>
<code>&#39;recommend&#39;</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="CatalogResponse (kwork_api.models.CatalogResponse)" href="../models/#kwork_api.models.CatalogResponse">CatalogResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<p>CatalogResponse содержащий:</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="CatalogResponse (kwork_api.models.CatalogResponse)" href="../models/#kwork_api.models.CatalogResponse">CatalogResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>kworks: список кворков на странице</li>
</ul>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="CatalogResponse (kwork_api.models.CatalogResponse)" href="../models/#kwork_api.models.CatalogResponse">CatalogResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>pagination: информация о пагинации</li>
</ul>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="CatalogResponse (kwork_api.models.CatalogResponse)" href="../models/#kwork_api.models.CatalogResponse">CatalogResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>filters: доступные фильтры</li>
</ul>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="CatalogResponse (kwork_api.models.CatalogResponse)" href="../models/#kwork_api.models.CatalogResponse">CatalogResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>sort_options: доступные опции сортировки</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<h6 id="kwork_api.client.KworkClient.CatalogAPI.get_list--_1">Первая страница, сортировка по цене<a class="headerlink" href="#kwork_api.client.KworkClient.CatalogAPI.get_list--_1" title="Permanent link">&para;</a></h6>
<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>
<h6 id="kwork_api.client.KworkClient.CatalogAPI.get_list--_2">Пагинация<a class="headerlink" href="#kwork_api.client.KworkClient.CatalogAPI.get_list--_2" title="Permanent link">&para;</a></h6>
<p>if response.pagination and response.pagination.has_next:
next_page = await client.catalog.get_list(page=2)</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">422</span>
<span class="normal">423</span>
<span class="normal">424</span>
<span class="normal">425</span>
<span class="normal">426</span>
<span class="normal">427</span>
<span class="normal">428</span>
<span class="normal">429</span>
<span class="normal">430</span>
<span class="normal">431</span>
<span class="normal">432</span>
<span class="normal">433</span>
<span class="normal">434</span>
<span class="normal">435</span>
<span class="normal">436</span>
<span class="normal">437</span>
<span class="normal">438</span>
<span class="normal">439</span>
<span class="normal">440</span>
<span class="normal">441</span>
<span class="normal">442</span>
<span class="normal">443</span>
<span class="normal">444</span>
<span class="normal">445</span>
<span class="normal">446</span>
<span class="normal">447</span>
<span class="normal">448</span>
<span class="normal">449</span>
<span class="normal">450</span>
<span class="normal">451</span>
<span class="normal">452</span>
<span class="normal">453</span>
<span class="normal">454</span>
<span class="normal">455</span>
<span class="normal">456</span>
<span class="normal">457</span>
<span class="normal">458</span>
<span class="normal">459</span>
<span class="normal">460</span>
<span class="normal">461</span>
<span class="normal">462</span>
<span class="normal">463</span>
<span class="normal">464</span>
<span class="normal">465</span>
<span class="normal">466</span>
<span class="normal">467</span>
<span class="normal">468</span>
<span class="normal">469</span>
<span class="normal">470</span>
<span class="normal">471</span>
<span class="normal">472</span>
<span class="normal">473</span>
<span class="normal">474</span>
<span class="normal">475</span>
<span class="normal">476</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_list</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">page</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="n">category_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">sort</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;recommend&quot;</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">CatalogResponse</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить список кворков из каталога.</span>
<span class="sd"> Основной эндпоинт для поиска и просмотра кворков.</span>
<span class="sd"> Возвращает пагинированный список с возможностью фильтрации.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: Номер страницы для пагинации (начиная с 1).</span>
<span class="sd"> category_id: ID категории для фильтрации.</span>
<span class="sd"> Если None — все категории.</span>
<span class="sd"> sort: Опция сортировки. Варианты:</span>
<span class="sd"> - &quot;recommend&quot; — по рекомендации (по умолчанию)</span>
<span class="sd"> - &quot;price_asc&quot; — по возрастанию цены</span>
<span class="sd"> - &quot;price_desc&quot; — по убыванию цены</span>
<span class="sd"> - &quot;rating&quot; — по рейтингу</span>
<span class="sd"> - &quot;reviews&quot; — по количеству отзывов</span>
<span class="sd"> - &quot;newest&quot; — по дате создания</span>
<span class="sd"> Returns:</span>
<span class="sd"> CatalogResponse содержащий:</span>
<span class="sd"> - kworks: список кворков на странице</span>
<span class="sd"> - pagination: информация о пагинации</span>
<span class="sd"> - filters: доступные фильтры</span>
<span class="sd"> - sort_options: доступные опции сортировки</span>
<span class="sd"> Example:</span>
<span class="sd"> # Первая страница, сортировка по цене</span>
<span class="sd"> response = await client.catalog.get_list(</span>
<span class="sd"> page=1,</span>
<span class="sd"> sort=&quot;price_asc&quot;</span>
<span class="sd"> )</span>
<span class="sd"> for kwork in response.kworks:</span>
<span class="sd"> print(f&quot;{kwork.title}: {kwork.price} RUB&quot;)</span>
<span class="sd"> # Пагинация</span>
<span class="sd"> if response.pagination and response.pagination.has_next:</span>
<span class="sd"> next_page = await client.catalog.get_list(page=2)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span>
<span class="s2">&quot;POST&quot;</span><span class="p">,</span>
<span class="s2">&quot;/catalogMainv2&quot;</span><span class="p">,</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;page&quot;</span><span class="p">:</span> <span class="n">page</span><span class="p">,</span>
<span class="s2">&quot;category_id&quot;</span><span class="p">:</span> <span class="n">category_id</span><span class="p">,</span>
<span class="s2">&quot;sort&quot;</span><span class="p">:</span> <span class="n">sort</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">CatalogResponse</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="kwork_api.client.KworkClient.NotificationsAPI" class="doc doc-heading">
<span class="doc doc-object-name doc-class-name">NotificationsAPI</span>
<a href="#kwork_api.client.KworkClient.NotificationsAPI" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">NotificationsAPI</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>API уведомлений и сообщений.</p>
<p>Предоставляет доступ к системе уведомлений Kwork:
- Список уведомлений
- Получение новых уведомлений
- Диалоги с пользователями
- Заблокированные диалоги</p>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.NotificationsAPI--_1">Все уведомления<a class="headerlink" href="#kwork_api.client.KworkClient.NotificationsAPI--_1" title="Permanent link">&para;</a></h5>
<p>notifications = await client.notifications.get_list()</p>
<h5 id="kwork_api.client.KworkClient.NotificationsAPI--_2">Новые уведомления<a class="headerlink" href="#kwork_api.client.KworkClient.NotificationsAPI--_2" title="Permanent link">&para;</a></h5>
<p>new = await client.notifications.fetch()</p>
<h5 id="kwork_api.client.KworkClient.NotificationsAPI--_3">Диалоги<a class="headerlink" href="#kwork_api.client.KworkClient.NotificationsAPI--_3" title="Permanent link">&para;</a></h5>
<p>dialogs = await client.notifications.get_dialogs()</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">892</span>
<span class="normal">893</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">:</span> <span class="s2">&quot;KworkClient&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="kwork_api.client.KworkClient.NotificationsAPI-functions">Functions<a href="#kwork_api.client.KworkClient.NotificationsAPI-functions" class="headerlink" title="Permanent link">&para;</a></h5>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.NotificationsAPI.fetch" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">fetch</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.NotificationsAPI.fetch" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">fetch</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить новые уведомления.</p>
<p>Отличается от get_list() тем, что возвращает только
уведомления, появившиеся с момента последнего запроса.
Также может обновлять счётчик непрочитанных.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="NotificationsResponse (kwork_api.models.NotificationsResponse)" href="../models/#kwork_api.models.NotificationsResponse">NotificationsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<p>NotificationsResponse с новыми уведомлениями.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>new_notifs = await client.notifications.fetch()
if new_notifs.unread_count &gt; 0:
print(f"У вас {new_notifs.unread_count} новых уведомлений!")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">918</span>
<span class="normal">919</span>
<span class="normal">920</span>
<span class="normal">921</span>
<span class="normal">922</span>
<span class="normal">923</span>
<span class="normal">924</span>
<span class="normal">925</span>
<span class="normal">926</span>
<span class="normal">927</span>
<span class="normal">928</span>
<span class="normal">929</span>
<span class="normal">930</span>
<span class="normal">931</span>
<span class="normal">932</span>
<span class="normal">933</span>
<span class="normal">934</span>
<span class="normal">935</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">fetch</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">NotificationsResponse</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить новые уведомления.</span>
<span class="sd"> Отличается от get_list() тем, что возвращает только</span>
<span class="sd"> уведомления, появившиеся с момента последнего запроса.</span>
<span class="sd"> Также может обновлять счётчик непрочитанных.</span>
<span class="sd"> Returns:</span>
<span class="sd"> NotificationsResponse с новыми уведомлениями.</span>
<span class="sd"> Example:</span>
<span class="sd"> new_notifs = await client.notifications.fetch()</span>
<span class="sd"> if new_notifs.unread_count &gt; 0:</span>
<span class="sd"> print(f&quot;У вас {new_notifs.unread_count} новых уведомлений!&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/notificationsFetch&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NotificationsResponse</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.NotificationsAPI.get_blocked_dialogs" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_blocked_dialogs</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.NotificationsAPI.get_blocked_dialogs" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_blocked_dialogs</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить список заблокированных диалогов.</p>
<p>Возвращает диалоги с пользователями, которые были
заблокированы текущим пользователем.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Dialog (kwork_api.models.Dialog)" href="../models/#kwork_api.models.Dialog">Dialog</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список заблокированных диалогов.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>blocked = await client.notifications.get_blocked_dialogs()
print(f"Заблокировано: {len(blocked)} пользователей")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">955</span>
<span class="normal">956</span>
<span class="normal">957</span>
<span class="normal">958</span>
<span class="normal">959</span>
<span class="normal">960</span>
<span class="normal">961</span>
<span class="normal">962</span>
<span class="normal">963</span>
<span class="normal">964</span>
<span class="normal">965</span>
<span class="normal">966</span>
<span class="normal">967</span>
<span class="normal">968</span>
<span class="normal">969</span>
<span class="normal">970</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_blocked_dialogs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Dialog</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить список заблокированных диалогов.</span>
<span class="sd"> Возвращает диалоги с пользователями, которые были</span>
<span class="sd"> заблокированы текущим пользователем.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список заблокированных диалогов.</span>
<span class="sd"> Example:</span>
<span class="sd"> blocked = await client.notifications.get_blocked_dialogs()</span>
<span class="sd"> print(f&quot;Заблокировано: {len(blocked)} пользователей&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/blockedDialogList&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Dialog</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dialogs&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.NotificationsAPI.get_dialogs" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_dialogs</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.NotificationsAPI.get_dialogs" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_dialogs</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить список диалогов (чатов).</p>
<p>Возвращает все активные диалоги пользователя с другими
пользователями Kwork.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Dialog (kwork_api.models.Dialog)" href="../models/#kwork_api.models.Dialog">Dialog</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список диалогов с последней перепиской.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>dialogs = await client.notifications.get_dialogs()
for d in dialogs:
print(f"С {d.participant.username}: {d.last_message}")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">937</span>
<span class="normal">938</span>
<span class="normal">939</span>
<span class="normal">940</span>
<span class="normal">941</span>
<span class="normal">942</span>
<span class="normal">943</span>
<span class="normal">944</span>
<span class="normal">945</span>
<span class="normal">946</span>
<span class="normal">947</span>
<span class="normal">948</span>
<span class="normal">949</span>
<span class="normal">950</span>
<span class="normal">951</span>
<span class="normal">952</span>
<span class="normal">953</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_dialogs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Dialog</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить список диалогов (чатов).</span>
<span class="sd"> Возвращает все активные диалоги пользователя с другими</span>
<span class="sd"> пользователями Kwork.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список диалогов с последней перепиской.</span>
<span class="sd"> Example:</span>
<span class="sd"> dialogs = await client.notifications.get_dialogs()</span>
<span class="sd"> for d in dialogs:</span>
<span class="sd"> print(f&quot;С {d.participant.username}: {d.last_message}&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/dialogs&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Dialog</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dialogs&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.NotificationsAPI.get_list" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_list</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.NotificationsAPI.get_list" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_list</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить список всех уведомлений.</p>
<p>Возвращает все уведомления пользователя с информацией
о прочтении.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="NotificationsResponse (kwork_api.models.NotificationsResponse)" href="../models/#kwork_api.models.NotificationsResponse">NotificationsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<p>NotificationsResponse содержащий:</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="NotificationsResponse (kwork_api.models.NotificationsResponse)" href="../models/#kwork_api.models.NotificationsResponse">NotificationsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>notifications: список уведомлений</li>
</ul>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="NotificationsResponse (kwork_api.models.NotificationsResponse)" href="../models/#kwork_api.models.NotificationsResponse">NotificationsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>unread_count: количество непрочитанных</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>notifs = await client.notifications.get_list()
print(f"Непрочитанных: {notifs.unread_count}")</p>
<p>for n in notifs.notifications:
if not n.is_read:
print(f"Новое: {n.title}")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">895</span>
<span class="normal">896</span>
<span class="normal">897</span>
<span class="normal">898</span>
<span class="normal">899</span>
<span class="normal">900</span>
<span class="normal">901</span>
<span class="normal">902</span>
<span class="normal">903</span>
<span class="normal">904</span>
<span class="normal">905</span>
<span class="normal">906</span>
<span class="normal">907</span>
<span class="normal">908</span>
<span class="normal">909</span>
<span class="normal">910</span>
<span class="normal">911</span>
<span class="normal">912</span>
<span class="normal">913</span>
<span class="normal">914</span>
<span class="normal">915</span>
<span class="normal">916</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_list</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">NotificationsResponse</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить список всех уведомлений.</span>
<span class="sd"> Возвращает все уведомления пользователя с информацией</span>
<span class="sd"> о прочтении.</span>
<span class="sd"> Returns:</span>
<span class="sd"> NotificationsResponse содержащий:</span>
<span class="sd"> - notifications: список уведомлений</span>
<span class="sd"> - unread_count: количество непрочитанных</span>
<span class="sd"> Example:</span>
<span class="sd"> notifs = await client.notifications.get_list()</span>
<span class="sd"> print(f&quot;Непрочитанных: {notifs.unread_count}&quot;)</span>
<span class="sd"> for n in notifs.notifications:</span>
<span class="sd"> if not n.is_read:</span>
<span class="sd"> print(f&quot;Новое: {n.title}&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/notifications&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NotificationsResponse</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="kwork_api.client.KworkClient.OtherAPI" class="doc doc-heading">
<span class="doc doc-object-name doc-class-name">OtherAPI</span>
<a href="#kwork_api.client.KworkClient.OtherAPI" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">OtherAPI</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Прочее API.</p>
<p>Вспомогательные эндпоинты которые не вошли в другие категории:
- Пользовательские настройки и предпочтения (wants)
- Статусы кворков и заказов
- Персональные предложения (offers)
- Настройки профиля
- Статус онлайн/оффлайн</p>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.OtherAPI--_1">Пользовательские предпочтения<a class="headerlink" href="#kwork_api.client.KworkClient.OtherAPI--_1" title="Permanent link">&para;</a></h5>
<p>wants = await client.other.get_wants()</p>
<h5 id="kwork_api.client.KworkClient.OtherAPI--_2">Статус кворков<a class="headerlink" href="#kwork_api.client.KworkClient.OtherAPI--_2" title="Permanent link">&para;</a></h5>
<p>status = await client.other.get_kworks_status()</p>
<h5 id="kwork_api.client.KworkClient.OtherAPI--_3">Установить статус оффлайн<a class="headerlink" href="#kwork_api.client.KworkClient.OtherAPI--_3" title="Permanent link">&para;</a></h5>
<p>await client.other.go_offline()</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">996</span>
<span class="normal">997</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">:</span> <span class="s2">&quot;KworkClient&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="kwork_api.client.KworkClient.OtherAPI-functions">Functions<a href="#kwork_api.client.KworkClient.OtherAPI-functions" class="headerlink" title="Permanent link">&para;</a></h5>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_actor" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_actor</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_actor" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_actor</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить информацию об актёре (текущем пользователе).</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Данные актёра/пользователя.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1173</span>
<span class="normal">1174</span>
<span class="normal">1175</span>
<span class="normal">1176</span>
<span class="normal">1177</span>
<span class="normal">1178</span>
<span class="normal">1179</span>
<span class="normal">1180</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_actor</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить информацию об актёре (текущем пользователе).</span>
<span class="sd"> Returns:</span>
<span class="sd"> Данные актёра/пользователя.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/actor&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_channel" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_channel</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_channel" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_channel</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить информацию о канале пользователя.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Данные канала (если есть).</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1060</span>
<span class="normal">1061</span>
<span class="normal">1062</span>
<span class="normal">1063</span>
<span class="normal">1064</span>
<span class="normal">1065</span>
<span class="normal">1066</span>
<span class="normal">1067</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_channel</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить информацию о канале пользователя.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Данные канала (если есть).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/getChannel&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_exchange_info" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_exchange_info</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_exchange_info" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_exchange_info</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить информацию об обмене валюты.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Информация о курсах валют и обмене.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1051</span>
<span class="normal">1052</span>
<span class="normal">1053</span>
<span class="normal">1054</span>
<span class="normal">1055</span>
<span class="normal">1056</span>
<span class="normal">1057</span>
<span class="normal">1058</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_exchange_info</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить информацию об обмене валюты.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Информация о курсах валют и обмене.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/exchangeInfo&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_favorite_categories" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_favorite_categories</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_favorite_categories" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_favorite_categories</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить ID избранных категорий.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<span title="int">int</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список ID категорий, добавленных в избранное.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>cats = await client.other.get_favorite_categories()
print(f"Избранные категории: {cats}")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1126</span>
<span class="normal">1127</span>
<span class="normal">1128</span>
<span class="normal">1129</span>
<span class="normal">1130</span>
<span class="normal">1131</span>
<span class="normal">1132</span>
<span class="normal">1133</span>
<span class="normal">1134</span>
<span class="normal">1135</span>
<span class="normal">1136</span>
<span class="normal">1137</span>
<span class="normal">1138</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_favorite_categories</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить ID избранных категорий.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список ID категорий, добавленных в избранное.</span>
<span class="sd"> Example:</span>
<span class="sd"> cats = await client.other.get_favorite_categories()</span>
<span class="sd"> print(f&quot;Избранные категории: {cats}&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/favoriteCategories&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;categories&quot;</span><span class="p">,</span> <span class="p">[])</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_in_app_notification" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_in_app_notification</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_in_app_notification" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_in_app_notification</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить внутриприложенное уведомление.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Данные in-app уведомления.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1069</span>
<span class="normal">1070</span>
<span class="normal">1071</span>
<span class="normal">1072</span>
<span class="normal">1073</span>
<span class="normal">1074</span>
<span class="normal">1075</span>
<span class="normal">1076</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_in_app_notification</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить внутриприложенное уведомление.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Данные in-app уведомления.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/getInAppNotification&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_kworks_status" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_kworks_status</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_kworks_status" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_kworks_status</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить статусы кворков пользователя.</p>
<p>Возвращает информацию о статусах всех кворков
текущего пользователя (активен, на модерации, и т.д.).</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Словарь со статусами кворков.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>status = await client.other.get_kworks_status()
print(status)</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1026</span>
<span class="normal">1027</span>
<span class="normal">1028</span>
<span class="normal">1029</span>
<span class="normal">1030</span>
<span class="normal">1031</span>
<span class="normal">1032</span>
<span class="normal">1033</span>
<span class="normal">1034</span>
<span class="normal">1035</span>
<span class="normal">1036</span>
<span class="normal">1037</span>
<span class="normal">1038</span>
<span class="normal">1039</span>
<span class="normal">1040</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_kworks_status</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить статусы кворков пользователя.</span>
<span class="sd"> Возвращает информацию о статусах всех кворков</span>
<span class="sd"> текущего пользователя (активен, на модерации, и т.д.).</span>
<span class="sd"> Returns:</span>
<span class="sd"> Словарь со статусами кворков.</span>
<span class="sd"> Example:</span>
<span class="sd"> status = await client.other.get_kworks_status()</span>
<span class="sd"> print(status)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/kworksStatusList&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_offers" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_offers</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_offers" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_offers</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить персональные предложения.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список персональных предложений от Kwork.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1042</span>
<span class="normal">1043</span>
<span class="normal">1044</span>
<span class="normal">1045</span>
<span class="normal">1046</span>
<span class="normal">1047</span>
<span class="normal">1048</span>
<span class="normal">1049</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_offers</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить персональные предложения.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список персональных предложений от Kwork.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/offers&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_security_user_data" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_security_user_data</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_security_user_data" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_security_user_data</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить данные безопасности пользователя.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Информация о безопасности аккаунта.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1078</span>
<span class="normal">1079</span>
<span class="normal">1080</span>
<span class="normal">1081</span>
<span class="normal">1082</span>
<span class="normal">1083</span>
<span class="normal">1084</span>
<span class="normal">1085</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_security_user_data</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить данные безопасности пользователя.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Информация о безопасности аккаунта.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/getSecurityUserData&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_viewed_kworks" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_viewed_kworks</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_viewed_kworks" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_viewed_kworks</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить просмотренные кворки.</p>
<p>Возвращает список кворков, которые пользователь
просматривал ранее.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Kwork (kwork_api.models.Kwork)" href="../models/#kwork_api.models.Kwork">Kwork</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список просмотренных кворков.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>viewed = await client.other.get_viewed_kworks()
print(f"Просмотрено: {len(viewed)} кворков")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1109</span>
<span class="normal">1110</span>
<span class="normal">1111</span>
<span class="normal">1112</span>
<span class="normal">1113</span>
<span class="normal">1114</span>
<span class="normal">1115</span>
<span class="normal">1116</span>
<span class="normal">1117</span>
<span class="normal">1118</span>
<span class="normal">1119</span>
<span class="normal">1120</span>
<span class="normal">1121</span>
<span class="normal">1122</span>
<span class="normal">1123</span>
<span class="normal">1124</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_viewed_kworks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Kwork</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить просмотренные кворки.</span>
<span class="sd"> Возвращает список кворков, которые пользователь</span>
<span class="sd"> просматривал ранее.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список просмотренных кворков.</span>
<span class="sd"> Example:</span>
<span class="sd"> viewed = await client.other.get_viewed_kworks()</span>
<span class="sd"> print(f&quot;Просмотрено: {len(viewed)} кворков&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/viewedCatalogKworks&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Kwork</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kworks&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_wants" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_wants</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_wants" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_wants</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить пользовательские предпочтения (wants).</p>
<p>Wants — это настройки интересов пользователя:
- Предпочитаемые категории
- Ключевые слова для мониторинга
- Фильтры для поиска</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Словарь с настройками предпочтений.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>wants = await client.other.get_wants()
print(wants)</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 999</span>
<span class="normal">1000</span>
<span class="normal">1001</span>
<span class="normal">1002</span>
<span class="normal">1003</span>
<span class="normal">1004</span>
<span class="normal">1005</span>
<span class="normal">1006</span>
<span class="normal">1007</span>
<span class="normal">1008</span>
<span class="normal">1009</span>
<span class="normal">1010</span>
<span class="normal">1011</span>
<span class="normal">1012</span>
<span class="normal">1013</span>
<span class="normal">1014</span>
<span class="normal">1015</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_wants</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить пользовательские предпочтения (wants).</span>
<span class="sd"> Wants — это настройки интересов пользователя:</span>
<span class="sd"> - Предпочитаемые категории</span>
<span class="sd"> - Ключевые слова для мониторинга</span>
<span class="sd"> - Фильтры для поиска</span>
<span class="sd"> Returns:</span>
<span class="sd"> Словарь с настройками предпочтений.</span>
<span class="sd"> Example:</span>
<span class="sd"> wants = await client.other.get_wants()</span>
<span class="sd"> print(wants)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/myWants&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.get_wants_status" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_wants_status</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.get_wants_status" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_wants_status</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить статус предпочтений.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Статус wants с метаданными.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1017</span>
<span class="normal">1018</span>
<span class="normal">1019</span>
<span class="normal">1020</span>
<span class="normal">1021</span>
<span class="normal">1022</span>
<span class="normal">1023</span>
<span class="normal">1024</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_wants_status</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить статус предпочтений.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Статус wants с метаданными.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/wantsStatusList&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.go_offline" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">go_offline</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.go_offline" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">go_offline</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Установить статус пользователя "оффлайн".</p>
<p>Скрывает онлайн-статус от других пользователей.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Подтверждение изменения статуса.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>await client.other.go_offline()</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1159</span>
<span class="normal">1160</span>
<span class="normal">1161</span>
<span class="normal">1162</span>
<span class="normal">1163</span>
<span class="normal">1164</span>
<span class="normal">1165</span>
<span class="normal">1166</span>
<span class="normal">1167</span>
<span class="normal">1168</span>
<span class="normal">1169</span>
<span class="normal">1170</span>
<span class="normal">1171</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">go_offline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Установить статус пользователя &quot;оффлайн&quot;.</span>
<span class="sd"> Скрывает онлайн-статус от других пользователей.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Подтверждение изменения статуса.</span>
<span class="sd"> Example:</span>
<span class="sd"> await client.other.go_offline()</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/offline&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.is_dialog_allow" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">is_dialog_allow</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.is_dialog_allow" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">is_dialog_allow</span><span class="p">(</span><span class="n">user_id</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Проверить возможность начала диалога с пользователем.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>user_id</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>ID пользователя для проверки.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="bool">bool</span></code>
</td>
<td>
<div class="doc-md-description">
<p>True если диалог разрешён, False иначе.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>allowed = await client.other.is_dialog_allow(12345)
if allowed:
print("Можно написать сообщение")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1087</span>
<span class="normal">1088</span>
<span class="normal">1089</span>
<span class="normal">1090</span>
<span class="normal">1091</span>
<span class="normal">1092</span>
<span class="normal">1093</span>
<span class="normal">1094</span>
<span class="normal">1095</span>
<span class="normal">1096</span>
<span class="normal">1097</span>
<span class="normal">1098</span>
<span class="normal">1099</span>
<span class="normal">1100</span>
<span class="normal">1101</span>
<span class="normal">1102</span>
<span class="normal">1103</span>
<span class="normal">1104</span>
<span class="normal">1105</span>
<span class="normal">1106</span>
<span class="normal">1107</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">is_dialog_allow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Проверить возможность начала диалога с пользователем.</span>
<span class="sd"> Args:</span>
<span class="sd"> user_id: ID пользователя для проверки.</span>
<span class="sd"> Returns:</span>
<span class="sd"> True если диалог разрешён, False иначе.</span>
<span class="sd"> Example:</span>
<span class="sd"> allowed = await client.other.is_dialog_allow(12345)</span>
<span class="sd"> if allowed:</span>
<span class="sd"> print(&quot;Можно написать сообщение&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span>
<span class="s2">&quot;POST&quot;</span><span class="p">,</span>
<span class="s2">&quot;/isDialogAllow&quot;</span><span class="p">,</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;user_id&quot;</span><span class="p">:</span> <span class="n">user_id</span><span class="p">},</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;allowed&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.update_settings" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">update_settings</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.update_settings" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">update_settings</span><span class="p">(</span><span class="n">settings</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Обновить настройки пользователя.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>settings</code>
</td>
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Словарь с настройками для обновления.
Структура зависит от конкретных настроек.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Ответ API с подтверждением обновления.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>await client.other.update_settings({
"email_notifications": True,
"language": "ru"
})</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1140</span>
<span class="normal">1141</span>
<span class="normal">1142</span>
<span class="normal">1143</span>
<span class="normal">1144</span>
<span class="normal">1145</span>
<span class="normal">1146</span>
<span class="normal">1147</span>
<span class="normal">1148</span>
<span class="normal">1149</span>
<span class="normal">1150</span>
<span class="normal">1151</span>
<span class="normal">1152</span>
<span class="normal">1153</span>
<span class="normal">1154</span>
<span class="normal">1155</span>
<span class="normal">1156</span>
<span class="normal">1157</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">update_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Обновить настройки пользователя.</span>
<span class="sd"> Args:</span>
<span class="sd"> settings: Словарь с настройками для обновления.</span>
<span class="sd"> Структура зависит от конкретных настроек.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Ответ API с подтверждением обновления.</span>
<span class="sd"> Example:</span>
<span class="sd"> await client.other.update_settings({</span>
<span class="sd"> &quot;email_notifications&quot;: True,</span>
<span class="sd"> &quot;language&quot;: &quot;ru&quot;</span>
<span class="sd"> })</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/updateSettings&quot;</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">settings</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.OtherAPI.validate_text" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">validate_text</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.OtherAPI.validate_text" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">validate_text</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Проверить текст на соответствие требованиям Kwork.</p>
<p>Эндпоинт валидации текста используется для проверки:
- Описаний кворков
- Текстов проектов
- Сообщений и отзывов</p>
<p>Находит потенциальные проблемы:
- Запрещённые слова и контакты
- Нарушения правил площадки
- Проблемы с форматированием</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>text</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Текст для проверки.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>context</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Контекст использования (опционально).
Например: "kwork_description", "project_text", "message".</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="ValidationResponse (kwork_api.models.ValidationResponse)" href="../models/#kwork_api.models.ValidationResponse">ValidationResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<p>ValidationResponse с результатами валидации.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>result = await client.other.validate_text(
"Отличный сервис, звоните +7-999-000-00-00"
)
if not result.is_valid:
print("Текст не прошёл валидацию:")
for issue in result.issues:
print(f" - {issue.message}")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1182</span>
<span class="normal">1183</span>
<span class="normal">1184</span>
<span class="normal">1185</span>
<span class="normal">1186</span>
<span class="normal">1187</span>
<span class="normal">1188</span>
<span class="normal">1189</span>
<span class="normal">1190</span>
<span class="normal">1191</span>
<span class="normal">1192</span>
<span class="normal">1193</span>
<span class="normal">1194</span>
<span class="normal">1195</span>
<span class="normal">1196</span>
<span class="normal">1197</span>
<span class="normal">1198</span>
<span class="normal">1199</span>
<span class="normal">1200</span>
<span class="normal">1201</span>
<span class="normal">1202</span>
<span class="normal">1203</span>
<span class="normal">1204</span>
<span class="normal">1205</span>
<span class="normal">1206</span>
<span class="normal">1207</span>
<span class="normal">1208</span>
<span class="normal">1209</span>
<span class="normal">1210</span>
<span class="normal">1211</span>
<span class="normal">1212</span>
<span class="normal">1213</span>
<span class="normal">1214</span>
<span class="normal">1215</span>
<span class="normal">1216</span>
<span class="normal">1217</span>
<span class="normal">1218</span>
<span class="normal">1219</span>
<span class="normal">1220</span>
<span class="normal">1221</span>
<span class="normal">1222</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">validate_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">context</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ValidationResponse</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Проверить текст на соответствие требованиям Kwork.</span>
<span class="sd"> Эндпоинт валидации текста используется для проверки:</span>
<span class="sd"> - Описаний кворков</span>
<span class="sd"> - Текстов проектов</span>
<span class="sd"> - Сообщений и отзывов</span>
<span class="sd"> Находит потенциальные проблемы:</span>
<span class="sd"> - Запрещённые слова и контакты</span>
<span class="sd"> - Нарушения правил площадки</span>
<span class="sd"> - Проблемы с форматированием</span>
<span class="sd"> Args:</span>
<span class="sd"> text: Текст для проверки.</span>
<span class="sd"> context: Контекст использования (опционально).</span>
<span class="sd"> Например: &quot;kwork_description&quot;, &quot;project_text&quot;, &quot;message&quot;.</span>
<span class="sd"> Returns:</span>
<span class="sd"> ValidationResponse с результатами валидации.</span>
<span class="sd"> Example:</span>
<span class="sd"> result = await client.other.validate_text(</span>
<span class="sd"> &quot;Отличный сервис, звоните +7-999-000-00-00&quot;</span>
<span class="sd"> )</span>
<span class="sd"> if not result.is_valid:</span>
<span class="sd"> print(&quot;Текст не прошёл валидацию:&quot;)</span>
<span class="sd"> for issue in result.issues:</span>
<span class="sd"> print(f&quot; - {issue.message}&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;text&quot;</span><span class="p">:</span> <span class="n">text</span><span class="p">}</span>
<span class="k">if</span> <span class="n">context</span><span class="p">:</span>
<span class="n">payload</span><span class="p">[</span><span class="s2">&quot;context&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">context</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span>
<span class="s2">&quot;POST&quot;</span><span class="p">,</span>
<span class="s2">&quot;/api/validation/checktext&quot;</span><span class="p">,</span>
<span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">ValidationResponse</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="kwork_api.client.KworkClient.ProjectsAPI" class="doc doc-heading">
<span class="doc doc-object-name doc-class-name">ProjectsAPI</span>
<a href="#kwork_api.client.KworkClient.ProjectsAPI" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">ProjectsAPI</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>API биржи проектов (фриланс заказы).</p>
<p>Предоставляет доступ к заказам на фриланс:
- Просмотр открытых проектов
- Заказы где вы заказчик (payer)
- Заказы где вы исполнитель (worker)</p>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.ProjectsAPI--_1">Новые проекты<a class="headerlink" href="#kwork_api.client.KworkClient.ProjectsAPI--_1" title="Permanent link">&para;</a></h5>
<p>projects = await client.projects.get_list(page=1)</p>
<h5 id="kwork_api.client.KworkClient.ProjectsAPI--_2">Мои заказы как заказчика<a class="headerlink" href="#kwork_api.client.KworkClient.ProjectsAPI--_2" title="Permanent link">&para;</a></h5>
<p>my_orders = await client.projects.get_payer_orders()</p>
<h5 id="kwork_api.client.KworkClient.ProjectsAPI--_3">Мои заказы как исполнителя<a class="headerlink" href="#kwork_api.client.KworkClient.ProjectsAPI--_3" title="Permanent link">&para;</a></h5>
<p>my_work = await client.projects.get_worker_orders()</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">561</span>
<span class="normal">562</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">:</span> <span class="s2">&quot;KworkClient&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="kwork_api.client.KworkClient.ProjectsAPI-functions">Functions<a href="#kwork_api.client.KworkClient.ProjectsAPI-functions" class="headerlink" title="Permanent link">&para;</a></h5>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.ProjectsAPI.get_list" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_list</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.ProjectsAPI.get_list" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_list</span><span class="p">(</span><span class="n">page</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">category_id</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить список проектов с биржи.</p>
<p>Основной эндпоинт для просмотра доступных заказов.
Возвращает пагинированный список проектов.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>page</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Номер страницы (начиная с 1).</p>
</div>
</td>
<td>
<code>1</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>category_id</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="int">int</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>ID категории для фильтрации.
Если None — все категории.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="ProjectsResponse (kwork_api.models.ProjectsResponse)" href="../models/#kwork_api.models.ProjectsResponse">ProjectsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<p>ProjectsResponse содержащий:</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="ProjectsResponse (kwork_api.models.ProjectsResponse)" href="../models/#kwork_api.models.ProjectsResponse">ProjectsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>projects: список проектов на странице</li>
</ul>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="ProjectsResponse (kwork_api.models.ProjectsResponse)" href="../models/#kwork_api.models.ProjectsResponse">ProjectsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>pagination: информация о пагинации</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<h6 id="kwork_api.client.KworkClient.ProjectsAPI.get_list--_1">Все новые проекты<a class="headerlink" href="#kwork_api.client.KworkClient.ProjectsAPI.get_list--_1" title="Permanent link">&para;</a></h6>
<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>
<h6 id="kwork_api.client.KworkClient.ProjectsAPI.get_list--_2">Только категория "Разработка"<a class="headerlink" href="#kwork_api.client.KworkClient.ProjectsAPI.get_list--_2" title="Permanent link">&para;</a></h6>
<p>dev_projects = await client.projects.get_list(
page=1,
category_id=5
)</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">564</span>
<span class="normal">565</span>
<span class="normal">566</span>
<span class="normal">567</span>
<span class="normal">568</span>
<span class="normal">569</span>
<span class="normal">570</span>
<span class="normal">571</span>
<span class="normal">572</span>
<span class="normal">573</span>
<span class="normal">574</span>
<span class="normal">575</span>
<span class="normal">576</span>
<span class="normal">577</span>
<span class="normal">578</span>
<span class="normal">579</span>
<span class="normal">580</span>
<span class="normal">581</span>
<span class="normal">582</span>
<span class="normal">583</span>
<span class="normal">584</span>
<span class="normal">585</span>
<span class="normal">586</span>
<span class="normal">587</span>
<span class="normal">588</span>
<span class="normal">589</span>
<span class="normal">590</span>
<span class="normal">591</span>
<span class="normal">592</span>
<span class="normal">593</span>
<span class="normal">594</span>
<span class="normal">595</span>
<span class="normal">596</span>
<span class="normal">597</span>
<span class="normal">598</span>
<span class="normal">599</span>
<span class="normal">600</span>
<span class="normal">601</span>
<span class="normal">602</span>
<span class="normal">603</span>
<span class="normal">604</span>
<span class="normal">605</span>
<span class="normal">606</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_list</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">page</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="n">category_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ProjectsResponse</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить список проектов с биржи.</span>
<span class="sd"> Основной эндпоинт для просмотра доступных заказов.</span>
<span class="sd"> Возвращает пагинированный список проектов.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: Номер страницы (начиная с 1).</span>
<span class="sd"> category_id: ID категории для фильтрации.</span>
<span class="sd"> Если None — все категории.</span>
<span class="sd"> Returns:</span>
<span class="sd"> ProjectsResponse содержащий:</span>
<span class="sd"> - projects: список проектов на странице</span>
<span class="sd"> - pagination: информация о пагинации</span>
<span class="sd"> Example:</span>
<span class="sd"> # Все новые проекты</span>
<span class="sd"> response = await client.projects.get_list(page=1)</span>
<span class="sd"> for project in response.projects:</span>
<span class="sd"> print(f&quot;{project.title}: {project.budget} {project.budget_type}&quot;)</span>
<span class="sd"> # Только категория &quot;Разработка&quot;</span>
<span class="sd"> dev_projects = await client.projects.get_list(</span>
<span class="sd"> page=1,</span>
<span class="sd"> category_id=5</span>
<span class="sd"> )</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span>
<span class="s2">&quot;POST&quot;</span><span class="p">,</span>
<span class="s2">&quot;/projects&quot;</span><span class="p">,</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;page&quot;</span><span class="p">:</span> <span class="n">page</span><span class="p">,</span>
<span class="s2">&quot;category_id&quot;</span><span class="p">:</span> <span class="n">category_id</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">ProjectsResponse</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.ProjectsAPI.get_payer_orders" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_payer_orders</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.ProjectsAPI.get_payer_orders" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_payer_orders</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить заказы где вы являетесь заказчиком.</p>
<p>Возвращает все проекты, созданные текущим пользователем,
независимо от их статуса (открыт, в работе, завершён).</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Project (kwork_api.models.Project)" href="../models/#kwork_api.models.Project">Project</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список проектов где текущий пользователь — заказчик.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>orders = await client.projects.get_payer_orders()
for order in orders:
print(f"Заказ #{order.id}: {order.status}")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">608</span>
<span class="normal">609</span>
<span class="normal">610</span>
<span class="normal">611</span>
<span class="normal">612</span>
<span class="normal">613</span>
<span class="normal">614</span>
<span class="normal">615</span>
<span class="normal">616</span>
<span class="normal">617</span>
<span class="normal">618</span>
<span class="normal">619</span>
<span class="normal">620</span>
<span class="normal">621</span>
<span class="normal">622</span>
<span class="normal">623</span>
<span class="normal">624</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_payer_orders</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Project</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить заказы где вы являетесь заказчиком.</span>
<span class="sd"> Возвращает все проекты, созданные текущим пользователем,</span>
<span class="sd"> независимо от их статуса (открыт, в работе, завершён).</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список проектов где текущий пользователь — заказчик.</span>
<span class="sd"> Example:</span>
<span class="sd"> orders = await client.projects.get_payer_orders()</span>
<span class="sd"> for order in orders:</span>
<span class="sd"> print(f&quot;Заказ #{order.id}: {order.status}&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/payerOrders&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Project</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;orders&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.ProjectsAPI.get_worker_orders" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_worker_orders</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.ProjectsAPI.get_worker_orders" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_worker_orders</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить заказы где вы являетесь исполнителем.</p>
<p>Возвращает все проекты, где текущий пользователь
назначен исполнителем.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Project (kwork_api.models.Project)" href="../models/#kwork_api.models.Project">Project</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список проектов где текущий пользователь — исполнитель.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>work = await client.projects.get_worker_orders()
active = [p for p in work if p.status == "in_progress"]
print(f"Активных заказов: {len(active)}")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">626</span>
<span class="normal">627</span>
<span class="normal">628</span>
<span class="normal">629</span>
<span class="normal">630</span>
<span class="normal">631</span>
<span class="normal">632</span>
<span class="normal">633</span>
<span class="normal">634</span>
<span class="normal">635</span>
<span class="normal">636</span>
<span class="normal">637</span>
<span class="normal">638</span>
<span class="normal">639</span>
<span class="normal">640</span>
<span class="normal">641</span>
<span class="normal">642</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_worker_orders</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Project</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить заказы где вы являетесь исполнителем.</span>
<span class="sd"> Возвращает все проекты, где текущий пользователь</span>
<span class="sd"> назначен исполнителем.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список проектов где текущий пользователь — исполнитель.</span>
<span class="sd"> Example:</span>
<span class="sd"> work = await client.projects.get_worker_orders()</span>
<span class="sd"> active = [p for p in work if p.status == &quot;in_progress&quot;]</span>
<span class="sd"> print(f&quot;Активных заказов: {len(active)}&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/workerOrders&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Project</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;orders&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="kwork_api.client.KworkClient.ReferenceAPI" class="doc doc-heading">
<span class="doc doc-object-name doc-class-name">ReferenceAPI</span>
<a href="#kwork_api.client.KworkClient.ReferenceAPI" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">ReferenceAPI</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Справочное API.</p>
<p>Предоставляет доступ к справочным данным Kwork:
- Города, страны, часовые пояса
- Доступные функции и дополнения
- Значки пользователей</p>
<p>Эти данные редко меняются и могут быть закэшированы.</p>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.ReferenceAPI--_1">Все страны<a class="headerlink" href="#kwork_api.client.KworkClient.ReferenceAPI--_1" title="Permanent link">&para;</a></h5>
<p>countries = await client.reference.get_countries()</p>
<h5 id="kwork_api.client.KworkClient.ReferenceAPI--_2">Все города<a class="headerlink" href="#kwork_api.client.KworkClient.ReferenceAPI--_2" title="Permanent link">&para;</a></h5>
<p>cities = await client.reference.get_cities()</p>
<h5 id="kwork_api.client.KworkClient.ReferenceAPI--_3">Доступные фичи<a class="headerlink" href="#kwork_api.client.KworkClient.ReferenceAPI--_3" title="Permanent link">&para;</a></h5>
<p>features = await client.reference.get_features()</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">769</span>
<span class="normal">770</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">:</span> <span class="s2">&quot;KworkClient&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="kwork_api.client.KworkClient.ReferenceAPI-functions">Functions<a href="#kwork_api.client.KworkClient.ReferenceAPI-functions" class="headerlink" title="Permanent link">&para;</a></h5>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.ReferenceAPI.get_badges_info" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_badges_info</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_badges_info" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_badges_info</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить информацию о значках пользователей.</p>
<p>Значки (badges) отображают достижения и статусы:
- "Профессионал"
- "Быстрый ответ"
- "Надёжный продавец"
- и т.д.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Badge (kwork_api.models.Badge)" href="../models/#kwork_api.models.Badge">Badge</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список значков с описаниями и иконками.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>badges = await client.reference.get_badges_info()
for badge in badges:
print(f"{badge.name}: {badge.description}")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">848</span>
<span class="normal">849</span>
<span class="normal">850</span>
<span class="normal">851</span>
<span class="normal">852</span>
<span class="normal">853</span>
<span class="normal">854</span>
<span class="normal">855</span>
<span class="normal">856</span>
<span class="normal">857</span>
<span class="normal">858</span>
<span class="normal">859</span>
<span class="normal">860</span>
<span class="normal">861</span>
<span class="normal">862</span>
<span class="normal">863</span>
<span class="normal">864</span>
<span class="normal">865</span>
<span class="normal">866</span>
<span class="normal">867</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_badges_info</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Badge</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить информацию о значках пользователей.</span>
<span class="sd"> Значки (badges) отображают достижения и статусы:</span>
<span class="sd"> - &quot;Профессионал&quot;</span>
<span class="sd"> - &quot;Быстрый ответ&quot;</span>
<span class="sd"> - &quot;Надёжный продавец&quot;</span>
<span class="sd"> - и т.д.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список значков с описаниями и иконками.</span>
<span class="sd"> Example:</span>
<span class="sd"> badges = await client.reference.get_badges_info()</span>
<span class="sd"> for badge in badges:</span>
<span class="sd"> print(f&quot;{badge.name}: {badge.description}&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/getBadgesInfo&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Badge</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;badges&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.ReferenceAPI.get_cities" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_cities</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_cities" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_cities</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить список всех городов.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="City (kwork_api.models.City)" href="../models/#kwork_api.models.City">City</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список всех городов из справочника Kwork.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>cities = await client.reference.get_cities()
moscow = next(c for c in cities if c.name == "Москва")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">772</span>
<span class="normal">773</span>
<span class="normal">774</span>
<span class="normal">775</span>
<span class="normal">776</span>
<span class="normal">777</span>
<span class="normal">778</span>
<span class="normal">779</span>
<span class="normal">780</span>
<span class="normal">781</span>
<span class="normal">782</span>
<span class="normal">783</span>
<span class="normal">784</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_cities</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">City</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить список всех городов.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список всех городов из справочника Kwork.</span>
<span class="sd"> Example:</span>
<span class="sd"> cities = await client.reference.get_cities()</span>
<span class="sd"> moscow = next(c for c in cities if c.name == &quot;Москва&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/cities&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">City</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cities&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.ReferenceAPI.get_countries" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_countries</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_countries" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_countries</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить список всех стран.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Country (kwork_api.models.Country)" href="../models/#kwork_api.models.Country">Country</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список всех стран с кодами и городами.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>countries = await client.reference.get_countries()
russia = next(c for c in countries if c.code == "RU")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">786</span>
<span class="normal">787</span>
<span class="normal">788</span>
<span class="normal">789</span>
<span class="normal">790</span>
<span class="normal">791</span>
<span class="normal">792</span>
<span class="normal">793</span>
<span class="normal">794</span>
<span class="normal">795</span>
<span class="normal">796</span>
<span class="normal">797</span>
<span class="normal">798</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_countries</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Country</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить список всех стран.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список всех стран с кодами и городами.</span>
<span class="sd"> Example:</span>
<span class="sd"> countries = await client.reference.get_countries()</span>
<span class="sd"> russia = next(c for c in countries if c.code == &quot;RU&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/countries&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Country</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;countries&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.ReferenceAPI.get_features" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_features</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_features" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_features</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить доступные дополнительные функции (features).</p>
<p>Features — это платные дополнения к кворкам:
- Увеличенные сроки
- Дополнительные правки
- Приоритетная поддержка
- и т.д.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Feature (kwork_api.models.Feature)" href="../models/#kwork_api.models.Feature">Feature</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список доступных features с названиями и ценами.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>features = await client.reference.get_features()
for f in features:
print(f"{f.name}: {f.price} RUB")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">814</span>
<span class="normal">815</span>
<span class="normal">816</span>
<span class="normal">817</span>
<span class="normal">818</span>
<span class="normal">819</span>
<span class="normal">820</span>
<span class="normal">821</span>
<span class="normal">822</span>
<span class="normal">823</span>
<span class="normal">824</span>
<span class="normal">825</span>
<span class="normal">826</span>
<span class="normal">827</span>
<span class="normal">828</span>
<span class="normal">829</span>
<span class="normal">830</span>
<span class="normal">831</span>
<span class="normal">832</span>
<span class="normal">833</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_features</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Feature</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить доступные дополнительные функции (features).</span>
<span class="sd"> Features — это платные дополнения к кворкам:</span>
<span class="sd"> - Увеличенные сроки</span>
<span class="sd"> - Дополнительные правки</span>
<span class="sd"> - Приоритетная поддержка</span>
<span class="sd"> - и т.д.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список доступных features с названиями и ценами.</span>
<span class="sd"> Example:</span>
<span class="sd"> features = await client.reference.get_features()</span>
<span class="sd"> for f in features:</span>
<span class="sd"> print(f&quot;{f.name}: {f.price} RUB&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/getAvailableFeatures&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Feature</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;features&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.ReferenceAPI.get_public_features" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_public_features</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_public_features" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_public_features</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить публичные функции.</p>
<p>Аналогично get_features(), но возвращает только
публично доступные опции.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Feature (kwork_api.models.Feature)" href="../models/#kwork_api.models.Feature">Feature</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список публичных features.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">835</span>
<span class="normal">836</span>
<span class="normal">837</span>
<span class="normal">838</span>
<span class="normal">839</span>
<span class="normal">840</span>
<span class="normal">841</span>
<span class="normal">842</span>
<span class="normal">843</span>
<span class="normal">844</span>
<span class="normal">845</span>
<span class="normal">846</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_public_features</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Feature</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить публичные функции.</span>
<span class="sd"> Аналогично get_features(), но возвращает только</span>
<span class="sd"> публично доступные опции.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список публичных features.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/getPublicFeatures&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Feature</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;features&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.ReferenceAPI.get_timezones" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_timezones</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.ReferenceAPI.get_timezones" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_timezones</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить список всех часовых поясов.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="TimeZone (kwork_api.models.TimeZone)" href="../models/#kwork_api.models.TimeZone">TimeZone</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список часовых поясов с названиями и смещениями.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>timezones = await client.reference.get_timezones()
msks = next(tz for tz in timezones if "Moscow" in tz.name)</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">800</span>
<span class="normal">801</span>
<span class="normal">802</span>
<span class="normal">803</span>
<span class="normal">804</span>
<span class="normal">805</span>
<span class="normal">806</span>
<span class="normal">807</span>
<span class="normal">808</span>
<span class="normal">809</span>
<span class="normal">810</span>
<span class="normal">811</span>
<span class="normal">812</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_timezones</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">TimeZone</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить список всех часовых поясов.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список часовых поясов с названиями и смещениями.</span>
<span class="sd"> Example:</span>
<span class="sd"> timezones = await client.reference.get_timezones()</span>
<span class="sd"> msks = next(tz for tz in timezones if &quot;Moscow&quot; in tz.name)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/timezones&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">TimeZone</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;timezones&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h4 id="kwork_api.client.KworkClient.UserAPI" class="doc doc-heading">
<span class="doc doc-object-name doc-class-name">UserAPI</span>
<a href="#kwork_api.client.KworkClient.UserAPI" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">UserAPI</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Пользовательское API.</p>
<p>Предоставляет доступ к данным текущего пользователя:
- Профиль и информация об аккаунте
- Отзывы (полученные и оставленные)
- Избранные кворки</p>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.UserAPI--_1">Информация о пользователе<a class="headerlink" href="#kwork_api.client.KworkClient.UserAPI--_1" title="Permanent link">&para;</a></h5>
<p>info = await client.user.get_info()</p>
<h5 id="kwork_api.client.KworkClient.UserAPI--_2">Мои отзывы<a class="headerlink" href="#kwork_api.client.KworkClient.UserAPI--_2" title="Permanent link">&para;</a></h5>
<p>reviews = await client.user.get_reviews()</p>
<h5 id="kwork_api.client.KworkClient.UserAPI--_3">Избранные кворки<a class="headerlink" href="#kwork_api.client.KworkClient.UserAPI--_3" title="Permanent link">&para;</a></h5>
<p>favorites = await client.user.get_favorite_kworks()</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">666</span>
<span class="normal">667</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">:</span> <span class="s2">&quot;KworkClient&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<h5 id="kwork_api.client.KworkClient.UserAPI-functions">Functions<a href="#kwork_api.client.KworkClient.UserAPI-functions" class="headerlink" title="Permanent link">&para;</a></h5>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.UserAPI.get_favorite_kworks" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_favorite_kworks</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.UserAPI.get_favorite_kworks" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_favorite_kworks</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить список избранных кворков.</p>
<p>Возвращает все кворки, добавленные пользователем в избранное.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="Kwork (kwork_api.models.Kwork)" href="../models/#kwork_api.models.Kwork">Kwork</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список избранных кворков.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>favorites = await client.user.get_favorite_kworks()
for kwork in favorites:
print(f"{kwork.title}: {kwork.price} RUB")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">728</span>
<span class="normal">729</span>
<span class="normal">730</span>
<span class="normal">731</span>
<span class="normal">732</span>
<span class="normal">733</span>
<span class="normal">734</span>
<span class="normal">735</span>
<span class="normal">736</span>
<span class="normal">737</span>
<span class="normal">738</span>
<span class="normal">739</span>
<span class="normal">740</span>
<span class="normal">741</span>
<span class="normal">742</span>
<span class="normal">743</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_favorite_kworks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Kwork</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить список избранных кворков.</span>
<span class="sd"> Возвращает все кворки, добавленные пользователем в избранное.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Список избранных кворков.</span>
<span class="sd"> Example:</span>
<span class="sd"> favorites = await client.user.get_favorite_kworks()</span>
<span class="sd"> for kwork in favorites:</span>
<span class="sd"> print(f&quot;{kwork.title}: {kwork.price} RUB&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/favoriteKworks&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Kwork</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kworks&quot;</span><span class="p">,</span> <span class="p">[])]</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.UserAPI.get_info" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_info</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.UserAPI.get_info" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_info</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить информацию о текущем пользователе.</p>
<p>Возвращает основные данные аккаунта:
- ID, username, email
- Баланс, рейтинг
- Статус верификации
- Настройки профиля</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Словарь с информацией о пользователе.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Структура зависит от ответа API.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<p>info = await client.user.get_info()
print(f"User: {info.get('username')}")
print(f"Balance: {info.get('balance')} RUB")</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">669</span>
<span class="normal">670</span>
<span class="normal">671</span>
<span class="normal">672</span>
<span class="normal">673</span>
<span class="normal">674</span>
<span class="normal">675</span>
<span class="normal">676</span>
<span class="normal">677</span>
<span class="normal">678</span>
<span class="normal">679</span>
<span class="normal">680</span>
<span class="normal">681</span>
<span class="normal">682</span>
<span class="normal">683</span>
<span class="normal">684</span>
<span class="normal">685</span>
<span class="normal">686</span>
<span class="normal">687</span>
<span class="normal">688</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_info</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить информацию о текущем пользователе.</span>
<span class="sd"> Возвращает основные данные аккаунта:</span>
<span class="sd"> - ID, username, email</span>
<span class="sd"> - Баланс, рейтинг</span>
<span class="sd"> - Статус верификации</span>
<span class="sd"> - Настройки профиля</span>
<span class="sd"> Returns:</span>
<span class="sd"> Словарь с информацией о пользователе.</span>
<span class="sd"> Структура зависит от ответа API.</span>
<span class="sd"> Example:</span>
<span class="sd"> info = await client.user.get_info()</span>
<span class="sd"> print(f&quot;User: {info.get(&#39;username&#39;)}&quot;)</span>
<span class="sd"> print(f&quot;Balance: {info.get(&#39;balance&#39;)} RUB&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;/user&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h6 id="kwork_api.client.KworkClient.UserAPI.get_reviews" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">get_reviews</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.UserAPI.get_reviews" class="headerlink" title="Permanent link">&para;</a></h6>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">get_reviews</span><span class="p">(</span><span class="n">user_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">page</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Получить отзывы пользователя.</p>
<p>Если user_id не указан — возвращает отзывы текущего пользователя.
Если указан — отзывы другого пользователя по ID.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>user_id</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="int">int</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>ID пользователя. Если None — текущий пользователь.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>page</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Номер страницы для пагинации (начиная с 1).</p>
</div>
</td>
<td>
<code>1</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="ReviewsResponse (kwork_api.models.ReviewsResponse)" href="../models/#kwork_api.models.ReviewsResponse">ReviewsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<p>ReviewsResponse содержащий:</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="ReviewsResponse (kwork_api.models.ReviewsResponse)" href="../models/#kwork_api.models.ReviewsResponse">ReviewsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>reviews: список отзывов на странице</li>
</ul>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="ReviewsResponse (kwork_api.models.ReviewsResponse)" href="../models/#kwork_api.models.ReviewsResponse">ReviewsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>pagination: информация о пагинации</li>
</ul>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="ReviewsResponse (kwork_api.models.ReviewsResponse)" href="../models/#kwork_api.models.ReviewsResponse">ReviewsResponse</a></code>
</td>
<td>
<div class="doc-md-description">
<ul>
<li>average_rating: средний рейтинг</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<h6 id="kwork_api.client.KworkClient.UserAPI.get_reviews--_1">Мои отзывы<a class="headerlink" href="#kwork_api.client.KworkClient.UserAPI.get_reviews--_1" title="Permanent link">&para;</a></h6>
<p>my_reviews = await client.user.get_reviews()</p>
<h6 id="kwork_api.client.KworkClient.UserAPI.get_reviews--_2">Отзывы другого пользователя<a class="headerlink" href="#kwork_api.client.KworkClient.UserAPI.get_reviews--_2" title="Permanent link">&para;</a></h6>
<p>user_reviews = await client.user.get_reviews(user_id=12345)</p>
<h6 id="kwork_api.client.KworkClient.UserAPI.get_reviews--_3">С пагинацией<a class="headerlink" href="#kwork_api.client.KworkClient.UserAPI.get_reviews--_3" title="Permanent link">&para;</a></h6>
<p>page2 = await client.user.get_reviews(page=2)</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">690</span>
<span class="normal">691</span>
<span class="normal">692</span>
<span class="normal">693</span>
<span class="normal">694</span>
<span class="normal">695</span>
<span class="normal">696</span>
<span class="normal">697</span>
<span class="normal">698</span>
<span class="normal">699</span>
<span class="normal">700</span>
<span class="normal">701</span>
<span class="normal">702</span>
<span class="normal">703</span>
<span class="normal">704</span>
<span class="normal">705</span>
<span class="normal">706</span>
<span class="normal">707</span>
<span class="normal">708</span>
<span class="normal">709</span>
<span class="normal">710</span>
<span class="normal">711</span>
<span class="normal">712</span>
<span class="normal">713</span>
<span class="normal">714</span>
<span class="normal">715</span>
<span class="normal">716</span>
<span class="normal">717</span>
<span class="normal">718</span>
<span class="normal">719</span>
<span class="normal">720</span>
<span class="normal">721</span>
<span class="normal">722</span>
<span class="normal">723</span>
<span class="normal">724</span>
<span class="normal">725</span>
<span class="normal">726</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_reviews</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">user_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">page</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ReviewsResponse</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Получить отзывы пользователя.</span>
<span class="sd"> Если user_id не указан — возвращает отзывы текущего пользователя.</span>
<span class="sd"> Если указан — отзывы другого пользователя по ID.</span>
<span class="sd"> Args:</span>
<span class="sd"> user_id: ID пользователя. Если None — текущий пользователь.</span>
<span class="sd"> page: Номер страницы для пагинации (начиная с 1).</span>
<span class="sd"> Returns:</span>
<span class="sd"> ReviewsResponse содержащий:</span>
<span class="sd"> - reviews: список отзывов на странице</span>
<span class="sd"> - pagination: информация о пагинации</span>
<span class="sd"> - average_rating: средний рейтинг</span>
<span class="sd"> Example:</span>
<span class="sd"> # Мои отзывы</span>
<span class="sd"> my_reviews = await client.user.get_reviews()</span>
<span class="sd"> # Отзывы другого пользователя</span>
<span class="sd"> user_reviews = await client.user.get_reviews(user_id=12345)</span>
<span class="sd"> # С пагинацией</span>
<span class="sd"> page2 = await client.user.get_reviews(page=2)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">_request</span><span class="p">(</span>
<span class="s2">&quot;POST&quot;</span><span class="p">,</span>
<span class="s2">&quot;/userReviews&quot;</span><span class="p">,</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;user_id&quot;</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span> <span class="s2">&quot;page&quot;</span><span class="p">:</span> <span class="n">page</span><span class="p">},</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">ReviewsResponse</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<h3 id="kwork_api.client.KworkClient-functions">Functions<a href="#kwork_api.client.KworkClient-functions" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-object doc-function">
<h4 id="kwork_api.client.KworkClient.close" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">close</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
</span>
<a href="#kwork_api.client.KworkClient.close" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">close</span><span class="p">()</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Close HTTP client.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">315</span>
<span class="normal">316</span>
<span class="normal">317</span>
<span class="normal">318</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Close HTTP client.&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">is_closed</span><span class="p">:</span>
<span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">aclose</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h4 id="kwork_api.client.KworkClient.login" class="doc doc-heading">
<span class="doc doc-object-name doc-function-name">login</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-async"><code>async</code></small>
<small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small>
</span>
<a href="#kwork_api.client.KworkClient.login" class="headerlink" title="Permanent link">&para;</a></h4>
<div class="doc-signature highlight"><pre><span></span><code><span class="nf">login</span><span class="p">(</span><span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">30.0</span><span class="p">)</span>
</code></pre></div>
<div class="doc doc-contents ">
<p>Аутентификация по логину и паролю.</p>
<p>Выполняет двухэтапный процесс аутентификации Kwork:
1. POST /signIn — проверка учётных данных, получение session cookies
2. POST /getWebAuthToken — обмен cookies на web_auth_token</p>
<p>Полученный токен и cookies сохраняются в клиенте для последующих запросов.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>username</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Логин или email аккаунта Kwork.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>password</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Пароль аккаунта Kwork.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>timeout</code>
</td>
<td>
<code><span title="float">float</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Таймаут запросов в секундах. Применяется к каждому этапу.</p>
</div>
</td>
<td>
<code>30.0</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="kwork_api.client.KworkClient" href="#kwork_api.client.KworkClient">KworkClient</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Полностью аутентифицированный экземпляр KworkClient,</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="kwork_api.client.KworkClient" href="#kwork_api.client.KworkClient">KworkClient</a></code>
</td>
<td>
<div class="doc-md-description">
<p>готовый к работе с API.</p>
</div>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="KworkAuthError (kwork_api.errors.KworkAuthError)" href="../errors/#kwork_api.errors.KworkAuthError">KworkAuthError</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Если логин/пароль неверны или токен не получен.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="KworkNetworkError (kwork_api.errors.KworkNetworkError)" href="../errors/#kwork_api.errors.KworkNetworkError">KworkNetworkError</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Если произошла ошибка сети.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="example" open>
<summary>Example</summary>
<h5 id="kwork_api.client.KworkClient.login--_1">Базовое использование<a class="headerlink" href="#kwork_api.client.KworkClient.login--_1" title="Permanent link">&para;</a></h5>
<p>client = await KworkClient.login("myuser", "mypassword")</p>
<h5 id="kwork_api.client.KworkClient.login--_2">С кастомным таймаутом<a class="headerlink" href="#kwork_api.client.KworkClient.login--_2" title="Permanent link">&para;</a></h5>
<p>client = await KworkClient.login("user", "pass", timeout=60.0)</p>
<h5 id="kwork_api.client.KworkClient.login--_3">Сохранение токена для повторного использования<a class="headerlink" href="#kwork_api.client.KworkClient.login--_3" title="Permanent link">&para;</a></h5>
<p>token = client._token</p>
<h5 id="kwork_api.client.KworkClient.login--client-kworkclienttokentoken">Позже: client = KworkClient(token=token)<a class="headerlink" href="#kwork_api.client.KworkClient.login--client-kworkclienttokentoken" title="Permanent link">&para;</a></h5>
</details>
<details class="security" open>
<summary>Security</summary>
<p>Пароль не сохраняется в клиенте. Только token и cookies.
Рекомендуется сохранять token для повторного использования
вместо хранения пароля.</p>
</details>
<details class="note" open>
<summary>Note</summary>
<p>Токен имеет ограниченное время жизни. При получении 401 ошибки
необходимо выполнить повторный login().</p>
</details>
<details class="mkdocstrings-source">
<summary>Source code in <code>src/kwork_api/client.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">196</span>
<span class="normal">197</span>
<span class="normal">198</span>
<span class="normal">199</span>
<span class="normal">200</span>
<span class="normal">201</span>
<span class="normal">202</span>
<span class="normal">203</span>
<span class="normal">204</span>
<span class="normal">205</span>
<span class="normal">206</span>
<span class="normal">207</span>
<span class="normal">208</span>
<span class="normal">209</span>
<span class="normal">210</span>
<span class="normal">211</span>
<span class="normal">212</span>
<span class="normal">213</span>
<span class="normal">214</span>
<span class="normal">215</span>
<span class="normal">216</span>
<span class="normal">217</span>
<span class="normal">218</span>
<span class="normal">219</span>
<span class="normal">220</span>
<span class="normal">221</span>
<span class="normal">222</span>
<span class="normal">223</span>
<span class="normal">224</span>
<span class="normal">225</span>
<span class="normal">226</span>
<span class="normal">227</span>
<span class="normal">228</span>
<span class="normal">229</span>
<span class="normal">230</span>
<span class="normal">231</span>
<span class="normal">232</span>
<span class="normal">233</span>
<span class="normal">234</span>
<span class="normal">235</span>
<span class="normal">236</span>
<span class="normal">237</span>
<span class="normal">238</span>
<span class="normal">239</span>
<span class="normal">240</span>
<span class="normal">241</span>
<span class="normal">242</span>
<span class="normal">243</span>
<span class="normal">244</span>
<span class="normal">245</span>
<span class="normal">246</span>
<span class="normal">247</span>
<span class="normal">248</span>
<span class="normal">249</span>
<span class="normal">250</span>
<span class="normal">251</span>
<span class="normal">252</span>
<span class="normal">253</span>
<span class="normal">254</span>
<span class="normal">255</span>
<span class="normal">256</span>
<span class="normal">257</span>
<span class="normal">258</span>
<span class="normal">259</span>
<span class="normal">260</span>
<span class="normal">261</span>
<span class="normal">262</span>
<span class="normal">263</span>
<span class="normal">264</span>
<span class="normal">265</span>
<span class="normal">266</span>
<span class="normal">267</span>
<span class="normal">268</span>
<span class="normal">269</span>
<span class="normal">270</span>
<span class="normal">271</span>
<span class="normal">272</span>
<span class="normal">273</span>
<span class="normal">274</span>
<span class="normal">275</span>
<span class="normal">276</span>
<span class="normal">277</span>
<span class="normal">278</span>
<span class="normal">279</span>
<span class="normal">280</span>
<span class="normal">281</span>
<span class="normal">282</span>
<span class="normal">283</span>
<span class="normal">284</span>
<span class="normal">285</span>
<span class="normal">286</span>
<span class="normal">287</span>
<span class="normal">288</span>
<span class="normal">289</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@classmethod</span>
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">login</span><span class="p">(</span>
<span class="bp">cls</span><span class="p">,</span>
<span class="n">username</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">timeout</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">30.0</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;KworkClient&quot;</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Аутентификация по логину и паролю.</span>
<span class="sd"> Выполняет двухэтапный процесс аутентификации Kwork:</span>
<span class="sd"> 1. POST /signIn — проверка учётных данных, получение session cookies</span>
<span class="sd"> 2. POST /getWebAuthToken — обмен cookies на web_auth_token</span>
<span class="sd"> Полученный токен и cookies сохраняются в клиенте для последующих запросов.</span>
<span class="sd"> Args:</span>
<span class="sd"> username: Логин или email аккаунта Kwork.</span>
<span class="sd"> password: Пароль аккаунта Kwork.</span>
<span class="sd"> timeout: Таймаут запросов в секундах. Применяется к каждому этапу.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Полностью аутентифицированный экземпляр KworkClient,</span>
<span class="sd"> готовый к работе с API.</span>
<span class="sd"> Raises:</span>
<span class="sd"> KworkAuthError: Если логин/пароль неверны или токен не получен.</span>
<span class="sd"> KworkNetworkError: Если произошла ошибка сети.</span>
<span class="sd"> Example:</span>
<span class="sd"> # Базовое использование</span>
<span class="sd"> client = await KworkClient.login(&quot;myuser&quot;, &quot;mypassword&quot;)</span>
<span class="sd"> # С кастомным таймаутом</span>
<span class="sd"> client = await KworkClient.login(&quot;user&quot;, &quot;pass&quot;, timeout=60.0)</span>
<span class="sd"> # Сохранение токена для повторного использования</span>
<span class="sd"> token = client._token</span>
<span class="sd"> # Позже: client = KworkClient(token=token)</span>
<span class="sd"> Security:</span>
<span class="sd"> Пароль не сохраняется в клиенте. Только token и cookies.</span>
<span class="sd"> Рекомендуется сохранять token для повторного использования</span>
<span class="sd"> вместо хранения пароля.</span>
<span class="sd"> Note:</span>
<span class="sd"> Токен имеет ограниченное время жизни. При получении 401 ошибки</span>
<span class="sd"> необходимо выполнить повторный login().</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">client</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">_get_httpx_client</span><span class="p">()</span> <span class="k">as</span> <span class="n">http_client</span><span class="p">:</span>
<span class="c1"># Step 1: Login to get session cookies</span>
<span class="n">login_data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;login_or_email&quot;</span><span class="p">:</span> <span class="n">username</span><span class="p">,</span>
<span class="s2">&quot;password&quot;</span><span class="p">:</span> <span class="n">password</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">http_client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">LOGIN_URL</span><span class="p">,</span>
<span class="n">data</span><span class="o">=</span><span class="n">login_data</span><span class="p">,</span>
<span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;Referer&quot;</span><span class="p">:</span> <span class="s2">&quot;https://kwork.ru/&quot;</span><span class="p">},</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">!=</span> <span class="mi">200</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">KworkAuthError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Login failed: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="c1"># Extract cookies</span>
<span class="n">cookies</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">cookies</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;userId&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cookies</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">KworkAuthError</span><span class="p">(</span><span class="s2">&quot;Login failed: no userId in cookies&quot;</span><span class="p">)</span>
<span class="c1"># Step 2: Get web auth token</span>
<span class="n">token_response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">http_client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">TOKEN_URL</span><span class="p">,</span>
<span class="n">json</span><span class="o">=</span><span class="p">{},</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">token_response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">!=</span> <span class="mi">200</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">KworkAuthError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Token request failed: </span><span class="si">{</span><span class="n">token_response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">token_data</span> <span class="o">=</span> <span class="n">token_response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">web_token</span> <span class="o">=</span> <span class="n">token_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;web_auth_token&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">web_token</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">KworkAuthError</span><span class="p">(</span><span class="s2">&quot;No web_auth_token in response&quot;</span><span class="p">)</span>
<span class="c1"># Create new client with token</span>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">token</span><span class="o">=</span><span class="n">web_token</span><span class="p">,</span> <span class="n">cookies</span><span class="o">=</span><span class="n">cookies</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">)</span>
<span class="k">except</span> <span class="n">httpx</span><span class="o">.</span><span class="n">RequestError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">KworkNetworkError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Login request failed: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "search.suggest", "search.highlight"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
</body>
</html>