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
2.3 KiB
2.3 KiB
Kwork API — Python Client
Unofficial Python client for Kwork.ru API.
Installation
pip install kwork-api
Or with UV:
uv add kwork-api
Quick Start
Login with credentials
from kwork_api import KworkClient
# Authenticate
client = await KworkClient.login("username", "password")
# Get catalog
catalog = await client.catalog.get_list(page=1)
# Get projects
projects = await client.projects.get_list(page=1)
# Close when done
await client.close()
Using context manager
async with await KworkClient.login("username", "password") as client:
catalog = await client.catalog.get_list(page=1)
# Client automatically closes
Save and restore session
# Save credentials after login
client = await KworkClient.login("username", "password")
# Option 1: Save token only
token = client.token
# Option 2: Save full credentials (token + cookies)
creds = client.credentials
import json
with open("session.json", "w") as f:
json.dump(creds, f)
# Later, restore session
client = KworkClient(token=token)
# or
client = KworkClient(**creds)
user_info = await client.user.get_info()
API Overview
Catalog API
client.catalog.get_list()— Get kworks catalogclient.catalog.get_details(kwork_id)— Get kwork details
Projects API
client.projects.get_list()— Get freelance projectsclient.projects.get_payer_orders()— Your orders as customerclient.projects.get_worker_orders()— Your orders as performer
User API
client.user.get_info()— Get user profileclient.user.get_reviews()— Get user reviewsclient.user.get_favorite_kworks()— Get favorite kworks
Settings & Preferences
client.get_wants()— User preferencesclient.get_kworks_status()— Kworks statusclient.update_settings()— Update settingsclient.go_offline()— Set offline status
See API Reference for full documentation.
Error Handling
from kwork_api import KworkError, KworkAuthError, KworkApiError
try:
await client.catalog.get_list()
except KworkAuthError:
print("Invalid credentials")
except KworkApiError as e:
print(f"API error: {e.status_code}")
except KworkError as e:
print(f"General error: {e.message}")