install.sh et make lançaient todo.py par son hashbang, donc par le python3 du PATH, sans rien garantir de sa version : une syntaxe plus récente l'arrête en SyntaxError au chargement, et le poste hors d'âge perd tout moyen de lancer l'installation qui l'en sortirait. L'ordre est désormais le venv d'outillage, sinon le python3 du PATH s'il suffit, sinon l'installation. TODO lui-même se relance dans le venv, vérifie version et modules avant ses imports, et propose l'installation en terminal — ce que « make » sur un clone neuf promet depuis toujours sans le tenir. Vérifié : venv à jour, venv périmé, systèmes en 3.10, 3.14 et 3.15 vont chacun où il faut ; un import du module ne relance rien et lève comme avant. --- EN --- install.sh and make ran todo.py through its hashbang, so through the python3 of the PATH, with no guarantee about its version: a newer syntax stops it with a SyntaxError at load, and the ageing machine loses every way to start the install that would rescue it. The order is now the tools venv, else the python3 of the PATH when it suffices, else the install. TODO itself relaunches in the venv, checks version and modules before its imports, and offers the install in a terminal — what "make" on a fresh clone has always promised without keeping. Checked: fresh venv, stale venv, systems on 3.10, 3.14 and 3.15 each go where they should; importing the module relaunches nothing and raises as before. Assisted-by: Claude Opus 5 |
||
|---|---|---|
| .. | ||
| assistant | ||
| assistant_menu.py | ||
| auto_ask.py | ||
| database_manager.py | ||
| deploy_form_extras.py | ||
| deploy_form_lib.py | ||
| deploy_form_plan.py | ||
| dev_tools.py | ||
| kdbx_manager.py | ||
| logo_ascii.txt | ||
| longtest_menu.py | ||
| migration_form.py | ||
| migration_stats.py | ||
| migration_status.py | ||
| migration_status_tui.py | ||
| proxmox_deploy_form.py | ||
| proxmox_menu.py | ||
| qemu_access.py | ||
| qemu_cache_menu.py | ||
| qemu_deploy.py | ||
| qemu_deploy_form.py | ||
| qemu_hardware.py | ||
| qemu_install.py | ||
| qemu_install_monitor.py | ||
| qemu_manage.py | ||
| qemu_menu.py | ||
| qemu_network.py | ||
| qemu_privilege.py | ||
| qemu_recover.py | ||
| README.base.md | ||
| README.fr.md | ||
| README.md | ||
| source_todo.sh | ||
| ssh_config.py | ||
| textual_setup.py | ||
| todo.json | ||
| todo.py | ||
| todo_example.json | ||
| todo_file_browser.py | ||
| todo_i18n.py | ||
| todo_install.py | ||
| todo_prefs.py | ||
| todo_telemetry.py | ||
| todo_upgrade.py | ||
| transform_form.py | ||
| transform_menu.py | ||
| transform_setup.py | ||
| version_manager.py | ||
| vpn_menu.py | ||
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.