init: EasyScreen 电子菜单系统
- server: FastAPI 后端(多屏管理、素材上传、节目编排、客户端注册/配置/心跳/崩溃上报、管理台托管) - android: Java 客户端(minSdk 23,全屏图片/视频轮播、远程配置、开机自启、崩溃上报) - web: React + Vite + antd 管理台(屏幕/素材/节目管理) - 屏幕设备 ID 关联机制、gunicorn 生产部署脚本
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
"""应用配置:读取 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"]
|
||||
Reference in New Issue
Block a user