erplibre/doc/CODE_GENERATOR.md
Mathieu Benoit 0e5441ac39 [ADD] commentaires : un relevé non bloquant, sa règle, le code nettoyé
Rien ne relevait les commentaires hors convention. L'outil lit commentaires et
docstrings, jamais le code autour, et rend deux familles inégales :
l'identifiant — adresse, courriel, chemin de compte, nom de la liste privée —
est une trouvaille ; le récit — témoignage, date, personne — un signal à relire.

Le hook pre-commit le lance sur l'index, sort toujours en 0 — un contrôle
bloquant à cette échelle se fait désinstaller — et parle quand l'outil échoue.
La règle du générateur et sa doc portent le nettoyage au fur et à mesure, et
l'exemple d'un interdit s'invente : base, adresse, compte et hôte en prennent un.

L'écran du contexte est posé, sans entrée de menu. Vérifié : 252 tests des six
fichiers d'essai touchés passent.

--- EN ---

Nothing reported the comments that break the convention. The tool reads
comments and docstrings, never the code around them, and returns two unequal
families: identifying data — address, e-mail, account path, private-list name
— is a finding; narrative — witness marker, date, person — a signal to re-read.

The pre-commit hook runs it on the index, always exits 0 — a blocking check at
that scale gets uninstalled — and speaks when the tool fails. The generator
rule and its doc carry the clean-up as you go, and a forbidden thing's example
is invented: a real database, address, account and host each take one.

The context screen is in place, with no menu entry. Checked: 252 tests of the
six touched fixture files pass.

Assisted-by: Claude Opus 5
2026-08-30 06:08:30 -04:00

10 KiB

How to generate code

Never run this on production environment, this create circular dependencies and will cause frustration to clean damage.

Modules
############    ##################    ##########
# Template # -> # Code_Generator # -> # Module #
############    ##################    ##########
  1. A Template generates a Template or a Code_Generator.
  2. A Code_Generator generates a Module.
  3. A Template reads a Module to generate a Code_Generator.

Warning, be careful with your code, always commit after a manipulation, because the mode enable_sync_code erase data, only Git will save you!

Manual generator with web interface

TODO

make addons_install_code_generator_basic
make run_code_generator

TODO

make addons_install_code_generator_featured
make run_code_generator

TODO

make addons_install_code_generator_full
make run_code_generator

Ouvrir le navigateur sur http://localhost:8069. Utilisateur admin et mot de passe admin. Une fois connecté, ouvrir sur http://localhost:8069/web?debug= pour activer le mode déverminage.

Ouvrir l'application Code Generator et créer un Module. Remplir les champs requis et générer avec Action/Generate code.

Create model-view module

make addons_install_code_generator_basic
make run_code_generator

TODO

TODO

make db_restore_erplibre_base_db_test_module_test
make run_test

Create portal module

make addons_install_code_generator_basic
./script/addons/install_addons.sh code_generator code_generator_portal
make run_code_generator

TODO

TODO

make db_restore_erplibre_base_db_test_module_test
make run_test

TODO

Create hook module for installation

TODO

make addons_install_code_generator_basic
./script/addons/install_addons.sh code_generator code_generator_hook
make run_code_generator

TODO

with api.Environment.manage():
    env = api.Environment(cr, SUPERUSER_ID, {})
    print("Hello World")

TODO

make db_restore_erplibre_base_db_test_module_test

Create cron module

TODO

make addons_install_code_generator_basic
./script/addons/install_addons.sh code_generator code_generator_cron
make run_code_generator

TODO

log("Coucou")

TODO

make db_restore_erplibre_base_db_test_module_test
make run_test

TODO

Create website snippet module

In progress

make addons_install_code_generator_basic
./script/addons/install_addons.sh code_generator code_generator_website_snippet
make run_code_generator

TODO

TODO

Create GeoEngine with Leaflet module

make addons_install_code_generator_basic
./script/addons/install_addons.sh code_generator code_generator_website_leaflet
make run_code_generator

TODO

TODO

make db_restore_erplibre_base_db_test_module_test
make run_test

TODO

Create theme module for website

TODO

make addons_install_code_generator_basic
./script/addons/install_addons.sh code_generator code_generator_theme_website
make run_code_generator

TODO

make db_restore_erplibre_base_db_test
./script/addons/install_addons.sh test website
make run_test

TODO

Extract data to module

TODO

make addons_install_code_generator_basic
./script/addons/install_addons.sh code_generator helpdesk_mgmt
make run_code_generator

TODO

make db_restore_erplibre_base_db_test_module_test

Export a website to a module

TODO

Migrate external database into the migration module

TODO

make addons_install_code_generator_basic
./script/addons/install_addons.sh code_generator code_generator_db_servers
make run_code_generator

TODO

Migrate from website to model with PDF data

TODO

make db_restore_erplibre_base_db_code_generator
./script/addons/install_addons_dev.sh code_generator code_generator_demo_converter_js
make db_restore_erplibre_base_db_test
./script/addons/install_addons_dev.sh test business_plan_import_pdf

Prepare a DB

This will destroy and create a database named code_generator.

make db_restore_erplibre_base_db_code_generator

TODO

make config_gen_code_generator

TODO

make config_gen_all

Create Code Generator

./script/code_generator/new_project.py -d PATH -m MODULE_NAME

Create your first Code_Generator

Edit Code Generator Demo and update # TODO HUMAN:

Generate a Template

By default, code_generator_demo generates itself, code_generator_demo.

Name your module beginning with MODULE_NAME = "code_generator_template_"

The value "enable_template_code_generator_demo" at False to create a new template module, else this will recreate code_generator_demo.

For example, to generate the module code_generator_template_demo_website_snippet, change value:

MODULE_NAME = "code_generator_template_demo_website_snippet"
[...]
value["enable_template_website_snippet_view"] = True
[...]
lst_depend = [
    "code_generator",
    "code_generator_website_snippet",
]

Generate new module, this will overwrite code_generator_template_demo_website_snippet:

make db_restore_erplibre_base_db_code_generator
make addons_install_code_generator_demo

Generate a Code_Generator (continue template)

Name your module beginning with MODULE_NAME = "code_generator_"

To continue the example, you generated the template code_generator_template_demo_website_snippet, this will overwrite code_generator_demo_website_snippet:

make db_restore_erplibre_base_db_template
./script/addons/install_addons_dev.sh template code_generator_template_demo_website_snippet

Go to section Create your first module

Generate a Code_Generator_Demo

Name your module beginning with MODULE_NAME = "code_generator_demo_"

Disable enable_template_code_generator_demo

value["enable_template_code_generator_demo"] = False

To continue the example, you generated the template code_generator_template_demo_website_snippet, this will overwrite code_generator_demo_website_snippet:

./script/addons/install_addons_dev.sh code_generator code_generator_template_demo_website_snippet

Create your first Module

To continue the example of code_generator_demo_website_snippet to generate your first module. Update next value:

"application": True,
"category_id": env.ref("base.module_category_website").id,
[...]
# Add dependencies
lst_depend = [
    "website",
]

Generate your module:

make db_restore_erplibre_base_db_code_generator
./script/addons/install_addons_dev.sh code_generator code_generator_demo_website_snippet

Now, you can test it! Note, you cannot install a generated module with his code_generator associated, because of duplicated models!

make db_restore_erplibre_base_db_code_generator
./script/addons/install_addons_dev.sh code_generator code_generator_demo_website_snippet
value["enable_sync_template"] = True
value["enable_template_wizard_view"] = True
value["template_model_name"] = "test;test2"

TODO

make db_restore_erplibre_base_db_template
./script/addons/install_addons_dev.sh template demo_website_snippet
./script/addons/install_addons_dev.sh template code_generator_template_demo_website_snippet

Ready to test, generate your module:

# Optional, reset test database
make db_restore_erplibre_base_db_test
./script/addons/install_addons_dev.sh test demo_website_snippet

How to generate i18n translation

You need a template and a module. Be sure you have this line in template:

new_module_path = os.path.join(path_module_generate, new_module_name)
code_generator_writer.set_module_translator(new_module_name, new_module_path)

First, install the module, for example demo_portal, and after the template, for example code_generator_template_demo_portal.

make db_restore_erplibre_base_db_code_generator
./script/addons/install_addons_dev.sh test demo_portal
./script/addons/install_addons_dev.sh test code_generator_template_demo_portal

Sync Code_Generator fields from Module

This reduce the time it takes for programming a Code_Generator with sync module field with Template.

You need a Template, a Code_Generator with his Module. Install the Module first in clean database and install Template, this will generate the Code_Generator, use enable_sync_template at True.

Example:

make db_restore_erplibre_base_db_code_generator
./script/addons/install_addons_dev.sh test demo_portal
./script/addons/install_addons_dev.sh test code_generator_template_demo_portal

Test the code generator

TODO

make test

TODO

make test_code_generator_generation

TODO

make test_code_generator_generation_extra

TODO

make test_code_generator_template

Comments in generated code

Generated code carries comments like any other, and the same rule applies: a comment says HOW the code works. It never carries identifying data — no customer or third-party organisation, no real database name, no machine, no address, no label or figure taken from a customer's data — and it does not tell the story of the investigation that produced it.

A module generated from an existing database inherits what that database holds: re-read its comments and docstrings before committing. A customer or database name gets in on its own.

Cleaning up as you go

Nothing gets cleaned in one sweep. You fix the comments of the file you are touching, at the moment you touch it. A pre-commit hook lists what is worth re-reading in the files you staged, and never blocks the commit:

git config core.hooksPath script/git/hooks

The same tool runs by hand, on a file, a directory or the index. It reports identifiant findings — an address, an e-mail, an account path — which are to be removed, and récit signals — a witness marker, a date, the first person — which are to be RE-READ: a durable fact stays, the incident where it was observed goes. Exit codes follow the repository convention: 0 nothing to report, 1 findings, 2 the tool failed.

python3 script/analyse/check_comment_hygiene.py script/todo/todo.py
python3 script/analyse/check_comment_hygiene.py --staged
python3 script/analyse/check_comment_hygiene.py script --identifying-only