import os import redis from typing import Optional class Env: REDIS_HOST: str = os.getenv("REDIS_HOST", "redis") REDIS_PORT: int = int(os.getenv("REDIS_PORT", "6379")) REDIS_DB: int = int(os.getenv("REDIS_DB", "0")) REDIS_USERNAME: Optional[str] = os.getenv("REDIS_USERNAME") REDIS_PASSWORD: Optional[str] = os.getenv("REDIS_PASSWORD") REDIS_STREAM_PUBLISH: str = os.getenv("REDIS_STREAM_PUBLISH", "DEFAULT:REGISTER:DONTUSE") REDIS_STREAM_TASKS: str = os.getenv("REDIS_STREAM_TASKS", "DEFAULT:REGISTER:DONTUSE") BATCH_SIZE: int = int(os.getenv("BATCH_SIZE", "5")) MAX_RETRIES: int = int(os.getenv("MAX_RETRIES", "3")) IDLE_RECLAIM_MS: int = int(os.getenv("IDLE_RECLAIM_MS", "30000")) SQLITE_PATH: str = os.getenv("SQLITE_PATH", "/app/data/queue.db") class RedisConfig: def __init__( self, host: str = Env.REDIS_HOST, port: int = Env.REDIS_PORT, db: int = Env.REDIS_DB, username: Optional[str] = Env.REDIS_USERNAME, password: Optional[str] = Env.REDIS_PASSWORD, batch_size: int = Env.BATCH_SIZE, max_retries: int = Env.MAX_RETRIES, idle_reclaim_ms: int = Env.IDLE_RECLAIM_MS, ): self.host = host self.port = port self.db = db self.username = username self.password = password self.batch_size = batch_size self.max_retries = max_retries self.idle_reclaim_ms = idle_reclaim_ms def client(self) -> redis.Redis: return redis.Redis( host=self.host, port=self.port, db=self.db, username=self.username, password=self.password, )