Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

pykwork

Python License PyPI Downloads

⚠️ Disclaimer: Π­Ρ‚ΠΎ Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с API Kwork. Она Π½Π΅ Π°Ρ„Ρ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π° с ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Kwork ΠΈ Π½Π΅ являСтся ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ SDK. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½Π° свой риск.

Python Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с API Kwork (kwork.ru) с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ async ΠΈ sync Ρ€Π΅ΠΆΠΈΠΌΠΎΠ².

API Documentation: https://api.kwork.ru/ (OpenAPI schema)

API Basic Auth Credentials:

  • Username: mobile_api
  • Password: qFvfRl7w

ДокумСнтация ΠΏΠΎ API endpoints: docs/

Установка

# Π§Π΅Ρ€Π΅Π· PyPI (рСкомСндуСтся)
pip install pykwork

# Или Ρ‡Π΅Ρ€Π΅Π· git+
pip install git+https://github.com/quonaro/pykwork.git

Зависимости

# httpx установится автоматичСски Ρ‡Π΅Ρ€Π΅Π· uv
# Или Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:
pip install httpx>=0.24.0

Быстрый старт

Async (рСкомСндуСтся)

import asyncio
from pykwork import KworkClient

async def main():
    async with KworkClient(username="user@email.com", password="password") as client:
        # Авторизация
        await client.login()
        
        # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅
        actor = await client.get_actor()
        print(f"User: {actor['response']['username']}")
        
        # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²
        projects = await client.get_all_projects(max_pages=2)
        print(f"Projects: {len(projects)}")
        
        # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠ²
        offers = await client.get_all_offers()
        print(f"Offers: {len(offers)}")

asyncio.run(main())

Sync

from pykwork import KworkSyncClient

with KworkSyncClient(username="user@email.com", password="password") as client:
    # Авторизация
    client.login()
    
    # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅
    actor = client.get_actor()
    print(f"User: {actor['response']['username']}")
    
    # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²
    projects = client.get_all_projects(max_pages=2)
    print(f"Projects: {len(projects)}")
    
    # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠ²
    offers = client.get_all_offers()
    print(f"Offers: {len(offers)}")

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Для async ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ await, для sync - Π±Π΅Π· await.

Авторизация

# Async
await client.login()

# Sync
client.login()

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ (UserService)

# Async
actor = await client.get_actor()
user = await client.get_user(user_id=1)
user = await client.get_user_by_username(username="username")
kworks = await client.get_user_kworks(user_id=1, page=1)
categories = await client.get_user_categories(user_id=1)
reviews = await client.get_user_reviews(user_id=1, page=1)
await client.block_dialog(block_user_id=1)
await client.unblock_dialog(block_user_id=1)
last_order = await client.get_users_last_order_info(interlocutor_id=1)
orders = await client.orders_between(user_id=1)

# Sync
actor = client.get_actor()
user = client.get_user(user_id=1)
user = client.get_user_by_username(username="username")
kworks = client.get_user_kworks(user_id=1, page=1)
categories = client.get_user_categories(user_id=1)
reviews = client.get_user_reviews(user_id=1, page=1)
client.block_dialog(block_user_id=1)
client.unblock_dialog(block_user_id=1)
last_order = client.get_users_last_order_info(interlocutor_id=1)
orders = client.orders_between(user_id=1)

Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ (DialogService)

# Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ/Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³
await client.hide_dialog(user_id=1, is_restore=0)

# ΠΡ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ/Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³
await client.archive_dialog(user_id=1)
await client.unarchive_dialog(user_id=1)

# Бписок диалогов
dialogs = await client.get_dialogs(page=1, filter_str="")

# Поиск диалогов
dialogs = await client.search_dialogs(query="test", page=1)

# ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³
dialog = await client.get_dialog(dialog_id=1, with_tracks=0)

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³Π°
allowed = await client.is_dialog_allow(user_id=1)

# Бписок Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²
blocked = await client.blocked_dialog_list()
blocked_dialogs = await client.blocked_dialogs()

# Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅/ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ inbox запроса
await client.allow_inbox_request(inbox_id=1, is_accept=1)
await client.inbox_custom_request_decline(message_id=1)
await client.inbox_payer_decline(message_id=1)
await client.inbox_worker_decline(message_id=1)

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ
await client.typing(recipient_id=1, order_id=1)

# Вопросы Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρ‹
questions = await client.get_quiz_questions()

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹ΠΉ
await client.mark_dialog_read(user_id=1)

# Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ статус Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρ‹
await client.set_quiz_status(status=1)

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΊΠ°ΠΊ ΠΈΠ·Π±Ρ€Π°Π½Π½Ρ‹ΠΉ
await client.set_dialog_starred(user_id=1, is_starred=1)

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹ΠΉ
await client.mark_dialog_unread(user_id=1)

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ (ExchangeService)

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² (с ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ)
projects = await client.get_all_projects(max_pages=5)

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ
it_projects = await client.get_all_projects(categories="11")

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ Ρ†Π΅Π½Π΅
cheap_projects = await client.get_all_projects(price_to=1000)

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ страницы
projects = await client.get_projects(page=1)

# Мои ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ (wants)
wants = await client.get_my_wants(page=1, want_status_id=0)

# Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ
await client.delete_offer(offer_id=1)

# Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
await client.delete_want(want_id=1)

# Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π±ΠΈΡ€ΠΆΠ΅
info = await client.get_exchange_info()

# ΠšΠΎΠ½Π½Π΅ΠΊΡ‚Ρ‹ (сколько ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ/всСго)
connects = await client.get_connects()
print(f"ΠšΠΎΠ½Π½Π΅ΠΊΡ‚Ρ‹: {connects['active_connects']} ΠΈΠ· {connects['all_connects']}")
# {'active_connects': 24, 'all_connects': 30, 'update_time': 1234567890}

# Π˜Π·Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ
fav_cats = await client.get_favorite_categories()

# ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ
offer = await client.get_offer(offer_id=1)

# ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²
count = await client.get_wants_count(categories="11", price_to=1000)

# ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ исполнитСля
worker_projects = await client.get_worker_projects(categories="11", page=1)

# ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
await client.restart_want(want_id=1)

# Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠ΅
await client.set_favorite(categories="11", attributes="")

# ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
await client.stop_want(want_id=1)

# Бтатусы ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²
statuses = await client.get_wants_status_list()

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ (CatalogService)

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ
categories = await client.get_categories()

# Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°
filters = await client.get_catalog_filters(category_id=1, query="test")

# ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (v1)
main_data = await client.get_main_data()

# ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (v2)
main_data_v2 = await client.get_main_data_v2()

# ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ основныС Π΄Π°Π½Π½Ρ‹Π΅
catalog_main = await client.catalog_main()
catalog_main_v2 = await client.catalog_main_v2()

# Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
rubrics = await client.get_rubrics()
catalog_rubrics = await client.catalog_rubrics()

# ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ€ΡƒΠ±Ρ€ΠΈΠΊΠΈ
catalog_categories = await client.catalog_categories(rubric_id=1)

# Π―Π·Ρ‹ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°
languages = await client.translation_languages()

# Атрибуты ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ
attributes = await client.category_attributes(category_id=1)

# ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π·Ρ‹Π²ΠΎΠ²
count = await client.positive_reviews_count(category_id=1)

# Π“ΠΎΡ€ΠΎΠ΄Π° ΠΈ страны
cities = await client.cities()
countries = await client.countries()

# URL модальной компании
url = await client.payer_company_modal_url()

# Π˜Π·Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΊΠ²ΠΎΡ€ΠΊΠΈ
fav_kworks = await client.get_favorite_kworks()

# Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΊΠ²ΠΎΡ€ΠΊΠΈ
hidden_kworks = await client.get_hidden_kworks()

# ΠžΠ±Ρ‰ΠΈΠ΅ ΠΊΠ²ΠΎΡ€ΠΊΠΈ
general_kworks = await client.get_general_kworks()

# ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΊΠ²ΠΎΡ€ΠΊΠΈ
viewed_kworks = await client.get_viewed_kworks()

# Поиск ΠΊΠ²ΠΎΡ€ΠΊΠΎΠ²
kworks = await client.search_kworks(query="python")

# Поиск ΠΊΠ²ΠΎΡ€ΠΊΠΎΠ² для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
kworks = await client.search_kworks_for_user(query="python")

ΠžΡ‚ΠΊΠ»ΠΈΠΊΠΈ

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ всСх ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠ² (с ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ)
offers = await client.get_all_offers()

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ страницы
offers = await client.get_offers(page=1)

ΠšΠ²ΠΎΡ€ΠΊΠΈ (KworkDetailsService)

# Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΆΠ°Π»ΠΎΠ±Ρƒ Π½Π° ΠΊΠ²ΠΎΡ€ΠΊ
await client.create_kwork_complain(kwork_id=1, category_id=1, text="text")

# ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΆΠ°Π»ΠΎΠ±
categories = await client.get_complain_categories()

# FAQ ΠΊΠ²ΠΎΡ€ΠΊΠ°
answers = await client.get_kwork_answers(kwork_id=1)

# Π”Π΅Ρ‚Π°Π»ΠΈ ΠΊΠ²ΠΎΡ€ΠΊΠ°
details = await client.get_kwork_details(kwork_id=1)

# Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΊΠ²ΠΎΡ€ΠΊΠ°
details_extra = await client.get_kwork_details_extra(kwork_id=1)

# Π’Π°Π±Π»ΠΈΡ†Π° ссылок ΠΊΠ²ΠΎΡ€ΠΊΠ°
links = await client.get_kwork_links_table(kwork_id=1)

# ΠŸΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ ΠΊΠ²ΠΎΡ€ΠΊΠ°
portfolios = await client.get_kwork_portfolios(kwork_id=1)

# ΠžΡ‚Π·Ρ‹Π²Ρ‹ ΠΊΠ²ΠΎΡ€ΠΊΠ°
reviews = await client.get_kwork_reviews(kwork_id=1)

# Π—Π°ΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ²ΠΎΡ€ΠΊ
await client.order_kwork(kwork_id=1, kworks_count=1, volume=10.0)

# ΠŸΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ баланс
await client.recharge_balance(order_id=1, payment_id=1, amount=1000, payment_type="card", country_group_code="RU")

ΠšΠ²ΠΎΡ€ΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (KworksService)

# Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ²ΠΎΡ€ΠΊ
await client.delete_kwork(kwork_id=1)

# Бтатусы ΠΊΠ²ΠΎΡ€ΠΊΠΎΠ²
statuses = await client.get_kworks_status_list()

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ²ΠΎΡ€ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·Π±Ρ€Π°Π½Π½Ρ‹ΠΉ
await client.mark_kwork_as_favorite(kwork_id=1, is_favorite=True)

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ²ΠΎΡ€ΠΊ ΠΊΠ°ΠΊ скрытый
await client.mark_kwork_as_hidden(kwork_id=1, is_hidden=True)

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ²ΠΎΡ€ΠΊ для Black Friday
await client.mark_kworks_black_friday(kwork_id=1)

# ΠŸΠ°ΡƒΠ·Π° ΠΊΠ²ΠΎΡ€ΠΊΠ°
await client.pause_kwork(kwork_id=1)

# Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅
await client.set_available_at_weekends(is_available=True)

# Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ²ΠΎΡ€ΠΊ
await client.start_kwork(kwork_id=1)

Inbox (InboxService)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ inbox Ρ‚Ρ€Π΅ΠΊΠΈ
tracks = await client.get_inbox_tracks(username="test", page=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ inbox сообщСния
inboxes = await client.inboxes(username="test", page="1")

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сообщСниС Ρ‚Ρ€Π΅ΠΊΠ° ΠΏΠΎ conversation ID
track = await client.inbox_track_message(conversation_id=1)

# ΠŸΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° сообщСниС
await client.inbox_complain_message(message_id=1, complain_category_id=1, comment="text")

# Π£Π΄Π°Π»ΠΈΡ‚ΡŒ inbox
await client.inbox_delete(id=1, with_tracks=0)

# Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ inbox
await client.inbox_edit(id=1, text="text", uploaded_files={}, reply_message_id=1)

# ΠŸΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ inbox
await client.inbox_forward(user_id=1, message_ids=[1, 2])

# Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ inbox сообщСниС
await client.inbox_create(user_id=1, text="text", uuid="uuid", order_id=1, uploaded_files=[1, 2])

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ inbox сообщСниС ΠΏΠΎ ID
message = await client.inbox_message(message_id=1)

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ inbox Ρ‚Ρ€Π΅ΠΊΠΈ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅
await client.mark_inbox_tracks_as_read(user_id=1, conversation_ids=[1, 2, 3])

# Поиск inbox
inboxes = await client.search_inboxes(query="test", user_id=1, page=1)

# Поиск сообщСний
messages = await client.search_messages(text="text", user_id=1, page=1)

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ inbox ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹ΠΉ
await client.inbox_read(user_id=1, messages=[1, 2])

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ статус ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
await client.send_user_status(user_id=1, status="online", order_id=1)

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ голосовоС сообщСниС ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠ°Π½Π½ΠΎΠ΅
await client.mark_voice_message_heard(conversation_id=1)

# ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΈΠΊ Ρ‡Π°Ρ‚Π°
await client.update_chat_draft_message(user_id=1, message="text", files=[1, 2])

Π’Ρ€Π΅ΠΊΠΈ (TrackService)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅ΠΊΠΈ
tracks = await client.get_tracks(order_id=1, track_id=1, limit=10)

# Вранскрипция голосового сообщСния
transcription = await client.get_voice_message_transcription(conversation_id=1)

# Поиск Ρ‚Ρ€Π΅ΠΊΠΎΠ² Π·Π°ΠΊΠ°Π·Π°
tracks = await client.search_order_tracks(text="query", order_id=1, page=1)

# Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΠΊ
await client.create_track(
    user_id=1,
    message_key="key",
    text="text",
    order_id=1,
    uploaded_files=[],
    reply_message_id=1,
    with_tracks=0
)

# Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅ΠΊ
await client.delete_track(track_id=1)

# Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΠΊ
await client.edit_track(track_id=1, text="text", quote_id=1, uploaded_files=[])

УвСдомлСния (NotificationService)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ увСдомлСния
notifications = await client.get_notifications()

# ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ увСдомлСния ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅
await client.notifications_received(ids=[1, 2, 3])

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ push события
events = await client.notifications_fetch(page=1, uad="test")

# Π’Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ push событиС
await client.validate_event(id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ in-app ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅
notification = await client.get_in_app_notification(uad="test", os_type="ios", os_version="15.0", app_version="2.0")

# Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ in-app ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅
await client.push_in_app_notification_log(notification_id=1, action=1)

Π€Π°ΠΉΠ»Ρ‹ (FileService)

# Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»
await client.file_upload(file_data)

# Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ голосовой Ρ„Π°ΠΉΠ»
await client.voice_upload(file_data)

# Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»
await client.file_delete(file_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅
file = await client.uploaded_file(path="/path/to/file")

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Ρƒ Ρ„Π°ΠΉΠ»Π°
miniature = await client.miniature(path="/path/to/file")

Π—Π°ΠΊΠ°Π·Ρ‹ (OrderService)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°ΠΊΠ°Π·
order = await client.get_order(order_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°ΠΊΠ°Π·Π°
files = await client.get_order_files(order_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π·Π°ΠΊΠ°Π·Π°
header = await client.get_order_header(order_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Π·Π°ΠΊΠ°Π·Π°
details = await client.get_order_details(order_id=1)

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ
await client.send_order_for_approval(order_id=1)

# ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ Π·Π°ΠΊΠ°Π·
await client.approve_order(order_id=1, portfolio=1)

# ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ этап
await client.approve_order_stage(order_id=1)

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΡƒ
await client.send_order_for_revision(order_id=1, revision="text")

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ бонус
await client.send_bonus(order_id=1, bonus=100, comment="good work")

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° Π°Ρ€Π±ΠΈΡ‚Ρ€Π°ΠΆ
await client.send_order_for_arbitration(order_id=1, reason_id=1, comments="text")

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π°Ρ€Π±ΠΈΡ‚Ρ€Π°ΠΆΠ°
reasons = await client.get_arbitration_reasons(order_id=1)

# ΠžΡ†Π΅Π½ΠΈΡ‚ΡŒ Π°Ρ€Π±ΠΈΡ‚Ρ€Π°ΠΆ
await client.rate_arbitration(id=1, rating=5)

# ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠΏΠ»Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ Π·Π°ΠΊΠ°Π·
await client.cancel_order_awaiting_payment(order_id=1)

# ΠžΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠΏΠ»Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ Π·Π°ΠΊΠ°Π·
await client.pay_order_awaiting_payment(order_id=1)

# Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π² ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ
await client.allow_order_portfolio_upload(order_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСдоставлСнныС Π΄Π°Π½Π½Ρ‹Π΅
data = await client.get_order_provided_data(order_id=1)

# ΠžΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Π°
await client.set_order_rating(order_id=1, speed=5, quality=5, communication=5)

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ссылку Π½Π° Ρ‡Π΅ΠΊ
await client.send_order_receipt_link_for_verification(receipt_id=1, receipt_link="https://...")

# Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒ
await client.save_order_note(order_id=1, note="note text")

# Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒ
await client.delete_order_note(order_id=1)

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ трСбования
await client.send_order_requirements(order_id=1, requirements="text")

# ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ
await client.offer_order_options(order_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступныС ΠΎΠΏΡ†ΠΈΠΈ
extras = await client.get_extras_available_for_order(order_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ
ordered = await client.get_ordered_extras(order_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСсСты кастомных ΠΎΠΏΡ†ΠΈΠΉ
presets = await client.get_custom_options_presets(order_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹
reasons = await client.get_order_cancellation_reasons(order_id=1)

# ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π·Π°ΠΊΠ°Π·
await client.repeat_order(order_id=1)

ΠŸΠ»Π°Ρ‚Π΅ΠΆΠΈ (PaymentService)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΠ»Π°Ρ‚Ρ‹
methods = await client.get_payment_methods()

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ URL для пополнСния
url = await client.get_bill_refill_url(amount=1000, payment_type="card")

ΠžΡ‚Π·Ρ‹Π²Ρ‹ (ReviewService)

# Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΎΡ‚Π·Ρ‹Π²
await client.create_answer(review_id=1, text="response text")

# Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚
await client.edit_answer(answer_id=1, text="updated text")

ГолосовыС сообщСния (VoiceService)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½ΡΠΊΡ€ΠΈΠΏΡ†ΠΈΡŽ
transcription = await client.get_voice_message_transcription(conversation_id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ статус ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ
status = await client.get_voice_message_convert_status(file_id=1)

# Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ воспроизвСдСния
await client.set_voice_message_speed(conversation_id=1, speed=1.5)

# Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ статус получСния
await client.set_voice_message_receiving(conversation_id=1, is_receiving=1)

Π­Ρ‚Π°ΠΏΡ‹ Π·Π°ΠΊΠ°Π·Π° (StageService)

# Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ этап
await client.create_stage(order_id=1, extend_time=1, stages={})

# Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ этап
await client.add_stage(order_id=1, extend_time=1, stages={})

# Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этап
await client.order_stage(order_id=1, stage_id=1)

# Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этап
await client.edit_stage(order_id=1, extend_time=1, stages={})

# ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ прогрСсс этапа
await client.update_stage_progress(order_id=1, stages={}, comment="text")

ΠžΡ‚ΠΊΠ»ΠΈΠΊΠΈ (OfferService)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ
offer = await client.get_offer(id=1)

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠ²
offers = await client.get_offers(page=1)

# Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ
await client.delete_offer(id=1)

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

pykwork/
β”œβ”€β”€ pyproject.toml          # ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
β”œβ”€β”€ LICENSE                 # ЛицСнзия (MIT)
β”œβ”€β”€ README.md               # ДокумСнтация
β”œβ”€β”€ example_async.py        # ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования
β”œβ”€β”€ example_sync.py         # ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования (sync)
└── pykwork/
    β”œβ”€β”€ __init__.py         # Экспорт классов
    β”œβ”€β”€ client.py           # Основной async ΠΊΠ»ΠΈΠ΅Π½Ρ‚
    β”œβ”€β”€ sync_client.py      # Основной sync ΠΊΠ»ΠΈΠ΅Π½Ρ‚
    β”œβ”€β”€ exceptions.py       # Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
    β”œβ”€β”€ logger.py           # Настройка логирования
    └── services/           # БСрвисы ΠΏΠΎ катСгориям
        β”œβ”€β”€ __init__.py
        β”œβ”€β”€ user.py         # UserService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ dialog.py       # DialogService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ exchange.py     # ExchangeService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ catalog.py      # CatalogService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ kwork.py        # KworkDetailsService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ kworks.py       # KworksService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ inbox.py        # InboxService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ track.py        # TrackService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ notification.py # NotificationService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ file.py         # FileService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ order.py        # OrderService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ payment.py      # PaymentService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ review.py       # ReviewService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ voice.py        # VoiceService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        β”œβ”€β”€ stage.py        # StageService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
        └── offer.py        # OfferService ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

  • KworkAuthError - Ошибка Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ
  • KworkRequestError - Ошибка запроса API

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок

import asyncio
from pykwork import KworkClient, KworkAuthError, KworkRequestError

async def main():
    async with KworkClient(username="user@email.com", password="password") as client:
        try:
            await client.login()
            projects = await client.get_all_projects()
        except KworkAuthError as e:
            print(f"Auth failed: {e}")
        except KworkRequestError as e:
            print(f"Request failed: {e}")
            print(f"Status code: {e.status_code}")

asyncio.run(main())

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

client = KworkClient(
    username="user@email.com",
    password="password",
    uad="unique_device_id",  # Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ID устройства
    device="device_model",    # МодСль устройства
    timeout=10,                # Π’Π°ΠΉΠΌΠ°ΡƒΡ‚ запросов (сСкунды)
    log_level=30               # Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ логирования (WARNING ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)
)

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

ID НазваниС
15 Π”ΠΈΠ·Π°ΠΉΠ½
11 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ IT
5 ВСксты ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹
17 SEO ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ
45 БоцсСти ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³
7 Аудио, Π²ΠΈΠ΄Π΅ΠΎ, съСмка
83 БизнСс ΠΈ Тизнь

Запуск ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°

cd /srv/projects/my/pykwork

# Async ΠΏΡ€ΠΈΠΌΠ΅Ρ€
uv run python example_async.py

# Sync ΠΏΡ€ΠΈΠΌΠ΅Ρ€
uv run python example_sync.py

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ logging с ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ WARNING ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Для измСнСния уровня:

import logging
from pykwork import KworkClient

# Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ DEBUG
client = KworkClient(
    username="user@email.com",
    password="password",
    log_level=logging.DEBUG
)

ЛицСнзия

MIT License

About

πŸš€ pykwork β€” Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Python-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для API Kwork.ru с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ async ΠΈ sync. Π Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°ΠΌΠΈ, Π΄ΠΈΠ°Π»ΠΎΠ³Π°ΠΌΠΈ, ΠΊΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages