Menu

Les hooks pour les modules Odoo

Dans Odoo, les hooks sont des fonctions spéciales écrites dans le fichier  __init__.py à l'intérieur d'un module. Ces fonctions peuvent s'exécuter avant et après le code qui existe déjà. Elles sont spécifiées dans le fichier manifeste et sont utilisées pour créer des enregistrements

Les hooks d'Odoo sont de différents types, tels que :

  • post_init_hook
  • pre_init_hook
  • uninstall_hook
  • post_load

post_init_hook (Chargés après l'installation du module.)

Les post_init_hook sont les fonctions qui s'exécutent  après l'installation du module. Elles sont ajoutées à l'intérieur du fichier  __init__.py avec le nom de la fonction.

Elles créeront certains enregistrements. Les arguments qui peuvent être utilisés à l'intérieur du post_init_hook sont les curseurs (cursors) et le registre (registry).

    def my_post_init_hook_function(cr, registry):
    """Loaded after installing the module.
        This module's DB modifications will be available.
        :param odoo.sql_db.Cursor cr: Database cursor.
        :param odoo.modules.registry.RegistryManager registry: Database registry.
     """
    raise NotImplementedError

Nous pouvons enregistrer le hook dans le fichier manifest du module avec la clé post_init_hook. Après l'installation du module, cette méthode définie dans le post_init_hook peut être exécutée.

     'post_init_hook': 'my_post_init_hook_function',
 

pre_init_hook (Chargés avant l'installation du module..)

pre_init_hook est ajouté à l'intérieur du fichier manifest du module, et il utilise une clé pour la fonction définie dans le pre_init_hook. Il fonctionnera lorsque l'utilisateur clique sur le bouton 'Installer' du module. En cliquant sur le bouton 'Installer', il exécutera la fonction définie dans le pre_init_hook. Cela se produit avant l'installation du module.

Define the function my_pre_init_hook_function inside the __init__ file of the module.

    def my_pre_init_hook_function(cr):
    """Loaded before installing the module.

    None of this module's DB modifications will be available yet.

    If you plan to raise an exception to abort install, put all code inside a
    ``with cr.savepoint():`` block to avoid broken databases.

    :param odoo.sql_db.Cursor cr:
    Database cursor.
    """
    raise NotImplementedError

Ensuite, enregistrez le hook à l'intérieur du fichier manifest.

     'pre_init_hook': 'my_pre_init_hook_function',
 
Il aide à vérifier la compatibilité du module. De plus, il agit comme un préparateur préliminaire pour chaque module.

uninstall_hook (Chargé avant la désinstallation du module..)

Ce hook sera invoqué lorsque vous désinstallez le module. Il est principalement utilisé lorsque votre module nécessite un mécanisme de collecte des déchets.

Définissez la fonction nommée my_uninstall_hook_function à l'intérieur du fichier init du module.

    def my_uninstall_hook_function(cr, registry):
    """Loaded before uninstalling the module.

    This module's DB modifications will still be available. Raise an exception
    to abort uninstallation.

    param odoo.sql_db.Cursor cr:
    Database cursor.

    :param odoo.modules.registry.RegistryManager registry:
    Database registry.
    """
    raise NotImplementedError

Ensuite, enregistrez le hook à l'intérieur du fichier manifest.

    'uninstall_hook': 'my_uninstall_hook_function',

post_load (Chargé avant l'initialisation de tout modèle ou données)

Le hook post_load est la fonction qui s'exécute après l'installation du module.

Si nous définissons le hook post_load à l'intérieur d'un module, la fonction post_load sera exécutée chaque fois que le système est redémarré.

    def my_post_load_function():
    """Loaded before any model or data has been initialized.

    This is ok as the post-load hook is for server-wide
    (instead of registry-specific) functionalities.

    This is very useful to create monkey patches for odoo.

    Note: You do not have access to database cursor here.
    """
    raise NotImplementedError

Pour enregistrer le hook post_load à l'intérieur du fichier __manifest__, vous devez l'inclure comme suit :

    'post_load': 'my_post_load_function',
Partager cette publication
Mode développeur (mode débogage)