站点配置(百世密码/韵达账密/安能路径)从 config.yaml 移至 state.db

- state_store:加 site_settings(site,key,value) 表 + get_setting/set_setting/get_site_settings
- runtime:seed_legacy_config 启动一次性从 config.yaml 灌入(已存在不覆盖);安能 app_path 改读 state_store
- site_baishi:导出密码改读 get_setting("百世","password")
- site_yunda:登录账密改读 get_setting("韵达",...)
- server:/config PUT 接受 settings;新增 GET /config/{site}/settings(不进 5s 轮询)

debug 仍保留在 config.yaml;站点配置现由前端配置弹窗管理(state.db 为准)。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-07-18 08:37:15 +08:00
parent 96e7018146
commit 6d45a9f5e5
5 changed files with 100 additions and 35 deletions

View File

@@ -17,7 +17,7 @@ import queue
import threading
import time
from contextlib import asynccontextmanager
from typing import Optional
from typing import Dict, Optional
import uvicorn
from apscheduler.schedulers.background import BackgroundScheduler
@@ -190,6 +190,7 @@ class ConfigRequest(BaseModel):
actual_offset: Optional[int] = None
schedule_enabled: Optional[bool] = None
schedule_time: Optional[str] = None
settings: Optional[Dict[str, str]] = None
def _default_cfg():
@@ -236,7 +237,21 @@ def set_config(site: str, req: ConfigRequest):
)
state_store.set_schedule(site, enabled, time_str)
_reschedule_site(site)
return state_store.get_all_config().get(site, _default_cfg())
# 站点专属配置(密码/账号/路径…)
if req.settings:
for k, v in req.settings.items():
state_store.set_setting(site, k, v)
cfg = state_store.get_all_config().get(site, _default_cfg())
cfg["settings"] = state_store.get_site_settings(site)
return cfg
@app.get("/config/{site}/settings")
def get_site_settings_api(site: str):
"""单站专属配置(密码/账号/路径…;不进 5s 轮询)。"""
if site not in ALL_SITES:
raise HTTPException(status_code=400, detail=f"未知站点: {site}")
return state_store.get_site_settings(site)
REPORT_FILE = "应到未到数据.xlsx"