58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
"""Shared settings for API and Worker services."""
|
|
|
|
import os
|
|
from typing import Optional
|
|
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class SharedSettings(BaseSettings):
|
|
"""Settings shared between API and Worker services."""
|
|
|
|
# Database
|
|
database_url: str = "postgresql+psycopg://postgres:postgres@localhost:5432/xiaoxia_saas"
|
|
database_pool_size: int = 20
|
|
database_max_overflow: int = 40
|
|
database_pool_timeout: int = 30
|
|
database_pool_recycle: int = 3600
|
|
|
|
# Redis
|
|
redis_url: str = "redis://localhost:6379/0"
|
|
|
|
# Celery
|
|
celery_broker_url: str = "redis://localhost:6379/0"
|
|
celery_result_backend: str = "redis://localhost:6379/1"
|
|
|
|
# OSS Aliyun
|
|
oss_endpoint: str = "oss-cn-hangzhou.aliiyuncs.com"
|
|
oss_access_key_id: str = ""
|
|
oss_access_key_secret: str = ""
|
|
oss_bucket_name: str = "xiaoxia-autocut"
|
|
|
|
# Environment
|
|
environment: str = "development"
|
|
auto_create_schema: bool = False
|
|
|
|
model_config = SettingsConfigDict(
|
|
env_file=".env",
|
|
env_file_encoding="utf-8",
|
|
case_sensitive=False,
|
|
extra="ignore",
|
|
)
|
|
|
|
|
|
_settings: Optional[SharedSettings] = None
|
|
|
|
|
|
def get_shared_settings() -> SharedSettings:
|
|
"""Get shared settings instance (global singleton)."""
|
|
global _settings
|
|
if _settings is None:
|
|
env = os.getenv("APP_ENV", "development")
|
|
env_file = f".env.{env}" if env != "development" else ".env"
|
|
if os.path.exists(env_file):
|
|
_settings = SharedSettings(_env_file=env_file)
|
|
else:
|
|
_settings = SharedSettings()
|
|
return _settings
|