mayan/apps/app_manager/ — fournit MayanAppConfig, la classe de base dont héritent toutes les apps Mayan. C'est le point d'ancrage entre Django et l'infrastructure Mayan.
app_manager ne fait qu'une chose : définir MayanAppConfig, une sous-classe de django.apps.AppConfig qui ajoute :
configure_urls)get_all(), get_by_namespace())MayanAppConfig — la classe de baseChaque app Mayan déclare une classe dans apps.py qui hérite de MayanAppConfig :
# Exemple : mayan/apps/documents/apps.py
class DocumentsApp(MayanAppConfig):
app_namespace = 'documents'
app_url = 'documents'
has_rest_api = True
has_tests = True
name = 'mayan.apps.documents'
verbose_name = _('Documents')
def ready(self):
super().ready() # ← appelle configure_urls() + logge le démarrage
# … enregistrement des links, menus, signals, etc.
| Attribut | Type | Défaut | Rôle |
|---|---|---|---|
app_namespace |
str |
None |
Namespace Django des URLs (ex : 'documents') |
app_url |
str |
None |
Préfixe d'URL (ex : 'documents' → /documents/) |
has_rest_api |
bool |
False |
L'app expose une API REST |
has_tests |
bool |
False |
L'app a des tests (utilisé par le test runner --mayan-apps) |
has_app_translations |
bool |
True |
L'app a des fichiers de traduction |
has_javascript_translations |
bool |
False |
L'app a des traductions JavaScript |
static_media_ignore_patterns |
tuple |
() |
Patterns de fichiers statiques à exclure lors de la collecte |
app_urlValeur de app_url |
URL générée |
|---|---|
'documents' |
/documents/ |
'' (chaîne vide) |
/ (racine) |
None |
/mayan.apps.nom_de_lapp/ (fallback sur le nom Python) |
Le préfixe peut être précédé du ORGANIZATION_URL_BASE_PATH si configuré.
configure_urls() — enregistrement automatique des URLsAppelé dans ready() pour chaque app. Il importe {app.name}.urls.urlpatterns et l'ajoute dynamiquement à mayan.urls.urlpatterns :
# Ce que configure_urls() fait en substance :
mayan_urlpatterns += (
re_path(
route=r'^documents/',
view=include((urlpatterns, 'documents'))
),
)
Deux types d'URL patterns sont supportés :
Variable dans urls.py |
Comportement |
|---|---|
urlpatterns |
Enregistré sous le namespace app_namespace |
passthru_urlpatterns |
Enregistré sans namespace (pour les librairies tierces) |
Si urls.py est absent ou ne définit pas urlpatterns, l'erreur est silencieuse — l'app n'a simplement pas d'URLs.
MayanAppConfig.get_all()Retourne toutes les apps actives qui héritent de MayanAppConfig, triées par verbose_name :
apps = MayanAppConfig.get_all()
# → [AppearanceApp, CheckoutsApp, DocumentsApp, …]
Utilisé par la vue "System apps" dans le menu Outils.
MayanAppConfig.get_by_namespace(namespace)Retrouve une app par son app_namespace. Résultat mis en cache (@cache) :
app = MayanAppConfig.get_by_namespace('documents')
# → DocumentsApp instance
Accessible depuis Outils → System apps, elle liste toutes les apps actives avec :
| Colonne | Source |
|---|---|
| Nom verbose | get_verbose_name() |
| URL | get_app_url() |
| Nom Python | get_name() |
| Chemin complet de la classe | get_app_class_full_path() |
| A une API REST | get_has_rest_api() |
| A des tests | get_has_tests() |
Django charge INSTALLED_APPS
└── pour chaque app : AppConfig.ready()
└── MayanAppConfig.ready()
├── logger.debug('Initializing app: …')
├── configure_urls() ← enregistre les URLs
└── [code de l'app] ← menus, links, signals, SourceColumns…
L'ordre d'initialisation suit l'ordre de INSTALLED_APPS. Dans Mayan, les apps d'infrastructure (app_manager, common, navigation…) sont listées avant les apps métier (documents, acls…).
| Fichier | Contenu |
|---|---|
apps.py |
MayanAppConfig (classe de base) et AppManagerAppConfig |
views.py |
AppListView — liste des apps actives |
links.py |
link_app_list |
urls.py |
URL de la vue app list |