A high-performance and type-safe Python library for seamless interaction with the Codeforces API. Supports both asynchronous and synchronous client handlers, enabling developers to choose the best approach for their needs.
Project description
codeforcespy
A fast, type-safe Python wrapper for the Codeforces API with sync and async support.
Features
- Sync & Async - Full support for both blocking and non-blocking clients
- Type Safe - 100% typed, no
Any, passes strict pyright - Fast - Built on
httpxandmsgspecfor high performance - Complete - Covers all public Codeforces API endpoints
Installation
pip install codeforcespy
Quick Start
Async Client (Recommended)
import asyncio
import codeforcespy.processors
async def main():
client = codeforcespy.processors.AsyncMethod()
try:
# Get user info
users = await client.get_user(handles="tourist")
print(f"{users[0].handle}: {users[0].rating}")
# Get recent contests
contests = await client.get_contest_list()
print(f"Found {len(contests)} contests")
finally:
await client.close()
asyncio.run(main())
Sync Client
import codeforcespy.processors
client = codeforcespy.processors.SyncMethod()
try:
users = client.get_user(handles="tourist")
print(f"{users[0].handle}: {users[0].rating}")
finally:
client.close()
API Methods
User
| Method | Description |
|---|---|
get_user(handles) |
Get user profile(s) by handle |
get_user_rating(handle) |
Get rating history |
get_user_status(handle, count) |
Get recent submissions |
get_user_friends(only_online) |
Get friends list (auth required) |
get_user_blog_entries(handle) |
Get user's blog posts |
get_user_rated_list(...) |
Get rated users list |
Contest
| Method | Description |
|---|---|
get_contest_list(of_gym) |
List all contests |
get_contest_standings(...) |
Get contest standings |
get_contest_status(contest_id) |
Get contest submissions |
get_contest_hacks(contest_id) |
Get contest hacks |
get_contest_rating_changes(contest_id) |
Get rating changes |
Problemset
| Method | Description |
|---|---|
get_problemset_problems(tags) |
Get problems by tags |
get_problemset_recent_status(count) |
Get recent submissions |
Blog & Recent
| Method | Description |
|---|---|
get_blog_entry_view(blog_entry_id) |
Get blog post |
get_blog_entry_comments(blog_entry_id) |
Get blog comments |
get_recent_actions(max_count) |
Get recent platform activity |
Authentication
For authenticated endpoints (friends, private data):
client = codeforcespy.processors.AsyncMethod(
enable_auth=True,
auth_key="YOUR_API_KEY",
secret="YOUR_API_SECRET",
)
Get your API key at codeforces.com/settings/api.
Error Handling
import codeforcespy.errors
import codeforcespy.processors
client = codeforcespy.processors.SyncMethod()
try:
users = client.get_user(handles="nonexistent_user_12345")
except codeforcespy.errors.APIError as e:
print(f"API error: {e.message}")
except codeforcespy.errors.CodeforcesPyError as e:
print(f"Library error: {e.message}")
Examples
See the examples/ directory for complete working examples:
sync_example.py- Synchronous client usageasync_example.py- Asynchronous client with concurrent requests
License
GPL-3.0 License - see LICENSE for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file codeforcespy-1.2.0.tar.gz.
File metadata
- Download URL: codeforcespy-1.2.0.tar.gz
- Upload date:
- Size: 34.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66bb70767527a79c09f62f5cd09fe66f38fccebd7d41e09edb476e9c147814ab
|
|
| MD5 |
a63a4c59619b89e5c1a3a19a803dbe63
|
|
| BLAKE2b-256 |
7c29c2ea2bc284331559b1efad96c7735aaa39458c12987df04a696f367a33bf
|
File details
Details for the file codeforcespy-1.2.0-py3-none-any.whl.
File metadata
- Download URL: codeforcespy-1.2.0-py3-none-any.whl
- Upload date:
- Size: 39.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d7e5ce20dac63745dc7193ea67a4f42d8f0c6ed4967694aed096b0ade2cebd1
|
|
| MD5 |
dcb16a54160b2fc307b9f5919994ae23
|
|
| BLAKE2b-256 |
ed731400507cbb69584b9ee23aafa7c07eefd14dd9cb574cf6d0415c4fb3d8fe
|