Version de développement
Cette documentation décrit la version « next » (develop), non encore publiée. Pour la version stable, basculez sur « v5 » dans l'en-tête.
Développeurs

Référence des hooks

Hooks propres à Dodock déclarés dans le fichier hooks.py d'une application : never_skip_patches, after_app_build et ignore_file_permissions.

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).

HookValeurEffet
never_skip_patchesListe de chemins de correctifsCes correctifs arrêtent la migration s'ils échouent, même avec --skip-failing
after_app_buildChemin d'une fonction (ou liste)Appelé après chaque bench build, avec la liste des applications compilées
ignore_file_permissionsTrueDé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_build s'exécute uniquement pour les applications qui viennent d'être compilées. Dodock appelle la fonction sans argument.
  • after_app_build s'exécute pour toutes les applications du banc, après les after_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_permission sur 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.

Ce hook peut exposer des fichiers privés à des utilisateurs non autorisés. Déclarez-le uniquement dans une application qui contrôle elle-même l'accès aux fichiers, et testez-le d'abord sur un site de test.

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).

HookUsage
doc_eventsAppeler une fonction aux événements d'un type de document (validate, on_update, on_submit, on_cancel, on_trash…)
scheduler_eventsTâches planifiées (daily, hourly, weekly, cron…)
override_doctype_classRemplacer la classe Python d'un type de document
extend_doctype_classAjouter des méthodes à la classe Python d'un type de document, sans la remplacer. Plusieurs applications peuvent étendre la même classe
override_whitelisted_methodsRemplacer une méthode appelable par l'API
doctype_js, doctype_list_js, doctype_tree_js, doctype_calendar_jsAjouter du JavaScript au formulaire, à la liste, à l'arborescence ou au calendrier d'un type de document
boot_sessionAjouter des données à la session chargée au démarrage du bureau
on_login, on_logoutRéagir à la connexion et à la déconnexion
before_request, after_requestExécuter du code avant et après chaque requête HTTP
before_migrate, after_migrateExécuter du code avant et après bench migrate
after_install, after_app_install, before_app_uninstallRéagir à l'installation de l'application, à l'installation d'une autre application, à la désinstallation

Autres hooks documentés