|
@@ -6,6 +6,7 @@
|
|
|
- GET /search.html 知识检索页(聚类库 tab 内嵌;API 域名由 .env 注入)
|
|
- GET /search.html 知识检索页(聚类库 tab 内嵌;API 域名由 .env 注入)
|
|
|
- GET /api/dashboard Dashboard 全部聚合指标(含内容树覆盖)
|
|
- GET /api/dashboard Dashboard 全部聚合指标(含内容树覆盖)
|
|
|
- GET /api/queries|posts|process|tools(+_versions) Dataset 数据
|
|
- GET /api/queries|posts|process|tools(+_versions) Dataset 数据
|
|
|
|
|
+ - GET /api/all_posts|all_process 某方向全部帖子 / 批量工序解构(工序库平铺表)
|
|
|
- GET /api/extract 点帖子合一:版本列表+解构详情(单连接,带 ETag/304)
|
|
- GET /api/extract 点帖子合一:版本列表+解构详情(单连接,带 ETag/304)
|
|
|
- POST /api/run_search|extract_process|extract_tools 起子进程跑 pipeline
|
|
- POST /api/run_search|extract_process|extract_tools 起子进程跑 pipeline
|
|
|
- GET /api/task_status 轮询任务状态(读日志尾部)
|
|
- GET /api/task_status 轮询任务状态(读日志尾部)
|
|
@@ -275,13 +276,13 @@ def _queries_cached(mode):
|
|
|
return data
|
|
return data
|
|
|
|
|
|
|
|
|
|
|
|
|
-def _parse_query_list(raw_query):
|
|
|
|
|
- """从 query string 解析 query_list(选填);三种写法统一成 list[str](去重保序):
|
|
|
|
|
- 重复参数 ?query_list=q1&query_list=q2
|
|
|
|
|
- 逗号分隔 ?query_list=q1,q2
|
|
|
|
|
- JSON 数组 ?query_list=["q1","q2"]
|
|
|
|
|
- 未提供返回 None(=查全部);提供了(哪怕显式空数组)返回 list(可能为空,=过滤后空结果)。"""
|
|
|
|
|
- vals = parse_qs(raw_query).get("query_list")
|
|
|
|
|
|
|
+def _parse_list_param(raw_query, key):
|
|
|
|
|
+ """从 query string 解析某个「列表参数」(选填);三种写法统一成 list[str](去重保序):
|
|
|
|
|
+ 重复参数 ?key=a&key=b
|
|
|
|
|
+ 逗号分隔 ?key=a,b
|
|
|
|
|
+ JSON 数组 ?key=["a","b"]
|
|
|
|
|
+ 未提供返回 None(=不过滤);提供了(哪怕显式空数组)返回 list(可能为空,=过滤后空结果)。"""
|
|
|
|
|
+ vals = parse_qs(raw_query).get(key)
|
|
|
if not vals:
|
|
if not vals:
|
|
|
return None
|
|
return None
|
|
|
out = []
|
|
out = []
|
|
@@ -302,6 +303,11 @@ def _parse_query_list(raw_query):
|
|
|
return res
|
|
return res
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+def _parse_query_list(raw_query):
|
|
|
|
|
+ """向后兼容封装:解析 query_list 列表参数(见 _parse_list_param)。"""
|
|
|
|
|
+ return _parse_list_param(raw_query, "query_list")
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
def _dashboard():
|
|
def _dashboard():
|
|
|
posts, procs, tools = db.fetch_dashboard_rows()
|
|
posts, procs, tools = db.fetch_dashboard_rows()
|
|
|
|
|
|
|
@@ -690,6 +696,11 @@ class Handler(BaseHTTPRequestHandler):
|
|
|
elif u.path == "/api/process":
|
|
elif u.path == "/api/process":
|
|
|
r = db.fetch_process(qs.get("case_id", ""), qs.get("version"))
|
|
r = db.fetch_process(qs.get("case_id", ""), qs.get("version"))
|
|
|
self._json(r) if r else self._err("无解构记录", 404)
|
|
self._json(r) if r else self._err("无解构记录", 404)
|
|
|
|
|
+ elif u.path == "/api/all_process":
|
|
|
|
|
+ # 批量解构:一次取多帖(或全表)的最新版工序+steps,供工序库平铺表一次加载。
|
|
|
|
|
+ # case_ids 选填(逗号/重复/JSON 三种写法,同 query_list),不传=全表。
|
|
|
|
|
+ m = db.fetch_all_process(_parse_list_param(u.query, "case_ids"))
|
|
|
|
|
+ self._json({"count": len(m), "procedures_by_case": m})
|
|
|
elif u.path == "/api/tools_versions":
|
|
elif u.path == "/api/tools_versions":
|
|
|
self._json(db.fetch_tools_versions(qs.get("case_id", "")))
|
|
self._json(db.fetch_tools_versions(qs.get("case_id", "")))
|
|
|
elif u.path == "/api/tools":
|
|
elif u.path == "/api/tools":
|