Architecture

Structure d'une application

Organisation des fichiers et dossiers d'une application Dodock

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

DossierContenu
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

FichierRôle
pyproject.tomlConfiguration du package Python : nom, version, dépendances
package.jsonDépendances Node.js pour les assets frontend (facultatif)
license.txtLicence de l'application
README.mdPré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
FichierRôle
.jsonSchéma du DocType : champs, options, permissions
.pyLogique métier côté serveur (validation, événements)
.jsComportement de l'interface utilisateur
_list.jsPersonnalisation de la vue liste
test_*.pyTests automatisés

Pour aller plus loin

Modèle de données

DocTypes, Documents et métadonnées

Personnalisations

Étendre les DocTypes existants