erplibre/script/todo
Mathieu Benoit cfbdd9406e [REF] format : passer l'outillage et les tests sous ruff
Le formateur de ce dépôt est ruff depuis qu'il remplace black, qui ne connaît
aucune cible au-delà de py313 ; ce passage applique sa norme à l'arbre entier,
d'un coup, pour qu'aucun commit de fond n'ait à porter du style. L'écart tient
presque entièrement aux chaînes coupées à la main que ruff recolle quand elles
tiennent sur une ligne, et aux « with » multiples qu'il regroupe : aucune
valeur ne change, et les clés de traduction non plus.
Vérifié : la suite unitaire reste verte après le passage, et le contrôle de
syntaxe ne signale rien.

--- EN ---

This repository's formatter is ruff since it replaced black, which knows no
target beyond py313; this pass applies its standard to the whole tree at once,
so that no substantive commit has to carry style. The difference is almost
entirely the hand-split strings ruff joins back when they fit on one line, and
the multiple "with" it merges: no value changes, nor do the translation keys.
Checked: the unit suite stays green after the pass, and the syntax check
reports nothing.

Assisted-by: Claude Opus 5
2026-09-24 14:40:38 -04:00
..
assistant [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
mail [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
assistant_menu.py [FIX] outillage : désimbriquer les f-strings que seul 3.12 sait lire 2026-09-24 13:56:57 -04:00
auto_ask.py [UPD] invites : 15 secondes pour décider, et le fichier nomme la base 2026-08-29 02:11:04 -04:00
database_manager.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
deploy_form_extras.py [IMP] qemu deploy : pré-configurer la VM, et dire ce qui s'y installe 2026-09-04 02:03:52 -04:00
deploy_form_lib.py [ADD] cache qemu : miroir des téléchargements des VM, hors ligne compris 2026-09-14 16:46:15 -04:00
deploy_form_plan.py [IMP] qemu deploy : pré-configurer la VM, et dire ce qui s'y installe 2026-09-04 02:03:52 -04:00
dev_tools.py [FIX] qemu install : poser mise, pyenv et starship, verdict par outil 2026-09-14 16:46:15 -04:00
kdbx_manager.py [ADD] vpn openconnect : groupe d'URL, SSO délégué, mot de passe borné 2026-09-04 06:26:34 -04:00
logo_ascii.txt [IMP] bot assistant TODO 2025-04-27 02:40:20 -04:00
longtest_menu.py [ADD] long_test : ERPLibre installé sur NixOS, de bout en bout 2026-09-16 21:31:03 -04:00
migration_form.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
migration_stats.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
migration_status.py [FIX] verdicts de migration : distinguer trouvaille et échec d'outil 2026-08-29 02:11:04 -04:00
migration_status_tui.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
proxmox_deploy_form.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
proxmox_menu.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_access.py [ADD] long_test : ERPLibre installé sur NixOS, de bout en bout 2026-09-16 21:31:03 -04:00
qemu_cache_menu.py [FIX] qemu images : vérifier les sommes publiées, partout et par défaut 2026-09-16 21:32:03 -04:00
qemu_deploy.py [REM] qemu : abandonner Debian 11 2026-09-24 13:56:57 -04:00
qemu_deploy_form.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_hardware.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_install.py [FIX] outillage : désimbriquer les f-strings que seul 3.12 sait lire 2026-09-24 13:56:57 -04:00
qemu_install_monitor.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_manage.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_menu.py [REM] qemu : abandonner Debian 11 2026-09-24 13:56:57 -04:00
qemu_network.py [ADD] qemu réseau : voir et recréer le sous-réseau des VM 2026-09-04 03:31:22 -04:00
qemu_privilege.py [ADD] qemu diagnostic : un relevé à transmettre, Gérer scindé en trois 2026-09-03 05:00:55 -04:00
qemu_recover.py [ADD] qemu diagnostic : un relevé à transmettre, Gérer scindé en trois 2026-09-03 05:00:55 -04:00
README.base.md [ADD] proxmox : un écran pour déployer sur un hôte distant 2026-08-25 03:17:13 -04:00
README.fr.md [ADD] proxmox : un écran pour déployer sur un hôte distant 2026-08-25 03:17:13 -04:00
README.md [ADD] proxmox : un écran pour déployer sur un hôte distant 2026-08-25 03:17:13 -04:00
source_todo.sh [UPD] install : le venv d'outillage passe en Python 3.14.7 2026-09-24 13:56:57 -04:00
ssh_config.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
textual_setup.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
todo.json [ADD] menu vpn : créer un profil, déposer les secrets, monter le tunnel 2026-09-04 03:43:02 +00:00
todo.py [ADD] déploiement : un proxy SOCKS par SSH, et son mode d'emploi 2026-09-24 13:56:57 -04:00
todo_example.json [ADD] menu vpn : créer un profil, déposer les secrets, monter le tunnel 2026-09-04 03:43:02 +00:00
todo_file_browser.py [FIX] todo: test menu, file browser and KeePass refusals 2026-08-16 03:56:34 -04:00
todo_i18n.py [ADD] déploiement : un proxy SOCKS par SSH, et son mode d'emploi 2026-09-24 13:56:57 -04:00
todo_install.py [ADD] long_test : ERPLibre installé sur NixOS, de bout en bout 2026-09-16 21:31:03 -04:00
todo_prefs.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
todo_telemetry.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
todo_upgrade.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
transform_form.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
transform_menu.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
transform_setup.py [FIX] requirement erplibre : déclarer openpyxl, sauter sans lui 2026-09-16 05:36:13 -04:00
version_manager.py [IMP] script: update copyright year to 2026 2026-03-11 23:16:05 -04:00
vpn_menu.py [FIX] vpn : ne plus demander la route par défaut à qui ne la pose pas 2026-09-08 09:41:17 -04:00

TODO is an assistant robot to use ERPLibre Execute it with ./script/todo/todo.py or make todo.

For a new project, copy todo_example.json to private/todo/todo_override.json | private/todo/todo_override_private.json and edit it.

The mail/ package is the mail client reachable from Assistant > Mail: several IMAP/SMTP accounts, a local cache, and a Textual TUI. See ../../doc/EMAIL.md.

Where the code lives

todo.py carries the menus and the general helpers. Everything around a single subject sits in its own file, and the whole thing is assembled by mixins on the TODO class — one file, one subject, its header states its boundary.

File What it owns
todo.py the menus, the configuration, the general helpers
qemu_menu.py the QEMU/KVM menu, the image catalogue, the statistics
qemu_deploy.py deciding then running a deployment
qemu_install.py the recipes run inside a VM
qemu_manage.py lifecycle, disks, hardware, cleanup, addresses
qemu_access.py SSH, tunnels, consoles, Android emulator
proxmox_menu.py the same, on a REMOTE Proxmox VE host

The two deployment forms — libvirt here, Proxmox over there — ask the same questions, so they share a foundation rather than each holding a copy:

File What it owns
deploy_form_lib.py pure logic (sizes, plan, totals, spec), the shared CSS, the resource-row factory, the progress view
deploy_form_plan.py the plan's gestures: overrides, locks, copies, renaming, free values
qemu_deploy_form.py what QEMU/KVM adds: desktops, tools, branches, install profiles
proxmox_deploy_form.py what Proxmox adds: host, storage, bridge, VMID, address

A form inherits PlanMixin and provides three hooks: which presets each resource offers, the name a VM would fall back to, and what a lock freezes. test_todo_deploy_form_lib.py fails if a form redefines a gesture the foundation already carries — that is what keeps the architecture from drifting back into two copies.