"""应用配置:读取 settings.json,支持多数据源切换(不硬编码连接信息)。""" import json import os from functools import lru_cache BASE_DIR = os.path.dirname(os.path.abspath(__file__)) DEFAULT_SETTINGS_PATH = os.path.join(os.path.dirname(BASE_DIR), "settings.json") @lru_cache(maxsize=1) def load_settings() -> dict: path = os.environ.get("EASYSCREEN_SETTINGS", DEFAULT_SETTINGS_PATH) with open(path, "r", encoding="utf-8") as f: return json.load(f) def get_active_db() -> dict: settings = load_settings() name = settings["active_db"] return settings["databases"][name] def get_database_url() -> str: db = get_active_db() if db["type"] == "sqlite": return f"sqlite:///{os.path.join(os.path.dirname(BASE_DIR), db['path'])}" if db["type"] == "mysql": password = db.get("password", "") auth = db["user"] if not password else f"{db['user']}:{password}" return ( f"mysql+pymysql://{auth}@{db['host']}:{db['port']}/" f"{db['database_name']}?charset={db.get('charset', 'utf8mb4')}" ) raise ValueError(f"不支持的数据库类型: {db['type']}") def get_server_config() -> dict: return load_settings()["server"] def get_admin_config() -> dict: return load_settings()["admin"]