erplibre/doc/CODE_GENERATOR.base.md

13 KiB

How to generate code

Comment générer du code

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

Ne jamais exécuter le générateur de code dans un environnement de production, il y a création de dépendance circulaire pouvant causer de la frustration à nettoyer tous les dommages.

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.

Il y a 3 types de module dans le contexte du générateur de code :

  1. A Template generates a Template or a Code_Generator.
  2. Un Code_Generator génère un module.
  3. Un Template lis un module pour générer un Code_Generator.

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

Attention pour ne pas écraser votre code, toujours commiter après une manipulation, l'utilisation du mode enable_sync_code peut effacer des données. Seul git vous sauvera!

TODO Il y a 4 objectifs sur le générateur :

  • utilisation du générateur via l'interface web
  • créer un nouveau module,
  • modifier un module existant
  • exécuter les tests.

test :

  • code generator
  • code generator extra (externe au repo template)
  • template
  • création d'un nouveau module direct ou chaine complète
    • tester chaque étape de la création
  • i18n (définir les différents cas)

Suggestion de réduire les config avec make config_ pour les tests.

TODO expliquer les modules/fonctionnalités actuellements supportés. portail WIP, snippet website WIP, cron, web vue tree+form, geoengine WIP, theme website, hook, db_servers WIP, exportation de donnée en module TODO expliquer objectif des 4 libertés TODO rechanger les termes pour : orcherstre + moule + module

Manual generator with web interface

Générateur de module avec l'interface web

TODO

At root path of ERPLibre git project, run:

Niveau intermédiaire.

Pour utiliser le générateur de code, il faut ouvrir l'interface web qui permet la configuration du logiciel à générer. Un des choix suivants :

Générateur de code de base :

make addons_install_code_generator_basic
make run_code_generator

Générateur de code avec fonctionnalités avancées :

make addons_install_code_generator_featured
make run_code_generator

Générateur de code avec fonctionnalités complètes :

make addons_install_code_generator_full
make run_code_generator

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

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

Prepare a DB

Préparer une BD

This will destroy and create database named code_generator.

Ceci va détruire et créer une base de donnée nommé code_generator.

make db_restore_erplibre_base_db_code_generator

Test code generator

Tester le générateur de code

TODO

Tester la génération des modules internes du générateur, créant les démos à partir de leur générateur respectif.

make test_code_generator_generation

Create your first Code_Generator

Créer votre premier Code_Generator

Edit Code Generator Demo and update # TODO HUMAN:

Modifier Code Generator Demo et mettre à jour # TODO HUMAN:

Generate a Template

Générer un Template

By default, code_generator_demo generate itself, code_generator_demo.

Name your module begin 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.

Par défaut, installer le module code_generator_demo va générer le module code_generator_demo.

Nommer votre module en commençant par MODULE_NAME = "code_generator_template_"

Example, to generate the module code_generator_template_demo_website_snippet, change value:

Un exemple, générer le module code_generator_template_demo_website_snippet, changer la variable 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:

Générer un nouveau module, ceci va écraser 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)

Générer un Code_Generator (suite de template)

Name your module begin with MODULE_NAME = "code_generator_"

Nommé votre module qui débute par MODULE_NAME = "code_generator_"

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

Pour continuer avec l'exemple, généré le template code_generator_template_demo_website_snippet, ceci va écraser 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

Aller à la section Créer votre premier module

Generate a Code_Generator_Demo

Générer un Code_Generator_Demo

TODO validate this

Name your module begin with MODULE_NAME = "code_generator_demo_"

Disable enable_template_code_generator_demo

Nommé votre module qui débute par MODULE_NAME = "code_generator_demo_"

Désactiver la variable enable_template_code_generator_demo

value["enable_template_code_generator_demo"] = False

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

Pour continuer avec l'exemple, généré le template code_generator_template_demo_website_snippet, ceci va écraser code_generator_demo_website_snippet:

./script/addons/install_addons_dev.sh code_generator code_generator_template_demo_website_snippet

Create your first Module

Créer votre premier module

Continue example of code_generator_demo_website_snippet to generate your first module. Update next value:

Continuer avec l'exemple du code_generator_demo_website_snippet pour générer votre premier module. Mettre à jour les valeurs suivantes :

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

Generate your module:

Générer votre module :

./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 is code_generator associated, because duplicated models!

Maintenant, vous pouvez le tester! Pour info, on ne peut pas installer un module généré avec son générateur de code associé, puisqu'il y a une duplication des modèles!

Il est maintenant possible de modifier les paramètres via l'interface manuelle pour ce module, puis le regénérer en effaçant la BD. Ajouter un modèle.

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

Faire la boucle d'amélioration, commiter le code pour avoir une traçabilité des changements.

Ensuite, modifier la valeur enable_sync_template à True dans le fichier template, de l'exemple code_generator_template_demo_website_snippet.

value["enable_sync_template"] = True

Exécuter l'installation du template pour qu'il se synchronise sur le module généré.

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

Ready to test, generate your module:

Prêt à tester, générer le 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

Comment générer les traductions i18n

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

Vous avez besoin d'un template et d'un module. Soyez certain que vous avez cette ligne dans le 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, example demo_portal, and after the template, example code_generator_template_demo_portal.

Premièrement, installer le module, par exemple demo_portal, et ensuite le template, par exemple 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

Synchroniser les champs du Code_Generator du module

This reduce time of 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:

Ceci va permettre de réduire le temps de programmation d'un Code_Generator avec la synchronisation des champs de module avec Template.

On a besoin d'un Template, un Code_Generator accompagné de son module. Installer le module en premier dans une base de donnée nettoyé et installer le Template, ceci va générer le Code_Generator, utiliser enable_sync_template à la valeur True.

Exemple :

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

Tester le générateur de code

TODO

Une bonne manière de tester un générateur de code est de valider qu'il génère le même code, il ne devient pas nécessaire de tester les fonctionnalités, puisque le comportement est la génération.

Tester les générations simples :

make test_code_generator_generation

TODO

Tester les générations extra :

make test_code_generator_generation_extra

TODO

Tester les générations des templates :

make test_code_generator_template