|
@@ -1,5 +1,5 @@
|
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
-from typing import List
|
|
|
|
|
|
|
+from typing import Any, Dict, List
|
|
|
from dotenv import load_dotenv
|
|
from dotenv import load_dotenv
|
|
|
import os
|
|
import os
|
|
|
load_dotenv()
|
|
load_dotenv()
|
|
@@ -56,12 +56,30 @@ class Settings(BaseSettings):
|
|
|
return nodes
|
|
return nodes
|
|
|
|
|
|
|
|
@property
|
|
@property
|
|
|
|
|
+ def REDIS_SENTINEL_KWARGS(self) -> Dict[str, Any]:
|
|
|
|
|
+ kwargs: Dict[str, Any] = {}
|
|
|
|
|
+ if self.REDIS_SENTINEL_USERNAME:
|
|
|
|
|
+ kwargs["username"] = self.REDIS_SENTINEL_USERNAME
|
|
|
|
|
+ if self.REDIS_SENTINEL_PASSWORD:
|
|
|
|
|
+ kwargs["password"] = self.REDIS_SENTINEL_PASSWORD
|
|
|
|
|
+ return kwargs
|
|
|
|
|
+
|
|
|
|
|
+ @property
|
|
|
def REDIS_SENTINEL_URL(self) -> str:
|
|
def REDIS_SENTINEL_URL(self) -> str:
|
|
|
# Celery sentinel transport 需要 "sentinel://host:port;sentinel://host:port"
|
|
# Celery sentinel transport 需要 "sentinel://host:port;sentinel://host:port"
|
|
|
return ";".join(
|
|
return ";".join(
|
|
|
f"sentinel://{host}:{port}" for host, port in self.REDIS_SENTINEL_NODES
|
|
f"sentinel://{host}:{port}" for host, port in self.REDIS_SENTINEL_NODES
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+ @property
|
|
|
|
|
+ def REDIS_SENTINEL_TRANSPORT_OPTIONS(self) -> Dict[str, Any]:
|
|
|
|
|
+ return {
|
|
|
|
|
+ "master_name": self.REDIS_MASTER_NAME,
|
|
|
|
|
+ "sentinel_kwargs": self.REDIS_SENTINEL_KWARGS,
|
|
|
|
|
+ "password": self.REDIS_PASSWORD,
|
|
|
|
|
+ "db": self.REDIS_DB,
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
model_config = SettingsConfigDict(
|
|
model_config = SettingsConfigDict(
|
|
|
case_sensitive=True,
|
|
case_sensitive=True,
|
|
|
env_file=".env",
|
|
env_file=".env",
|