943acbc573
Durcit la convention de nommage des projets (dérive constatée : 'Sliding Automation', 'code_versioning'... au lieu des formes canoniques). - trilium_api.py : projets_canoniques() lit le référentiel = valeurs du label projet sur les notes de type=projet (source unique, pas de constante en dur). Note-projet CodeVersioning créée (manquait). - mcp_server.py : _valider_projet() branché dans les 6 tools de création (add_decision/history/backlog, new_conversation, create_entite, add_skill). Refuse un projet non canonique (suggestion si faute) ou inconnu (renvoi au processus de création de projet). Ne verrouille pas si référentiel illisible. - lint_audit.py : VAL-nommage aligné sur le référentiel (attrape casse, espace ET snake_case ; l'ancien 'contient un espace' ratait code_versioning). - Données : 79 notes ré-étiquetées vers les 3 formes canoniques. Quality by design : l'erreur de nommage devient impossible à l'écriture, le Lint n'est plus que le filet de sécurité.
34 lines
1.0 KiB
Python
34 lines
1.0 KiB
Python
from __future__ import annotations
|
|
|
|
import http
|
|
from collections.abc import Mapping
|
|
|
|
|
|
class HTTPException(Exception):
|
|
def __init__(self, status_code: int, detail: str | None = None, headers: Mapping[str, str] | None = None) -> None:
|
|
if detail is None:
|
|
detail = http.HTTPStatus(status_code).phrase
|
|
self.status_code = status_code
|
|
self.detail = detail
|
|
self.headers = headers
|
|
|
|
def __str__(self) -> str:
|
|
return f"{self.status_code}: {self.detail}"
|
|
|
|
def __repr__(self) -> str:
|
|
class_name = self.__class__.__name__
|
|
return f"{class_name}(status_code={self.status_code!r}, detail={self.detail!r})"
|
|
|
|
|
|
class WebSocketException(Exception):
|
|
def __init__(self, code: int, reason: str | None = None) -> None:
|
|
self.code = code
|
|
self.reason = reason or ""
|
|
|
|
def __str__(self) -> str:
|
|
return f"{self.code}: {self.reason}"
|
|
|
|
def __repr__(self) -> str:
|
|
class_name = self.__class__.__name__
|
|
return f"{class_name}(code={self.code!r}, reason={self.reason!r})"
|