Upgrade configuration and Docker stack to v2.0.0

This commit is contained in:
2026-06-22 14:49:56 -04:00
parent 2f2a5e9b4a
commit 0d2ecbd218
19 changed files with 779 additions and 495 deletions
+56
View File
@@ -1,6 +1,9 @@
"""
Client Redis partagé — pool de connexions async pour ARQ et Pub/Sub.
Inclut le parsing d'URL Redis centralisé pour éviter la duplication.
"""
from typing import Tuple, Optional
from redis.asyncio import ConnectionPool, Redis
from app.config import settings
@@ -8,10 +11,63 @@ from app.config import settings
_pool: ConnectionPool | None = None
def parse_redis_url(url: str | None = None) -> Tuple[str, int, Optional[str], int]:
"""
Parse une URL Redis en (host, port, password, database).
Format accepté : redis://[user:password@]host[:port][/db]
Retourne ('localhost', 6379, None, 0) si l'URL est vide.
"""
if url is None:
url = settings.REDIS_URL
if not url:
return "localhost", 6379, None, 0
if url.startswith("redis://"):
url = url[8:]
if url.startswith("rediss://"):
url = url[9:]
password: Optional[str] = None
if "@" in url:
auth_part, url = url.rsplit("@", 1)
if ":" in auth_part:
password = auth_part.split(":", 1)[1]
else:
password = auth_part
database = 0
if "/" in url:
host_port, db_str = url.split("/", 1)
if db_str:
try:
database = int(db_str)
except ValueError:
pass
else:
host_port = url
host = "localhost"
port = 6379
if ":" in host_port:
host, port_str = host_port.rsplit(":", 1)
if port_str:
try:
port = int(port_str)
except ValueError:
port = 6379
else:
host = host_port or "localhost"
return host, port, password, database
async def get_redis_pool() -> Redis:
"""Retourne un client Redis avec pool de connexions partagé."""
global _pool
if _pool is None:
host, port, password, database = parse_redis_url()
_pool = ConnectionPool.from_url(
settings.REDIS_URL,
max_connections=20,