Skip to main content

CLI client for judge.nitro-ai.org

Project description

Nitro CLI

CLI client for judge.nitro-ai.org.

Features

  • login using Nitro's JSON API
  • list contests with page controls
  • list tasks for a contest
  • view full task statements
  • download task data files
  • launch a past contest locally with Docker
  • submit solutions and wait for feedback
  • list submissions
  • inspect submission feedback/details
  • interactive shell mode when run without arguments

Requirements

  • Python 3.10+
  • no third-party Python package dependencies

Login

nitro-cli login posts to Nitro's /api/auth/login endpoint and stores the returned access and refresh tokens.

Behavior:

  1. saves API tokens in the local CLI state file
  2. refreshes an expired access token when a refresh token is available
  3. asks you to log in again if the saved refresh token is no longer valid

Example:

nitro-cli login --username MihneaStoica --password '...'

Installation

With pipx:

pipx install .

With pip:

python3 -m pip install .

For local development:

python3 -m pip install -e .

From PyPI:

pipx install nitro-ai-judge-cli

Usage

Direct commands:

nitro-cli login
nitro-cli contests
nitro-cli --api-url http://127.0.0.1:8080 contests
nitro-cli contests --page 2
nitro-cli contests --all-pages
nitro-cli tasks algolymp/algolymp-preojia-ix-x
nitro-cli task algolymp/algolymp-preojia-ix-x 1
nitro-cli download-data algolymp/algolymp-preojia-ix-x 1 --out-dir data
nitro-cli download-data algolymp/algolymp-preojia-ix-x 1 --category statement --output TASK.md
nitro-cli download-data algolymp/algolymp-preojia-ix-x 1 --category test_data --output test_data.zip
nitro-cli play algolymp/algolymp-preojia-ix-x
nitro-cli play algolymp/algolymp-preojia-ix-x --gpu --port 8890
nitro-cli play logs algolymp/algolymp-preojia-ix-x
nitro-cli play down algolymp/algolymp-preojia-ix-x
nitro-cli submissions algolymp/algolymp-preojia-ix-x 1 --mode both
nitro-cli submission 3a009d767bd5 --org algolymp --comp algolymp-preojia-ix-x --task-id 1
nitro-cli submit algolymp/algolymp-preojia-ix-x 1 --output submission.csv --source solution.py --wait

Custom backend:

NITRO_API_BASE_URL=http://127.0.0.1:8080 nitro-cli tasks algolymp/algolymp-preojia-ix-x
nitro-cli --api-url http://127.0.0.1:8080 tasks algolymp/algolymp-preojia-ix-x

Contestant Cloud submission proxy:

nitro-cli --api-url http://127.0.0.1:8080 --submission-proxy tasks algolymp/algolymp-preojia-ix-x
nitro-cli --api-url http://127.0.0.1:8080 --submission-proxy submit algolymp/algolymp-preojia-ix-x 1 --output submission.csv --source solution.py

--submission-proxy sends notebook file paths to the proxy so the Jupyter server can fetch, prejudge, and forward the files.

Past-contest play:

nitro-cli play algolymp/algolymp-preojia-ix-x
nitro-cli play down algolymp/algolymp-preojia-ix-x
nitro-cli play logs algolymp/algolymp-preojia-ix-x

play requires Docker and docker compose. It stores generated Compose files under ~/.nitro-cli/contestant-cloud/<org>-<comp>/, creates the external nitro_net Docker network, and starts the contest notebook plus submission proxy.

Interactive shell:

nitro-cli
nitro-cli --api-url http://127.0.0.1:8080 --submission-proxy

Example shell session:

contest list
contest list --page 2
contest list --all-pages
select 20
tasks
select 1
show
task download-data --out-dir data
submit submission.csv solution.py --wait
submissions
submission 1

Shell commands:

help
exit | quit
back | unselect
login [username] [password]
status
contests
contest list [--all] [--page N] [--page-size N] [--all-pages]
contest select <index|org/slug>
contest show
tasks
task list
task select <index|id>
select <index|id>
show
task download-data [--category CATEGORY ...] [--out-dir DIR] [--force]
submit <output.csv> [source.py] [--note TEXT] [--wait]
task show
task submit <output.csv> [source.py] [--note TEXT] [--wait]
submissions [--mode partial|complete|both]
task submissions list [--mode partial|complete|both]
submission <index|short-id|full-id>
submission view <index|short-id|full-id>
task submissions show <index|short-id|full-id>
set-final <index|short-id|full-id>
unset-final <index|short-id|full-id>

Notes:

  • select is context-sensitive: at top level it selects a contest; inside a contest it selects a task.
  • back / unselect clears the current task first, then the current contest.

State

Login state is stored in:

~/.nitro-cli/state.json

Override with:

NITRO_STATE_DIR=/some/path nitro-cli login

Publishing

This repo includes a GitHub Actions workflow at .github/workflows/publish.yml.

Behavior:

  1. Builds the package on pushes, pull requests, and manual runs
  2. Runs twine check on built distributions
  3. Publishes to PyPI when you push a tag matching v*

Recommended release flow:

python3 -m pip install --upgrade build twine
python3 -m build
python3 -m twine check dist/*
# bump version in pyproject.toml before tagging a new release
git tag v0.1.3
git push origin main --tags

PyPI does not allow re-uploading the same filename for an existing release. The workflow is configured to skip already-published files on reruns, but publishing a new release still requires a new version in pyproject.toml and a matching new tag.

For PyPI trusted publishing, configure PyPI to trust this GitHub repository and the pypi environment.

Package name on PyPI: nitro-ai-judge-cli Command name after install: nitro-cli

Before publishing publicly, choose and add a license file.

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

nitro_ai_judge_cli-1.4.0.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

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

nitro_ai_judge_cli-1.4.0-py3-none-any.whl (22.4 kB view details)

Uploaded Python 3

File details

Details for the file nitro_ai_judge_cli-1.4.0.tar.gz.

File metadata

  • Download URL: nitro_ai_judge_cli-1.4.0.tar.gz
  • Upload date:
  • Size: 22.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nitro_ai_judge_cli-1.4.0.tar.gz
Algorithm Hash digest
SHA256 87da95a97968e4bba9dc38da6f41d6afb6302ec4b8bd50234ba430dca71d2fda
MD5 12297b10a3ecf29fb15d3d02e706b3f4
BLAKE2b-256 0c3de6609b63a639fccf866c3ae4b6c8f2a676c595a13269ddbab2282b26e126

See more details on using hashes here.

Provenance

The following attestation bundles were made for nitro_ai_judge_cli-1.4.0.tar.gz:

Publisher: publish.yml on MihneaTeodorStoica/nitro-cli

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

File details

Details for the file nitro_ai_judge_cli-1.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nitro_ai_judge_cli-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9db7c13e6dbe8445ab841c3712215d0bfa21adef81c3ca0d4b83f649733b8828
MD5 c64e505b06c3c2ba7bbebad4b76e238c
BLAKE2b-256 b09d3002f6d82a1ac01a8552181525247f8b4d7bbc6efe433948b17c7e11c24e

See more details on using hashes here.

Provenance

The following attestation bundles were made for nitro_ai_judge_cli-1.4.0-py3-none-any.whl:

Publisher: publish.yml on MihneaTeodorStoica/nitro-cli

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