- server: FastAPI 后端(多屏管理、素材上传、节目编排、客户端注册/配置/心跳/崩溃上报、管理台托管) - android: Java 客户端(minSdk 23,全屏图片/视频轮播、远程配置、开机自启、崩溃上报) - web: React + Vite + antd 管理台(屏幕/素材/节目管理) - 屏幕设备 ID 关联机制、gunicorn 生产部署脚本
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""应用配置:读取 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"]
|