refactor(platforms): 学习流程下沉到平台层,engine 只保留编排
SessionExpired 移到 platforms/errors.py;旧版流程(_study_builtin)搬到 jspx.py,新版 SPA 流程(run_study_course + 视频)搬到 study.py;engine.py 只剩账号级编排,不再 import 具体平台;routes/quiz 去掉平台 star import,session/dump_cookies 缺失时明确报错。顺带修复学习链路三处未定义全局名(jspx/study/quiz)。
This commit is contained in:
@@ -8,12 +8,11 @@ from study_tool.webapp import app
|
||||
from study_tool import store
|
||||
from study_tool.capture import *
|
||||
from study_tool.config import *
|
||||
from study_tool.engine import *
|
||||
from study_tool.engine import study_worker
|
||||
from study_tool.models import *
|
||||
from study_tool.platforms import registry
|
||||
from study_tool.platforms.jspx import *
|
||||
from study_tool.platforms.study import *
|
||||
from study_tool.runtime import RUNS, RUNS_LOCK, log
|
||||
from study_tool.platforms.errors import SessionExpired
|
||||
from study_tool.runtime import RUNS, RUNS_LOCK, log, set_state
|
||||
from study_tool.settings_store import load_settings
|
||||
|
||||
# ------------------------------------------------------------------ 平台
|
||||
@@ -74,10 +73,13 @@ def api_courses(b: CookiesIn):
|
||||
return JSONResponse({"ok": False, "code": "no_platform",
|
||||
"error": "平台「%s」还没有实现刷新课程,请先在 platforms/ 里补上"
|
||||
% b.platform}, status_code=200)
|
||||
s = (pf.session or new_session)(b.cookies)
|
||||
if pf.session is None:
|
||||
return JSONResponse({"ok": False, "code": "no_platform",
|
||||
"error": "平台「%s」还没有实现 session" % b.platform}, status_code=200)
|
||||
s = pf.session(b.cookies)
|
||||
if not s.cookies:
|
||||
return JSONResponse({"ok": False, "code": "no_cookie",
|
||||
"error": "保存的 cookie 全部被过滤(domain 不含 dgjy),请重新登录"},
|
||||
"error": "保存的 cookie 全部被过滤(站点域名不匹配),请重新登录"},
|
||||
status_code=200)
|
||||
try:
|
||||
courses = pf.list_courses(s)
|
||||
@@ -96,7 +98,7 @@ def api_courses(b: CookiesIn):
|
||||
return {"ok": True, "courses": courses, "user": user,
|
||||
"in_study": len([c for c in courses if c["in_study"]]),
|
||||
# 补 jspx 会话时 cookie 会换新(JSESSIONID/route),回传让前端写回
|
||||
"cookies": (pf.dump_cookies or dump_cookies)(s)}
|
||||
"cookies": (pf.dump_cookies(s) if pf.dump_cookies else [])}
|
||||
|
||||
|
||||
@app.post("/api/discover")
|
||||
@@ -105,10 +107,13 @@ def api_discover(b: DiscoverIn):
|
||||
if pf is None or pf.discover is None:
|
||||
return JSONResponse({"ok": False, "code": "no_platform",
|
||||
"error": "平台「%s」还没有实现课程发现" % b.platform}, status_code=200)
|
||||
s = (pf.session or new_session)(b.cookies)
|
||||
if pf.session is None:
|
||||
return JSONResponse({"ok": False, "code": "no_platform",
|
||||
"error": "平台「%s」还没有实现 session" % b.platform}, status_code=200)
|
||||
s = pf.session(b.cookies)
|
||||
try:
|
||||
d = pf.discover(s, b.plan_id, b.project_id, b.name)
|
||||
return {"ok": True, **d, "cookies": (pf.dump_cookies or dump_cookies)(s)}
|
||||
return {"ok": True, **d, "cookies": (pf.dump_cookies(s) if pf.dump_cookies else [])}
|
||||
except Exception as e:
|
||||
return JSONResponse({"ok": False, "error": str(e)[:300]}, status_code=200)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user