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
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 #
############ ################## ##########
- A Template generates a Template or a Code_Generator.
- A Code_Generator generates a Module.
- 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