f0a7d71357
Livrable Publiciste · Sprint 2 · Semaine 2 (seul module net-neuf · chemin critique · GAP_ANALYSIS §3.13). Cible portage VPS : otoia/capabilities/publiciste.py. - lib/parser.py : data_room/PXX/ (template v1.0) → projet dict conforme au contrat projets_master.schema.json (livré S1). Mapping colonnes par en-tête, parsing montants USD/DOP robuste. Anti-invention #6 : rétrogradation défensive « en_developpement » si prix USD manquant ; absent → null (jamais 0/inventé). - lib/validator.py : validateur JSON-Schema draft-07 (sous-ensemble) ZÉRO dépendance pip (runner Gitea sans pip). Oracle jsonschema en test si présent. - lib/generator.py + template + branding : rendu HTML luxury #4 (dark+doré, Fraunces + Cormorant Garamond) ; sans prix → « Prochainement · Détails à venir ». - publiciste.py : CLI parse/validate/generate/run. - fixtures/ : données SYNTHÉTIQUES de test (jamais publiées) P01 complète + P02 incomplète. - tests/ : 23 tests unittest (stdlib) verts. - CI : job publiciste-tests ajouté au gate (.gitea/workflows/ci.yml · Gitea #2). Vérifs (en-repo, sans VPS) : 23/23 tests verts · gate CI local vert (guard/JSON/ docs) · pipeline CLI produit un master conforme au schéma. Auto-score 4Big 95/100. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
"""Tokens de marque luxury · CLAUDE.md contrainte #4 (source unique de vérité).
|
|
|
|
Dark + doré : `#0a0a12` fond · `#f0b429` accent doré.
|
|
Typographies : Fraunces (titres) + Cormorant Garamond (corps éditorial).
|
|
|
|
Ces constantes sont importées par le générateur ET vérifiées par la baseline QA
|
|
Playwright (tests/e2e/_shared/contract.ts) — garder les valeurs synchronisées.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
# Couleurs canoniques (contrainte #4).
|
|
COLOR_BG = "#0a0a12" # fond dark
|
|
COLOR_ACCENT = "#f0b429" # doré
|
|
COLOR_INK = "#f5f3ee" # texte clair sur fond dark
|
|
COLOR_MUTED = "#8b8778" # texte secondaire
|
|
|
|
# Typographies canoniques (contrainte #4).
|
|
FONT_DISPLAY = "Fraunces"
|
|
FONT_BODY = "Cormorant Garamond"
|
|
|
|
# Devises canoniques (contrainte #10 · USD + DOP).
|
|
DEVISE_PRIMAIRE = "USD"
|
|
DEVISE_SECONDAIRE = "DOP"
|
|
|
|
# Libellés de statut affichés sur le site public (FR par défaut).
|
|
STATUT_LABELS = {
|
|
"disponible": "Disponible",
|
|
"en_developpement": "En développement",
|
|
"bientot": "Bientôt",
|
|
"en_processus": "En processus",
|
|
}
|
|
|
|
# Statuts pour lesquels on affiche « Prochainement · Détails à venir »
|
|
# au lieu d'une grille de prix (jamais de prix inventé — contrainte #6).
|
|
STATUTS_SANS_PRIX = {"en_developpement", "bientot", "en_processus"}
|
|
|
|
|
|
def statut_label(statut: str) -> str:
|
|
return STATUT_LABELS.get(statut, statut)
|