Structure d'une application
Structure d'une application
Une application Dodock est un package Python qui étend le framework. Elle s'installe dans le dossier apps/ du bench. La commande bench new-app mon_app crée la structure ci-dessous.
Arborescence
mon_app/
├── mon_app/
│ ├── __init__.py # Contient __version__
│ ├── hooks.py # Configuration et points d'extension
│ ├── modules.txt # Liste des modules
│ ├── patches.txt # Migrations de données
│ ├── patches/ # Code des correctifs
│ ├── config/
│ │
│ ├── templates/ # Templates Jinja (emails, impressions)
│ │ ├── includes/
│ │ └── pages/
│ │
│ ├── www/ # Pages du portail web public
│ │ └── ma_page.html
│ │
│ ├── public/ # Assets statiques servis par le navigateur
│ │ ├── css/
│ │ └── js/
│ │
│ └── mon_module/ # Module métier
│ ├── __init__.py
│ ├── doctype/ # DocTypes du module
│ └── report/ # Rapports du module
│
├── pyproject.toml # Package Python et dépendances
├── package.json # Dépendances Node.js (facultatif, à ajouter)
├── license.txt
├── README.md
└── .pre-commit-config.yaml
Le premier module porte le titre de l'application : bench new-app crée le dossier mon_app/mon_app/mon_app/ et l'ajoute à modules.txt.
Dossiers principaux
| Dossier | Contenu |
|---|---|
templates/ | Templates Jinja pour emails, impressions PDF, snippets réutilisables |
templates/includes/ | Fragments HTML réutilisables dans d'autres templates |
www/ | Pages web publiques accessibles sans authentification |
public/ | Fichiers statiques (CSS, JS, images) servis au navigateur |
[module]/ | Module métier contenant DocTypes et rapports |
[module]/doctype/ | Définitions et contrôleurs des DocTypes |
[module]/report/ | Rapports personnalisés (script reports) |
Fichiers à la racine
| Fichier | Rôle |
|---|---|
pyproject.toml | Configuration du package Python : nom, version, dépendances |
package.json | Dépendances Node.js pour les assets frontend (facultatif) |
license.txt | Licence de l'application |
README.md | Présentation de l'application |
Les fichiers setup.py, requirements.txt et MANIFEST.in des anciennes versions ne sont plus créés.
Fichiers de configuration
hooks.py
Point d'entrée de l'application. Contient les métadonnées et la configuration des extensions.
app_name = "mon_app"
app_title = "Mon Application"
app_publisher = "Mon Entreprise"
app_description = "Description de l'application"
app_email = "contact@example.com"
app_license = "mit"
required_apps = ["frappe"]
required_apps liste les applications nécessaires. Le nom technique de Dodock est frappe, celui de Dokos est erpnext. La version de l'application est dans mon_app/__init__.py (__version__ = "0.0.1"). Pour la liste des hooks, voir Référence des hooks.
modules.txt
Liste des modules de l'application, un par ligne. Chaque module correspond à un dossier contenant des DocTypes et rapports.
Mon Module
Autre Module
patches.txt
Liste des correctifs (migrations de données) exécutés par bench migrate. Chaque correctif ne s'exécute qu'une fois par site. Le fichier a deux sections :
[pre_model_sync]: correctifs exécutés avant la mise à jour des DocTypes.[post_model_sync]: correctifs exécutés après la mise à jour des DocTypes.
[pre_model_sync]
mon_app.patches.v1_0.migration_initiale
[post_model_sync]
mon_app.patches.v1_1.remplir_nouveau_champ
Chaque ligne désigne un module qui contient une fonction execute().
Structure d'un DocType
Chaque DocType possède son propre dossier :
mon_doctype/
├── mon_doctype.json # Définition (champs, permissions)
├── mon_doctype.py # Contrôleur Python
├── mon_doctype.js # Script client
├── mon_doctype_list.js # Vue liste (facultatif)
└── test_mon_doctype.py # Tests
| Fichier | Rôle |
|---|---|
.json | Schéma du DocType : champs, options, permissions |
.py | Logique métier côté serveur (validation, événements) |
.js | Comportement de l'interface utilisateur |
_list.js | Personnalisation de la vue liste |
test_*.py | Tests automatisés |