Aller au contenu

Bonjour Forge Files

Objectif : premier contact avec le module opt-in forge-mvc-files, le pipeline d'upload générique de Forge.

Ce que vous allez apprendre : vérifier que le module répond et inspecter sa politique — racine de stockage (upload_root), extensions, types MIME et taille max autorisés. Aucune base de données : forge-mvc-files est sans état.

Premier palier du niveau débutant de la progression files (vue d'ensemble des starters).

Module opt-in et fondation

forge-mvc-files est l'upload générique extrait du core (ADR-019) ; c'est la fondation sur laquelle forge-mvc-images est bâti. Ce parcours en montre la façade save_upload (documents) puis, au niveau avancé, les primitives que les opt-ins média composent (ADR-020). Installé depuis les sources (palier « Installation »).

Ce que ce starter montre

  • une route texte de premier contact (GET /files-welcome) ;
  • la lecture de la politique d'upload (upload_root, extensions, MIME, taille) ;
  • sa sérialisation JSON (GET /files-welcome/inspect).

Classes Forge utilisées

Classe / fonction Rôle dans ce starter Référence
forge_mvc_files.upload_root Racine de stockage des fichiers. Médias
core.forge.get Lire la politique d'upload (extensions, MIME, taille). Configuration
Response.text / Response.json Renvoyer du texte puis du JSON. Response

Tester

forge run

Ouvrez https://localhost:8000/files-welcome (« Bonjour Forge Files »), puis /files-welcome/inspect pour la politique d'upload en JSON.

Le contrôleur

# mvc/controllers/files_welcome_controller.py
from core.forge import get as get_config
from forge_mvc_files import upload_root


def _capabilities() -> dict:
    return {
        "upload_root": str(upload_root()),
        "allowed_extensions": sorted(get_config("upload_allowed_extensions")),
        "allowed_mime_types": sorted(get_config("upload_allowed_mime_types")),
        "max_size_bytes": int(get_config("upload_max_size")),
    }


class FilesWelcomeController(BaseController):

    @staticmethod
    def index(request: Request) -> Response:
        return Response.text("Bonjour Forge Files")

    @staticmethod
    def inspect(request: Request) -> Response:
        return Response.json(_capabilities())

Comprendre ce code

  • La politique d'upload (extensions, MIME, taille) vit dans la config Forge (core.forge.get) : elle est explicite et modifiable, pas codée en dur.
  • upload_root() donne la racine sous laquelle tout fichier est stocké — tout le reste du parcours s'y rapporte.

À retenir

  • forge-mvc-files est opt-in et sans état : il gère des fichiers sur disque, rien en base.
  • C'est la fondation générique ; image en est le premier client.
  • La politique d'upload est explicite (config).

Après ce starter

Premier contact établi. La suite : stocker un vrai document.

Stocker un document