C'est le système qui recense, vérifie, installe et désinstalle toutes les dépendances externes de Mayan — Python, JavaScript, binaires, fontes. Il offre une interface UI dans le menu Outils pour visualiser l'état de chaque dépendance.
| Classe | Source | Exemple |
|---|---|---|
PythonDependency |
PyPI | django, celery |
JavaScriptDependency |
NPM registry | jquery, select2 |
BinaryDependency |
OS | libreoffice, tesseract |
GoogleFontDependency |
fonts.googleapis.com | polices web |
Chaque type sait comment se vérifier (_check()), se télécharger et s'installer. Pour les JS : téléchargement du .tar NPM → vérification du hash SHA → extraction dans static/<app>/node_modules/.
Chaque app Mayan a un fichier dependencies.py chargé automatiquement via AppsModuleLoaderMixin. Exemple :
PythonDependency(
module='mayan.apps.ocr',
name='tesserocr',
version_string='==2.6.0',
environments=[environment_production],
)
Tout s'auto-enregistre dans Dependency._registry au démarrage.
Permettent de filtrer la liste par app, type (python/js/binary), état (installé/manquant), ou environnement (production/dev). C'est ce qui alimente les vues de navigation dans l'interface admin.
Les quatre groupes définis par défaut :
| Nom | Filtre |
|---|---|
app |
Par app Django qui déclare la dépendance |
class |
Par type (Python, JavaScript, Binary, Google Font) |
state |
Par état (installé / manquant) |
environment |
Par environnement (production, développement, etc.) |
# Vérifier l'état de toutes les dépendances
./manage.py dependencies_check --settings=mayan.settings.development
# Installer les dépendances JS et fontes
./manage.py dependencies_install --settings=mayan.settings.development
| Fichier | Rôle |
|---|---|
classes.py |
Définition de Dependency, DependencyGroup et les 4 sous-classes |
dependencies.py |
(dans chaque app) Déclaration des dépendances de l'app |
environments.py |
Définition des environnements (production, development, etc.) |
algorithms.py |
Algorithmes de hash pour la vérification des téléchargements |
apps.py |
Enregistrement des colonnes UI et liens de menu |