from typing import Optional from pydantic import Field, NonNegativeInt, PositiveFloat, PositiveInt from pydantic_settings import BaseSettings class RedisConfig(BaseSettings): """ Configuration settings for Redis connection """ REDIS_HOST: str = Field( description="Hostname or IP address of the Redis server", default="localhost", ) REDIS_PORT: PositiveInt = Field( description="Port number on which the Redis server is listening", default=6379, ) REDIS_USERNAME: Optional[str] = Field( description="Username for Redis authentication (if required)", default=None, ) REDIS_PASSWORD: Optional[str] = Field( description="Password for Redis authentication (if required)", default=None, ) REDIS_DB: NonNegativeInt = Field( description="Redis database number to use (0-15)", default=0, ) REDIS_USE_SSL: bool = Field( description="Enable SSL/TLS for the Redis connection", default=False, ) REDIS_USE_SENTINEL: Optional[bool] = Field( description="Enable Redis Sentinel mode for high availability", default=False, ) REDIS_SENTINELS: Optional[str] = Field( description="Comma-separated list of Redis Sentinel nodes (host:port)", default=None, ) REDIS_SENTINEL_SERVICE_NAME: Optional[str] = Field( description="Name of the Redis Sentinel service to monitor", default=None, ) REDIS_SENTINEL_USERNAME: Optional[str] = Field( description="Username for Redis Sentinel authentication (if required)", default=None, ) REDIS_SENTINEL_PASSWORD: Optional[str] = Field( description="Password for Redis Sentinel authentication (if required)", default=None, ) REDIS_SENTINEL_SOCKET_TIMEOUT: Optional[PositiveFloat] = Field( description="Socket timeout in seconds for Redis Sentinel connections", default=0.1, )