Skip to main content

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

PyPI Python 3.13+ License: GPL-3.0 Type Safe

A fast, type-safe Python wrapper for the Codeforces API with sync and async support.

codeforcespy

Features

  • Sync & Async - Full support for both blocking and non-blocking clients
  • Type Safe - 100% typed, no Any, passes strict pyright
  • Fast - Built on httpx and msgspec for 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 usage
  • async_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

codeforcespy-1.2.0.tar.gz (34.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

codeforcespy-1.2.0-py3-none-any.whl (39.3 kB view details)

Uploaded Python 3

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

Hashes for codeforcespy-1.2.0.tar.gz
Algorithm Hash digest
SHA256 66bb70767527a79c09f62f5cd09fe66f38fccebd7d41e09edb476e9c147814ab
MD5 a63a4c59619b89e5c1a3a19a803dbe63
BLAKE2b-256 7c29c2ea2bc284331559b1efad96c7735aaa39458c12987df04a696f367a33bf

See more details on using hashes here.

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

Hashes for codeforcespy-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1d7e5ce20dac63745dc7193ea67a4f42d8f0c6ed4967694aed096b0ade2cebd1
MD5 dcb16a54160b2fc307b9f5919994ae23
BLAKE2b-256 ed731400507cbb69584b9ee23aafa7c07eefd14dd9cb574cf6d0415c4fb3d8fe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page