Refactor SRP : decoupage de main.py (Brain) en routers et du SettingsComponent (web)
Brain : main.py (1496 l.) reduit a l'assemblage (~95 l.) ; un router par responsabilite (generation, chat, tables, imports, notebooks, settings, models), factories DI dans api/deps.py, DTOs chat + mapping anti-corruption separes, auto-pull embeddings deplace en infrastructure. Chemins HTTP inchanges. Web : SettingsComponent (729 l.) recentre sur le formulaire (~330 l.) ; sous-composants standalone updates-section (MAJ + licence Patreon + switch canal) et ollama-model-manager (liste/pull/suppression de modeles). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
26
brain/app/api/common.py
Normal file
26
brain/app/api/common.py
Normal file
@@ -0,0 +1,26 @@
|
||||
"""Utilitaires partagés des routers : encodage SSE + garde-fous d'upload PDF."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
|
||||
# Garde-fou taille : un livre de règles dépasse rarement quelques dizaines de Mo.
|
||||
# Au-delà, on refuse (probable erreur d'upload) plutôt que d'OOM le conteneur.
|
||||
MAX_PDF_BYTES = 60 * 1024 * 1024 # 60 Mo
|
||||
|
||||
|
||||
def sse_event(event: str, data: dict) -> str:
|
||||
"""Encode un évènement Server-Sent Events (accents préservés)."""
|
||||
return f"event: {event}\ndata: {json.dumps(data, ensure_ascii=False)}\n\n"
|
||||
|
||||
|
||||
def pdf_upload_error(content: bytes) -> str | None:
|
||||
"""Message d'erreur si l'upload PDF est invalide (vide / trop gros), sinon None.
|
||||
|
||||
Utilisé par les flux SSE, où l'erreur doit partir en évènement `error`
|
||||
plutôt qu'en HTTPException (le flux est déjà ouvert en 200).
|
||||
"""
|
||||
if not content:
|
||||
return "Fichier PDF vide."
|
||||
if len(content) > MAX_PDF_BYTES:
|
||||
return f"PDF trop volumineux (> {MAX_PDF_BYTES // (1024 * 1024)} Mo)."
|
||||
return None
|
||||
Reference in New Issue
Block a user