|
|
import os |
|
|
from typing import Dict, Any, Optional |
|
|
|
|
|
from dotenv import dotenv_values |
|
|
from pydantic import BaseModel, ConfigDict |
|
|
from pydantic_settings import BaseSettings |
|
|
|
|
|
def load_env_config(): |
|
|
|
|
|
env_file_config = dotenv_values() |
|
|
env_vars = dict(os.environ) |
|
|
|
|
|
|
|
|
return {**env_file_config, **env_vars} |
|
|
|
|
|
|
|
|
def get_config() -> Dict[str, Any]: |
|
|
env_config = load_env_config() |
|
|
|
|
|
config_model = GlobalConfig.model_construct() |
|
|
|
|
|
|
|
|
final_config = {**config_model.model_dump(), **env_config} |
|
|
|
|
|
return final_config |
|
|
|
|
|
class AppConfig(BaseModel): |
|
|
"""Application configurations.""" |
|
|
|
|
|
app_name: str = "adgen" |
|
|
app_version: str = "0.1.0" |
|
|
app_description: str = ( |
|
|
"Creative AdGenesis" |
|
|
) |
|
|
debug_mode: bool = False |
|
|
|
|
|
|
|
|
class GlobalConfig(BaseSettings): |
|
|
"""Typed global core object.""" |
|
|
APP_CONFIG: AppConfig = AppConfig() |
|
|
model_config = ConfigDict(extra="ignore") |
|
|
|
|
|
|
|
|
APP_ENV: Optional[str] = "dev" |
|
|
DEBUG: Optional[bool] = False |
|
|
|
|
|
MONGO_DB: Optional[str] = None |
|
|
MONGO_URI: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
R2_BUCKET_NAME: Optional[str] = None |
|
|
R2_ACCESS_KEY: Optional[str] = None |
|
|
R2_SECRET_KEY: Optional[str] = None |
|
|
R2_ENDPOINT: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
OPENAI_API_KEY: Optional[str] = None |
|
|
|
|
|
|
|
|
REPLICATE_API_KEY: Optional[str] = None |
|
|
GEMINI_API_KEY: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
BOOK_PDF: Optional[str] = None |
|
|
CSV_FILE: Optional[str] = None |
|
|
JSON_ID: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
NEW_BASE: Optional[str] = None |
|
|
|
|
|
|
|
|
config_data = get_config() |
|
|
cnf = GlobalConfig(**config_data) |
|
|
app_cnf = cnf.APP_CONFIG |