# -*- coding: utf-8 -*- import os from typing import Any, Dict, Optional from pydantic import ( AnyHttpUrl, BaseSettings, DirectoryPath, PostgresDsn, SecretStr, validator, ) class Settings(BaseSettings): # SERVER_NAME: str # SERVER_HOST: AnyHttpUrl PLATFORM_HOST: AnyHttpUrl PLATFORM_SECRET: SecretStr TRANSFER_HOST: AnyHttpUrl # WEATHER_HOST: AnyHttpUrl # HTTPS_PROXY: AnyHttpUrl TENCENT_NLP_ENDPOINT: str TENCENT_SECRET_ID_V1: str TENCENT_SECRET_KEY_V1: str DUCKLING_HOST: AnyHttpUrl # PROJECT_DIR: DirectoryPath # LOGS_DIR: DirectoryPath ML_MODELS_DIR: DirectoryPath PROJECT_NAME: str REDIS_HOST: str REDIS_PORT: int REDIS_DB: int REDIS_PASSWORD: str MILVUS_HOST: str MILVUS_PORT: str METRIC_TYPE: str VECTOR_DIMENSION: int POSTGRES_SERVER: str POSTGRES_USER: str POSTGRES_PASSWORD: str POSTGRES_DB: str SQLALCHEMY_DATABASE_URL: Optional[PostgresDsn] = None @validator("SQLALCHEMY_DATABASE_URL", pre=True) def assemble_db_connection(cls, v: Optional[str], values: Dict[str, Any]) -> Any: if isinstance(v, str): return v return PostgresDsn.build( scheme="postgresql", # user=values.get("POSTGRES_USER"), user=os.getenv("POSTGRES_USER", values.get("POSTGRES_USER")), # password=values.get("POSTGRES_PASSWORD"), password=os.getenv("POSTGRES_PASSWORD", values.get("POSTGRES_PASSWORD")), # host=values.get("POSTGRES_SERVER"), host=os.getenv("POSTGRES_SERVER", values.get("POSTGRES_SERVER")), # path=f'/{values.get("POSTGRES_DB") or ""}', path=f'/{os.getenv("POSTGRES_DB", values.get("POSTGRES_DB")) or ""}', ) class Config: case_sensitive = True env_file = ".env" settings = Settings()