Metadata-Version: 2.4
Name: rbx-cp
Version: 0.31.1
Author: Roberto Sales
License-File: LICENSE
Requires-Python: <3.14,>=3.10
Requires-Dist: aiofiles>=24.1.0
Requires-Dist: async-lru>=2.0.5
Requires-Dist: beautifulsoup4>=4.13.4
Requires-Dist: chardet>=5.2.0
Requires-Dist: colour>=0.1.5
Requires-Dist: dateparser>=1.2.1
Requires-Dist: deepmerge>=2.0
Requires-Dist: fastapi>=0.115.8
Requires-Dist: filelock>=3.14.0
Requires-Dist: gitignore-parser>=0.1.12
Requires-Dist: gitpython>=3.1.43
Requires-Dist: iso639-lang>=2.6.1
Requires-Dist: jinja2>=3.1.4
Requires-Dist: lark>=1.2.2
Requires-Dist: latexbuild>=0.2.2
Requires-Dist: lz4>=4.4.4
Requires-Dist: mechanize>=0.4.10
Requires-Dist: more-itertools>=10.5.0
Requires-Dist: nest-asyncio>=1.6.0
Requires-Dist: openai-agents>=0.3.0
Requires-Dist: ordered-set>=4.1.0
Requires-Dist: packaging>=25.0
Requires-Dist: psutil>=7.0.0
Requires-Dist: pydantic-xml[lxml]>=2.11.0
Requires-Dist: pydantic>=2.11.7
Requires-Dist: pypandoc>=1.15
Requires-Dist: pyte>=0.8.2
Requires-Dist: python-dotenv>=1.1.1
Requires-Dist: pyyaml>=6.0.1
Requires-Dist: questionary>=2.1.0
Requires-Dist: requests>=2.32.3
Requires-Dist: rich>=13.9.4
Requires-Dist: ruamel-yaml>=0.18.14
Requires-Dist: ruyaml>=0.91.0
Requires-Dist: semver>=3.0.4
Requires-Dist: simpleeval>=1.0.3
Requires-Dist: sqlitedict>=2.1.0
Requires-Dist: syncer>=2.0.3
Requires-Dist: texsoup>=0.3.1
Requires-Dist: textual-serve>=1.1.2
Requires-Dist: textual>=8.0
Requires-Dist: throttlex>=1.0.0
Requires-Dist: typer>=0.15.1
Requires-Dist: typing-extensions>=4.14.1
Requires-Dist: uvicorn>=0.35.0
Requires-Dist: yamlfix>=1.17.0
Description-Content-Type: text/markdown

<p align="center">
	<img src="docs/rbx_white.png" alt="rbx" width="200">
</p>

<p align="center">
    <em>The go-to CLI tool for programming competitions setters.</em>
</p>
<p align="center">
	<!-- loscal repository, no metadata badges. -->
<p>
<p align="center">
	<img src="https://img.shields.io/badge/Python-3776AB.svg?style=default&logo=Python&logoColor=white" alt="Python">
	<img src="https://img.shields.io/badge/FastAPI-009688.svg?style=default&logo=FastAPI&logoColor=white" alt="FastAPI">
	<img src="https://img.shields.io/badge/JSON-000000.svg?style=default&logo=JSON&logoColor=white" alt="JSON">
</p>

<br><!-- TABLE OF CONTENTS -->
<details>
  <summary>Table of Contents</summary><br>

- [Overview](#overview)
- [Features](#features)
- [Documentation](#documentation)
- [Contributing](#contributing)
- [License](#license)
</details>
<hr>

##  Overview

<!--[![Usage video]](https://github.com/rsalesc/rbx/assets/4999965/111de01e-6cbd-495e-b8c2-4293921e49b3)-->

[![GitHub license](https://img.shields.io/github/license/rsalesc/rbx.svg)](https://github.com/rsalesc/rbx/blob/master/LICENSE)
[![PyPI pyversions](https://img.shields.io/pypi/pyversions/rbx.svg)](https://pypi.python.org/pypi/rbx/)
[![PyPI version shields.io](https://img.shields.io/pypi/v/rbx.svg)](https://pypi.python.org/pypi/rbx/)

**rbx** is a CLI tool that empowers setters from the competitive programming community.

A flexible setting tool, as powerful as [Polygon](https://polygon.codeforces.com/), right on your terminal.

--- 

## Features

- 🧱 Structure: describe your problem or contest structure with the use of YAML configuration files.
- 🤖 Generation: provides a simple way to describe your whole testset, including both manually added and generated testcases.
- 🔨 Testing: provides commands for automatically running correct and incorrect solutions against the testcases of your problem, automatically judging whether the verdict was as expected or not.
- ✅ Verify: checks if your testcases and solutions are strictly conformant with the use of validators and unit tests.
- 📝 Statements: provides tooling for writing and building statements, also ensuring they're easily synchronized with your testset.
- 📤 Package: provides a single command for packaging your problems for use in your preferred judge system.

---

##  Documentation

You can read the docs [here](https://rsalesc.github.io/rbx/).

---

## Contributing

### Prerequisites

- Python 3.9+
- [uv](https://docs.astral.sh/uv/) — package manager
- [mise](https://mise.jdx.dev/) — task runner

### Getting Started

```bash
git clone https://github.com/rsalesc/rbx.git
cd rbx
mise run sync
pre-commit install
```

### Common Tasks

All development commands are run through `mise`:

| Command | Description |
|---|---|
| `mise run sync` | Install/sync all dependencies |
| `mise run lock` | Regenerate `uv.lock` |
| `mise run lint` | Run linter |
| `mise run lint-fix` | Run linter with auto-fix |
| `mise run format` | Format code |
| `mise run format-check` | Check formatting without changes |
| `mise run check` | Run all checks (lint + format) |
| `mise run test` | Run tests (excludes e2e/slow/docker) |
| `mise run test-cov` | Run tests with coverage |
| `mise run test-e2e` | Run e2e tests |
| `mise run build` | Clean build the package |

Run `mise tasks` to see all available tasks.

### Code Style

- **Single quotes** for strings
- **Absolute imports only** — no relative imports
- **Conventional Commits** — enforced by pre-commit hook

All style rules are enforced automatically by pre-commit hooks (ruff check, ruff format, commitizen).

### Submitting Changes

1. Create a branch from `main`
2. Make your changes
3. Run `mise run check` and `mise run test`
4. Commit using [Conventional Commits](https://www.conventionalcommits.org/) format
5. Open a pull request

---

##  License

This project is protected under the [Apache License 2.0](http://www.apache.org/licenses/) License. For more details, refer to the [LICENSE](LICENSE) file.

---

[**Return**](#-overview)

---
