refactor(plugins): 莞易学迁到 pugins/guanyixue
- platforms/guanyixue.py → pugins/guanyixue/main.py - jspx.py / study.py / detect.py 一并搬进插件目录,插件自包含: 热重载会把实现模块一起重新 import,不再是半截插件 - 导入路径改成 study_tool.pugins.guanyixue.*;quiz.py 两处引用同步更新 - platforms/__init__.py 只剩运行时,load_builtin() 只调 load_plugins() - 新增 pugins/guanyixue/pugin.json(id / title / name) - 同步 AGENTS.md、docs/architecture.md、docs/pugin.md、docs/OPTIMIZATION.md
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
"""平台包。
|
||||
|
||||
平台实现有两个落点,写法和契约完全一样(`Platform` 子类 + 注册一次):
|
||||
这里放平台**运行时**:`Platform` 契约(`base.py`)、能力映射(`contract.py`)、
|
||||
错误类型(`errors.py`)、注册表(`registry.py`)。
|
||||
|
||||
- `pugins/<名字>/`:插件式平台(`pugin.json` + `main.py`),由 `study_tool.pugins.load_plugins()`
|
||||
扫描加载,新增插件不需要改这里的任何代码;
|
||||
- `platforms/<名字>.py`:跟共享实现模块(`jspx.py` / `study.py`)关系紧密的平台,直接在
|
||||
`load_builtin()` 里 import。
|
||||
平台实现都放在插件目录 `pugins/<名字>/`(`pugin.json` + `main.py`,可以再拆实现模块),
|
||||
由 `study_tool.pugins.load_plugins()` 扫描加载;新增或迁移插件都不用改这里的代码。
|
||||
要是有多个插件共用的实现模块,才放回本目录。
|
||||
|
||||
路由 / 引擎不用改 —— 它们只认 `course["platform"]`。
|
||||
"""
|
||||
@@ -14,7 +14,6 @@ from study_tool.platforms.base import Platform # noqa: F401
|
||||
|
||||
|
||||
def load_builtin():
|
||||
"""导入内置平台与 `pugins/` 下的插件,触发注册。幂等,app 启动时调用一次。"""
|
||||
from study_tool.platforms import guanyixue # noqa: F401
|
||||
"""加载 `pugins/` 下的全部插件(导入即注册)。幂等,app 启动时调用一次。"""
|
||||
from study_tool.pugins import load_plugins
|
||||
load_plugins()
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
"""莞易学插件:`main.py` 注册平台,`jspx.py` 旧版页面、`study.py` 新版 SPA、`detect.py` 代际识别。"""
|
||||
@@ -15,7 +15,7 @@ from bs4 import BeautifulSoup
|
||||
|
||||
from study_tool.config import *
|
||||
from study_tool.platforms import registry
|
||||
from study_tool.platforms.detect import detect_generation, has_study_marker
|
||||
from study_tool.pugins.guanyixue.detect import detect_generation, has_study_marker
|
||||
from study_tool.runtime import RUNS, RUNS_LOCK, log, set_state
|
||||
|
||||
# ------------------------------------------------------------------------ crypto
|
||||
@@ -301,7 +301,7 @@ def ensure_study_session(s, force=False):
|
||||
-> {"result":{"url":".../training","token":"<jwt>"}} # 这才是 Middle-Token
|
||||
成功标准只有一个:cookie 里出现 study.dgjy.net 的 Middle-Token。
|
||||
"""
|
||||
from study_tool.platforms.study import _study_token
|
||||
from study_tool.pugins.guanyixue.study import _study_token
|
||||
if force:
|
||||
for c in list(s.cookies):
|
||||
if c.name == "Middle-Token":
|
||||
@@ -369,7 +369,7 @@ def _fetch_train_token(s):
|
||||
|
||||
def _exchange_code(s, code):
|
||||
"""code -> Middle-Token。前端是 POST /mod/gjt/login/<code>,再取 gyx 培训 token。"""
|
||||
from study_tool.platforms.study import _study_token
|
||||
from study_tool.pugins.guanyixue.study import _study_token
|
||||
paths = ("/mod/gjt/login/%s", "/train/mod/gjt/login/%s")
|
||||
for path in paths:
|
||||
try:
|
||||
@@ -557,7 +557,7 @@ def discover(s, plan, project, name=""):
|
||||
|
||||
def _discover_once(s, plan, project, name=""):
|
||||
# study.py 反向 import 本模块,模块级 import 会成环,用到时再取
|
||||
from study_tool.platforms.study import (StudyClient, discover_study, extract_study_token,
|
||||
from study_tool.pugins.guanyixue.study import (StudyClient, discover_study, extract_study_token,
|
||||
extract_train_id, save_snapshot,
|
||||
study_resolve_train_id)
|
||||
url = "%s/train/trainee/courseStudyMain.action?planId=%s&projectId=%s&trainRole=0" % (JSPX, plan, project)
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
`course["generation"]`(legacy / spa),由 `study` 分发到对应实现。
|
||||
新增其他平台时,照本文件写一个 `Platform` 子类并在 `entries` 声明登录 / 学习入口。
|
||||
"""
|
||||
from study_tool.platforms import jspx, registry, study
|
||||
from study_tool.platforms import registry
|
||||
from study_tool.pugins.guanyixue import jspx, study
|
||||
from study_tool.platforms.base import Platform
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"id": "guanyixue",
|
||||
"title": "莞易学(东莞市教师培训平台)",
|
||||
"name": "guanyixue"
|
||||
}
|
||||
@@ -9,7 +9,7 @@ from bs4 import BeautifulSoup
|
||||
|
||||
from study_tool import store
|
||||
from study_tool.config import *
|
||||
from study_tool.platforms.jspx import *
|
||||
from study_tool.pugins.guanyixue.jspx import *
|
||||
from study_tool.runtime import RUNS, log, set_state
|
||||
|
||||
# ------------------------------------------------------- 新版平台:页面识别/提取
|
||||
|
||||
@@ -12,8 +12,8 @@ from study_tool.config import *
|
||||
from study_tool.llm import *
|
||||
from study_tool.models import *
|
||||
from study_tool.platforms import registry
|
||||
from study_tool.platforms.jspx import new_session, parse_ids
|
||||
from study_tool.platforms.study import StudyClient
|
||||
from study_tool.pugins.guanyixue.jspx import new_session, parse_ids
|
||||
from study_tool.pugins.guanyixue.study import StudyClient
|
||||
from study_tool.runtime import log
|
||||
|
||||
# ------------------------------------------------------------------ quiz
|
||||
|
||||
Reference in New Issue
Block a user