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.2.0.tar.gz (7.2 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.2.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: judge0_client-0.2.0.tar.gz
  • Upload date:
  • Size: 7.2 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.2.0.tar.gz
Algorithm Hash digest
SHA256 b9c7c954d34e7fe97d9806301fcbd7dd4438cba525b603037cd5073af29abb20
MD5 67e0a58da48d66a61b1167f160a8f0a3
BLAKE2b-256 3257e0a0cdd20fd0c8261ec69ecb2082a85b0d80fcffb6f9e18b71fe9077ea0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for judge0_client-0.2.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.2.0-py3-none-any.whl.

File metadata

  • Download URL: judge0_client-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 46cef321312ef713af73fd8252e970c6da136e38cefaa983cac89acdc75c047c
MD5 67501559033fe03e915003fff2082876
BLAKE2b-256 b27d4d3a2092264cf9e5b3083e44f693572db4b439e1d5faadfcb8dccae94e26

See more details on using hashes here.

Provenance

The following attestation bundles were made for judge0_client-0.2.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