Référence des hooks
Référence des hooks
Un hook est une variable du fichier hooks.py d'une application. Dodock lit les hooks de toutes les applications installées avec frappe.get_hooks(). Cette page décrit les hooks propres à Dodock. Pour les hooks standard de Frappe (doc_events, scheduler_events, has_permission, permission_query_conditions…), voir la documentation des hooks de Frappe (en anglais).
| Hook | Valeur | Effet |
|---|---|---|
never_skip_patches | Liste de chemins de correctifs | Ces correctifs arrêtent la migration s'ils échouent, même avec --skip-failing |
after_app_build | Chemin d'une fonction (ou liste) | Appelé après chaque bench build, avec la liste des applications compilées |
ignore_file_permissions | True | Désactive les contrôles d'accès sur les documents Fichier |
never_skip_patches
Avec bench migrate --skip-failing, Dodock enregistre un correctif qui échoue dans le Journal de Patch comme ignoré, puis passe aux correctifs suivants. Un correctif listé dans never_skip_patches n'est jamais ignoré : s'il échoue, la migration s'arrête.
Chaque entrée est le chemin du correctif tel qu'il figure dans le fichier patches.txt de l'application.
# mon_app/hooks.py
never_skip_patches = [
"mon_app.patches.v5_0.restructurer_ecritures_comptables",
]
Exemple : le correctif restructurer_ecritures_comptables réécrit les écritures d'une société. L'ignorer laisserait la comptabilité dans un état incohérent. Avec ce hook, si le correctif échoue pendant bench migrate --skip-failing, la migration s'arrête. L'administrateur corrige la cause, puis relance la migration.
Réservez ce hook aux correctifs dont l'échec rend les données incohérentes.
after_app_build
after_app_build permet à une application de réagir à la compilation des assets d'une autre application. Par exemple, une application compile les ressources qu'elle gère pour le compte d'une autre application.
Il diffère de after_build :
after_builds'exécute uniquement pour les applications qui viennent d'être compilées. Dodock appelle la fonction sans argument.after_app_builds'exécute pour toutes les applications du banc, après lesafter_build. Dodock appelle la fonction avec la liste des applications compilées.
# mon_app/hooks.py
after_app_build = "mon_app.build.after_app_build"
# mon_app/build.py
def after_app_build(built_apps: list[str]) -> None:
if "autre_app" not in built_apps:
return
# Compiler les ressources de « autre_app » gérées par « mon_app »
...
La valeur de retour n'est pas utilisée. Dodock lui-même déclare ce hook : il compile ainsi les îlots des pages d'interface et les applications Studio exportées après chaque build.
Le modèle d'application créé par bench new-app contient la ligne à adapter, en commentaire :
# after_app_build = "{app_name}.build.after_app_build"
ignore_file_permissions
Si une application installée déclare ignore_file_permissions avec une valeur vraie, Dodock ne contrôle plus l'accès aux documents Fichier :
has_permissionsur un fichier renvoie toujours vrai, pour tous les utilisateurs, y compris les invités ;- la liste des fichiers n'est plus filtrée par utilisateur.
# hooks.py d'une application qui gère elle-même l'accès aux fichiers
ignore_file_permissions = True
Il suffit qu'une seule application déclare une valeur vraie pour que le contournement s'applique à tout le site. Réservez-le à une application qui applique ses propres règles de partage des fichiers.
Hooks standard les plus utilisés
Ces hooks viennent de Frappe. Leur nom exact est vérifié dans le code de Dodock ; leur détail est dans la documentation de Frappe (en anglais).
| Hook | Usage |
|---|---|
doc_events | Appeler une fonction aux événements d'un type de document (validate, on_update, on_submit, on_cancel, on_trash…) |
scheduler_events | Tâches planifiées (daily, hourly, weekly, cron…) |
override_doctype_class | Remplacer la classe Python d'un type de document |
extend_doctype_class | Ajouter des méthodes à la classe Python d'un type de document, sans la remplacer. Plusieurs applications peuvent étendre la même classe |
override_whitelisted_methods | Remplacer une méthode appelable par l'API |
doctype_js, doctype_list_js, doctype_tree_js, doctype_calendar_js | Ajouter du JavaScript au formulaire, à la liste, à l'arborescence ou au calendrier d'un type de document |
boot_session | Ajouter des données à la session chargée au démarrage du bureau |
on_login, on_logout | Réagir à la connexion et à la déconnexion |
before_request, after_request | Exécuter du code avant et après chaque requête HTTP |
before_migrate, after_migrate | Exécuter du code avant et après bench migrate |
after_install, after_app_install, before_app_uninstall | Réagir à l'installation de l'application, à l'installation d'une autre application, à la désinstallation |
Autres hooks documentés
- Résolveurs de base taxable : le hook
erpnext_taxable_base_resolversde Dokos. - Hook régional pour les cotisations employeur
- Analyse des hooks dans les performances