Skip to main content

Simple Judge0 client for Python

Project description

Judge0 Client

PyPI Python CI Docs License: MIT

Asynchronous Python client for the Judge0 API. Built on top of httpx with Pydantic models for requests and responses.

This library helps you submit code to a Judge0 instance and retrieve execution results with clear, typed models and convenient error handling.

Highlights

  • Async, httpx-based client
  • Pydantic models for request/response validation
  • Single-file and multi-file submissions
  • Fully automated Base64 handling for text fields and additional files
  • Token-based auth header support

Requirements

  • Python 3.10+
  • A running Judge0 instance (public or self-hosted)

Installation

From PyPI:

pip install judge0-client

or

uv add judge0-client

Quick Start (async)

import asyncio
from judge0_client import Judge0Client, SingleFileSubmission


async def main() -> None:
    # On many instances, language_id=71 corresponds to Python 3
    req = SingleFileSubmission(
        language_id=71,
        source_code='print("Hello, Judge0!")',
    )

    async with Judge0Client(base_url="https://YOUR_JUDGE0_URL.com") as client:
        # 1) Create submission — returns token
        created = await client.create_submission(req)

        # 2) Poll result by token
        detail = await client.get_submission(created.token)
        print("STATUS:", detail.status.description)
        print("STDOUT:", detail.stdout)


if __name__ == "__main__":
    asyncio.run(main())

Documentation

Usage

Client parameters

Judge0Client(
    base_url: str,                        # Base URL of your Judge0 instance (no trailing slash)
    timeout: float | httpx.Timeout = 10.0,
    auth_header: str = "X-Auth-Token",   # Custom auth header name if needed
    auth_token: str | SecretStr | None = None,  # Token value passed in the auth header
)

Notes:

  • The client sets Accept: application/json and Content-Type: application/json headers.
  • If auth_token is provided, it will be sent as {auth_header}: <token>.

Single-file submissions

from judge0_client import SingleFileSubmission

req = SingleFileSubmission(
    language_id=71,
    source_code="print('sum =', int(input()) + 2)",
    stdin="40\n",
)
# Then use it with the client as shown in the Quick Start.

You can attach additional files that will be zipped and Base64-encoded automatically:

from judge0_client import SingleFileSubmission

req = SingleFileSubmission(
    language_id=71,
    source_code="import helper; print(helper.answer())",
    additional_files={
        "helper.py": "def answer():\n    return 42\n",
    },
)

Multi-file submissions

Use MultiFileSubmission (language id=89 on Judge0 for multi-file/script-based runs). You must provide a run script in additional_files.

from judge0_client import MultiFileSubmission

req = MultiFileSubmission(
    # language_id is fixed to 89 in this model
    additional_files={
        # Required run script
        "run": "python main.py\n",
        # Your sources
        "main.py": "print('Hello from multi-file!')\n",
    },
)
# Then use it with the client as shown in the Quick Start.

Error handling

Network or HTTP errors raise Judge0Error with helpful context:

import asyncio
from judge0_client import Judge0Client, SingleFileSubmission, Judge0Error


async def main() -> None:
    try:
        async with Judge0Client(base_url="https://judge0.ce.pdn.ac.lk") as client:
            req = SingleFileSubmission(language_id=71, source_code="print('hi')")
            created = await client.create_submission(req)
            detail = await client.get_submission(created.token)
            print(detail.stdout)
    except Judge0Error as e:
        # Inspect message, status code, and response body (if any)
        print("Submission failed:", e)


if __name__ == "__main__":
    asyncio.run(main())

Tips

  • Language IDs differ across Judge0 instances. Check your instance’s languages endpoint to confirm IDs.
  • The client and models automatically handle Base64 encoding for text fields (source_code, stdin, expected_output) and additional files when required by Judge0.

Contributing

Contributions are welcome! Feel free to open an issue or a pull request.

License

MIT License — see LICENSE.

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

judge0_client-0.1.0.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

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

judge0_client-0.1.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file judge0_client-0.1.0.tar.gz.

File metadata

  • Download URL: judge0_client-0.1.0.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for judge0_client-0.1.0.tar.gz
Algorithm Hash digest
SHA256 448344c968776c82f1db56a529edb3a1f6fdb71e41a1e9ba474ba178079702ea
MD5 21f232cc155e5b626fe576736ba50f91
BLAKE2b-256 1317dd9a6a1547a8f2096cdb6e80db8e524a7f035d626c757028d09f4292b5e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for judge0_client-0.1.0.tar.gz:

Publisher: build_and_release.yml on Roslovets-Inc/judge0-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file judge0_client-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: judge0_client-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for judge0_client-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dda7d8b5649bc0d09743783db673e1afd1bc0ee72b23bc7736fb1987eeccde27
MD5 b6946fb7eae662878ae388eb3ae0cc96
BLAKE2b-256 8fee2fc296c764a8569517df4b0c6c9e14d354d893f4086669ad19db627a7ce0

See more details on using hashes here.

Provenance

The following attestation bundles were made for judge0_client-0.1.0-py3-none-any.whl:

Publisher: build_and_release.yml on Roslovets-Inc/judge0-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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