acodo-cli
CLI de desarrollo para proyectos Python >= 3.13, parte de Acodo Framework.
Se ejecuta desde el directorio de un proyecto (en el workspace, la raíz) y lee su
configuración de acodo.toml. Construido con Typer y
Rich.
🚀 Instalación
Dentro del workspace, como dependencia de desarrollo de otro miembro:
[dependency-groups]
dev = ["acodo-cli"]
[tool.uv.sources]
acodo-cli = { workspace = true }
Para trabajar en el monorepo, desde la raíz: uv sync --all-packages.
Instalado como herramienta global (uv tool install, pipx o Python del sistema) solo
expone init: el resto de comandos usan ruff, ty y pytest del entorno del proyecto.
🛠️ Comandos
Los comandos no reciben argumentos: leen todo de acodo.toml y, como mucho, hacen
alguna pregunta interactiva.
uv run acodo # Sin subcomando: ayuda (u ofrece inicializar si falta acodo.toml)
uv run acodo --version # Panel con el logo, la versión y el entorno
uv run acodo --help # Lista los comandos (también: python -m acodo_cli)
uv run acodo init # En un proyecto: acodo.toml por defecto, .local/gh_app.json y .local/ al .gitignore
# Fuera de un proyecto (global): ofrece clonar la plantilla (por defecto ./acodo/)
uv run acodo doctor # Diagnóstico del entorno y la configuración
uv run acodo format # ruff format
uv run acodo lint # ruff check --fix
uv run acodo types # ty check
uv run acodo tests # pytest
uv run acodo tests-cov # pytest con cobertura (requiere pytest-cov)
uv run acodo check # format, lint, types y tests
uv run acodo clean # Borra cachés y artefactos, previa confirmación
uv run acodo todo # Lista TODO/FIXME/XXX/HACK (falla si alguno no tiene texto)
uv run acodo api # Documentación de la API en Markdown (target de [api])
uv run acodo backup # Copia de seguridad (target de [backup])
uv run acodo code-count # Líneas de código y docstrings (pregunta si detallar por fichero)
uv run acodo gh-token # Token de instalación de una GitHub App (también al portapapeles)
uv run acodo gh-check # Comprueba el acceso al repositorio configurado
Consideraciones:
- Las comprobaciones de calidad no se detienen en el primer fallo y muestran un resumen final.
tests-covnecesitapytest-cov; la cobertura se configura en[tool.coverage].apisolo genera Markdown (.md); documenta lo público que tenga docstring, sin importar el código.
🔑 GitHub App
gh-token y gh-check leen el JSON indicado en [github_app].config_file
(por defecto .local/gh_app.json):
{
"repository": "owner/repo",
"app-id": "123456",
"private-key": "private-key.pem",
"installation-id": "12345678",
"api-url": "https://api.github.com"
}
🎨 Colores
Toda la salida (tablas, mensajes, ayuda de Typer y banner) usa solo la paleta
del framework Acodo, definida como ACODO_THEME en theme.py. El markup de Rich
usa los estilos del tema (ok, error, warning, label, muted, title,
border...), nunca colores sueltos; un test lo comprueba sobre la salida real.
⚙️ Configuración
Todo vive en el acodo.toml de la raíz del proyecto (acodo init copia el de por defecto;
el CLI lo busca también en los directorios superiores):
[all] # Común a todos los comandos
include = ["scripts/", "src/", "tests/"]
exclude = [".cache/", ".git", ".pytest_cache", ".ruff_cache", ".venv"]
[format] # También [lint], [types], [test], [todo], [backup] y [api]:
include = [] # añaden sus rutas a las de [all]
exclude = []
[backup]
target = ".local/backup.zip" # zip | tar.gz
version_suffix = true # backup-<versión>.zip
[api]
target = ".local/api.md" # md
version_suffix = true
[github_app]
config_file = ".local/gh_app.json"
- Los
includeson directorios relativos a la raíz; los que no existan se ignoran. - Un
excludesin/interior (.venv) casa con cualquier componente de la ruta; con/(docs/api/), con su comienzo. - El nombre, la versión y
requires-pythonsalen del[project]delpyproject.toml. - En el workspace de Acodo basta
include = ["packages/"].
📁 Estructura
src/acodo_cli/
├── cli.py # App Typer: cada comando solo llama a su script
├── config.py # load_config(): lee acodo.toml (y [project] de pyproject.toml)
├── models.py # Dataclasses y enums compartidos
├── theme.py # Paleta Acodo, Theme de Rich y estilos de la ayuda de Typer
├── banner.py # ASCII art con degradado y panel de --version
├── typer_options.py # Opción global --version
├── commands_service.py # Lógica común (consolas, errores, procesos, alcance, GitHub App)
├── resources/acodo.toml # Configuración por defecto que copia `acodo init`
└── commands/ # un script por comando (api, backup, check, clean...)
Licencia
MIT.
Metadata
Release files for acodo-cli 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| acodo_cli-0.2.1.tar.gz | 24.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| acodo_cli-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.1 kB
Release files / acodo_cli-0.2.1.tar.gz
| Download URL | acodo_cli-0.2.1.tar.gz |
|---|---|
| Size | 24.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9e95621e80703729280a0fa8c4477f562fc9fb14c75d513b0e09f94a1bbd3335
|
|
BLAKE2b-256 checksum How to use checksums |
8d53ac69709eaa6c0fb8264ce165fde8b4ce75cd5bcdf8820b32db6748dc8f67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / acodo_cli-0.2.1-py3-none-any.whl
| Download URL | acodo_cli-0.2.1-py3-none-any.whl |
|---|---|
| Size | 35.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4acc856188a84df296fd5828778d0cdd78ef1b1bf383f61e1b6f7419082f82ee
|
|
BLAKE2b-256 checksum How to use checksums |
af0637935e500d2adcb40d545472a2a3a82be2e8f35840e5fb9bc2ba69c0e301
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Security for acodo-cli 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.