refactor(plugins): gdgxk 迁到 pugins/gdgxk,插件由目录扫描加载
- platforms/gdgxk.py → pugins/gdgxk/main.py(实现不变,仍是 class Gdgxk(Platform)) - pugins/gdgxk/pugin.json 只放注册信息 id / title / name,不声明任何能力绑定 - pugins/__init__.py:load_plugins() 扫 pugins/*/pugin.json、import 各自的 main.py, 再用 pugin.json 的 id 校验注册结果;要换加载方式只改这一个函数 - platforms/__init__.py::load_builtin() 调 load_plugins();guanyixue 依赖 jspx/study, 暂留 platforms/ - engine / routes / quiz / contract / 前端未改动 - 同步 AGENTS.md、docs/architecture.md、docs/OPTIMIZATION.md
This commit is contained in:
@@ -10,11 +10,13 @@
|
||||
|
||||
- `Platform` 从 dataclass「注册时逐项传函数」改成基类:`id` / `label` / `entries` 是类属性,
|
||||
能力是子类方法;没实现的阶段保持基类的 `None`,`capabilities()` 与 `/api/platforms` 不变。
|
||||
- `platforms/gdgxk.py`:`session`(原 `new_session`)/ `login` / `list_courses` / `discover` /
|
||||
`study` 等收进 `class Gdgxk(Platform)`;解析 / 上报类 helper 仍是模块级函数。
|
||||
- `pugins/gdgxk/main.py`(原 `platforms/gdgxk.py`):`session`(原 `new_session`)/ `login` /
|
||||
`list_courses` / `discover` / `study` 等收进 `class Gdgxk(Platform)`;解析 / 上报类 helper
|
||||
仍是模块级函数。
|
||||
- `platforms/guanyixue.py`:改成 `class Guanyixue(Platform)`,方法转调 `jspx` / `study`。
|
||||
- 删掉 `src/study_tool/pugins/` 草稿目录:它和 `platforms/gdgxk.py` 内容重复,
|
||||
`pugin.json` 里「按名字声明 `study` / `entries`」的绑定方式作废,元数据改为类属性。
|
||||
- `pugins/` 改成插件目录:`pugins/<名字>/pugin.json`(只放 `id` / `title` / `name`)+ `main.py`
|
||||
(`Platform` 子类);`pugins/__init__.py::load_plugins()` 扫目录 import,`load_builtin()` 调它。
|
||||
插件里不再声明任何能力绑定。
|
||||
- 引擎 / 路由 / `quiz.py` / 前端 / `platforms/contract.py` 均未改动。
|
||||
- 新增 [docs/pugin.md](plugin.md):插件骨架、槽位契约、新增与迁移流程、常见坑。
|
||||
|
||||
|
||||
+10
-4
@@ -19,7 +19,7 @@ src/study_tool/
|
||||
quiz.py 测验解析 / 交卷 / AI 答题(含 /api/quiz/*)
|
||||
engine.py 账号级编排:课程循环、会话续期、按 platform 分发
|
||||
capture.py 抓包
|
||||
platforms/ 平台插件(见下)
|
||||
platforms/ 平台运行时(见下)
|
||||
base.py Platform 契约(id / label / 槽位 / capabilities)
|
||||
contract.py 生命周期 ↔ 槽位 ↔ 能力名映射
|
||||
errors.py SessionExpired(平台层错误类型)
|
||||
@@ -28,7 +28,11 @@ src/study_tool/
|
||||
guanyixue.py 莞易学平台:合并 jspx 登录入口与 study 学习入口
|
||||
jspx.py 莞易学旧版:会话 / 登录 / 课程抓取 / 旧版学习流程
|
||||
study.py 莞易学新版 SPA:StudyClient / 接口学习 / 视频流程
|
||||
gdgxk.py 广东公需课:SSO 换票 + 视频进度心跳
|
||||
pugins/ 插件式平台(加载器扫目录,新增插件不改代码)
|
||||
__init__.py load_plugins():扫 pugins/*/pugin.json 并 import main.py
|
||||
gdgxk/
|
||||
pugin.json 注册信息:id / title / name(只放元数据)
|
||||
main.py 广东公需课:SSO 换票 + 视频进度心跳
|
||||
routes/ HTTP 接口
|
||||
accounts.py 账号 / 登录 / 登录记录
|
||||
misc.py 课程 / 发现 / 学习 / 停止 / 抓包 / 快照 / 平台列表
|
||||
@@ -53,7 +57,8 @@ script/reference/ 不参与运行的参考脚本:dgjy-toolkit.user.js
|
||||
|
||||
## 平台插件与识别
|
||||
|
||||
平台实现在 `platforms/`,通过注册表注入,`engine` 只按 `course["platform"]` 分发:
|
||||
平台实现在 `platforms/` 或插件目录 `pugins/<名字>/`,都通过注册表注入,`engine` 只按
|
||||
`course["platform"]` 分发:
|
||||
|
||||
```python
|
||||
# engine.run_one_course 末尾
|
||||
@@ -118,7 +123,8 @@ quiz_key / cookies / plan / project / name`。插件可以只取自己需要的
|
||||
|
||||
### 内置:广东公需课
|
||||
|
||||
`id=gdgxk`,`platforms/gdgxk.py` 单文件实现:在 `jsglpt.gds.edu.cn` 登录(账号、密码
|
||||
`id=gdgxk`,`pugins/gdgxk/main.py` 实现(插件目录,`pugin.json` 只放 id / title / name):
|
||||
在 `jsglpt.gds.edu.cn` 登录(账号、密码
|
||||
都是 base64),再用 `ssoItlmsGxkTicket.action` 换票进 `jsxx.gds.edu.cn`;视频按真实
|
||||
流逝时间上报 `updateViewTime1`。没有测验 / 反馈表,所以不实现对应能力。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user