fix(config): rend le serveur SQL configurable en développement

Le repli de développement pointait en dur sur LaptopCA\SQLEXPRESS,
ce qui rendait l'API inutilisable sur toute autre machine sans éditer
le code. Le serveur vient désormais de DB_SERVER (défaut localhost),
et DB_TRUSTED_CONNECTION permet de forcer l'authentification Windows.

DB_PORT peut rester vide : une instance nommée (MonPoste\SQLEXPRESS)
se joint sans port explicite.
This commit is contained in:
2026-08-15 14:28:34 +02:00
parent 959b4d76f7
commit 7b3c91509f
+30 -19
View File
@@ -10,27 +10,38 @@ from contextlib import contextmanager
def _build_connection_string() -> str:
"""
En déploiement (variables d'environnement présentes), on se connecte en
authentification SQL. Sinon, on garde la connexion Windows locale par défaut
(poste de dev).
Construit la chaîne de connexion ODBC à partir des variables
d'environnement.
Deux modes d'authentification :
• authentification SQL (déploiement) — dès que DB_USER est défini ;
• authentification Windows (poste de dev) — sinon, ou en forçant
DB_TRUSTED_CONNECTION=yes.
Le serveur par défaut reste modifiable par DB_SERVER : coder en dur le
nom d'un poste rendait l'API inutilisable sur toute autre machine.
"""
server = os.getenv("DB_SERVER")
if server:
driver = os.getenv("DB_DRIVER", "ODBC Driver 18 for SQL Server")
port = os.getenv("DB_PORT", "1433")
return (
f"Driver={{{driver}}};"
f"Server={server},{port};"
f"Database={os.getenv('DB_NAME', 'DataSentinel')};"
f"UID={os.getenv('DB_USER')};"
f"PWD={os.getenv('DB_PASSWORD')};"
"Encrypt=yes;TrustServerCertificate=yes;"
)
server = os.getenv("DB_SERVER", "localhost")
port = os.getenv("DB_PORT", "")
base = os.getenv("DB_NAME", "DataSentinel")
driver = os.getenv("DB_DRIVER", "ODBC Driver 18 for SQL Server")
user = os.getenv("DB_USER")
# Une instance nommée (MonPoste\SQLEXPRESS) se joint sans port explicite.
adresse = f"{server},{port}" if port else server
trusted = os.getenv("DB_TRUSTED_CONNECTION", "").lower() in ("1", "yes", "true")
if user and not trusted:
identification = f"UID={user};PWD={os.getenv('DB_PASSWORD', '')};"
else:
identification = "Trusted_Connection=yes;"
return (
"Driver={ODBC Driver 17 for SQL Server};"
"Server=LaptopCA\\SQLEXPRESS;"
"Database=DataSentinel;"
"Trusted_Connection=yes;"
f"Driver={{{driver}}};"
f"Server={adresse};"
f"Database={base};"
f"{identification}"
"Encrypt=yes;TrustServerCertificate=yes;"
)