Nouveau bouton dans le topbar de l'éditeur, à côté d'Aperçu, qui ouvre une modale listant les thèmes du catalogue (document_engine/themes/). Cliquer un thème charge un VRAI aperçu (rendu serveur réel dans un iframe, jamais une resucée CSS côté client) avec le choix de garder le contenu actuel ou de le remplacer par le contenu de démonstration du modèle. Architecture pensée pour une centaine de thèmes futurs : chaque thème est une feuille de style externe (static/document/themes/<id>.css) qui habille les classes fixes du moteur, jamais du code qui en changerait la structure. Premier thème implémenté pour valider le mécanisme : "Sécurité Incendie" (6 pages de contenu réel, quiz inclus). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
41 lines
1.8 KiB
Python
41 lines
1.8 KiB
Python
# Whitelist Vulture — faux positifs STRUCTURELS uniquement (jamais une
|
|
# excuse pour ignorer du vrai code mort). Vulture ne "voit" pas qu'un nom
|
|
# est utilise par CONVENTION (une route Flask enregistree par decorateur
|
|
# et jamais appelee directement en Python, un hook appele par son nom par
|
|
# le framework, un champ lu dynamiquement via getattr/**kwargs...) : ce
|
|
# fichier reference ces noms pour les faire compter comme "utilises",
|
|
# sans jamais etre execute lui-meme (voir CODE_QUALITY.md, section
|
|
# Vulture, pour la procedure de mise a jour).
|
|
#
|
|
# Vide pour l'instant — rempli en Phase 3 au fur et a mesure des VRAIS
|
|
# faux positifs releves par le rapport de la Phase 2, jamais en avance de
|
|
# phase.
|
|
|
|
# app.py::from core import (auth_guard, csrf, csrf_guard, db_teardown_guard,
|
|
# jinja_filters, recovery_codes_flash) — chacun est un module importe pour
|
|
# son SEUL effet de bord a l'import (enregistrement d'un hook/filtre Jinja
|
|
# aupres de Flask), jamais reference par son nom ensuite ; deja marque
|
|
# # noqa: F401 pour ruff/pyflakes, mais Vulture ne lit pas noqa.
|
|
from core import (
|
|
auth_guard,
|
|
csrf,
|
|
csrf_guard,
|
|
db_teardown_guard,
|
|
jinja_filters,
|
|
recovery_codes_flash,
|
|
)
|
|
|
|
_ = (auth_guard, csrf, csrf_guard, db_teardown_guard, jinja_filters, recovery_codes_flash)
|
|
|
|
# routes/document/document_theme_preview.py::document_theme_preview(slug, theme_id) —
|
|
# `slug` doit rester dans la signature (Flask appelle la vue avec un
|
|
# kwarg par segment <slug>/<theme_id> de la route, TypeError sinon), mais
|
|
# le corps de la fonction ne s'en sert pas : l'aperçu d'un thème ne
|
|
# dépend d'aucune donnée DU support, `slug` ne sert qu'à laisser
|
|
# core/auth_guard.py (générique sur `request.view_args.get("slug")`)
|
|
# vérifier la propriété avant d'atteindre la vue.
|
|
|
|
|
|
def _unused_but_required_route_param(slug: str) -> None:
|
|
_ = slug
|