Aller au contenu

Le gestionnaire de backend de session dans Forge

Ce document décrit comment Forge choisit le backend de session actif.
Le fichier de code correspondant est core/sessions/manager.py.

1. Rôle

Forge propose plusieurs backends de session : mémoire, fichier, MariaDB.
À un instant donné, un seul backend est actif pour toute l'application.

Le gestionnaire expose ce backend actif et permet d'en injecter un autre.
Sans configuration, le backend actif est un MemorySessionStore mono-processus.

L'injection se fait normalement au câblage de l'application, via forge.configure(session_store=...), qui appelle set_session_store(...) en interne.

2. Vue d'ensemble rapide

Élément Valeur
Module core.sessions.manager
Couche Sessions
Rôle exposer et injecter le backend de session actif
API publique get_session_store(), set_session_store(store)
Backend par défaut MemorySessionStore (mono-processus)
Contrat respecté par store SessionStore
Appelé par forge.configure(session_store=...)

Le gestionnaire conserve un état de module : un backend par défaut figé et un backend configuré optionnel.

3. Schémas UML

3.1 Diagramme de séquence

Le diagramme montre l'ordre des opérations entre le câblage de l'application et la lecture du backend actif.

sequenceDiagram
    participant App as Application
    participant Manager as core.sessions.manager
    participant Store as Backend de session

    App->>Manager: set_session_store(FileSessionStore(...))
    Manager->>Manager: mémorise le backend configuré
    Note over Manager: à l'import, un MemorySessionStore par défaut existe déjà

    App->>Manager: get_session_store()
    alt un backend a été configuré
        Manager-->>App: backend configuré
    else aucun backend configuré
        Manager-->>App: MemorySessionStore par défaut
    end

À retenir :

  • le backend par défaut existe dès l'import du module ;
  • set_session_store(...) remplace le backend actif ;
  • set_session_store(None) réinitialise au backend mémoire par défaut ;
  • get_session_store() renvoie le backend configuré, sinon le backend par défaut.

4. API publique

Fonction Signature Rôle
get_session_store get_session_store() -> SessionStore retourne le backend de session actif
set_session_store set_session_store(store: SessionStore | None) -> None fixe le backend actif ; None réinitialise au backend mémoire par défaut

5. Contextes d'utilisation

Besoin Élément
Lire le backend actif get_session_store()
Brancher un backend persistant au démarrage set_session_store(FileSessionStore(...))
Réinitialiser au backend par défaut (tests) set_session_store(None)

6. Exemples d'utilisation

Brancher le backend fichier au câblage de l'application.

from core.sessions.file_store import FileSessionStore
from core.sessions.manager import get_session_store, set_session_store

set_session_store(FileSessionStore(sessions_dir="storage/sessions"))

store = get_session_store()   # le backend actif est maintenant FileSessionStore
session_id = store.create()

Réinitialiser au backend par défaut, utile entre deux tests.

from core.sessions.manager import set_session_store

set_session_store(None)   # revient au MemorySessionStore par défaut

Voir aussi