test+fix: 新浪 jsonp 稳健解析(容忍注释/括号包裹/尾部杂字符);Job API 测试改 tmp 种子库

- 真实响应含 /*...*/ 注释与 var data=([...]); 前缀 → _extract_jsonp 取首 '[' 至末 ']'
- 新浪真实网络冒烟通过:财务 100 期(含披露日)+ 日K 最近窗口(source=sina/adjust=qfq)
- TestJobsApi / experiments 用例改为 monkeypatch SessionLocal → tmp 种子库(5 股×300 日),
  与真实全市场库(779 万行)解耦,全量稳定 <1min
- pytest 全量 141 passed / ruff clean
This commit is contained in:
Simon
2026-09-06 21:34:29 +08:00
parent 56254172b3
commit 02e42184be
3 changed files with 80 additions and 13 deletions
@@ -69,10 +69,15 @@ def _to_sina_symbol(symbol: str) -> str:
def _extract_jsonp(payload: str) -> list[dict[str, Any]]:
match = re.search(r"=\s*(\[.*\])\s*$", payload.strip(), flags=re.DOTALL)
if not match:
"""从 JSONP 中提取数组:容忍前导注释 / var data=([...]) 包裹 / 尾部杂字符。
直接取首个 '[' 与末个 ']' 之间的内容(行情数组为扁平结构,无嵌套数组)。
"""
start = payload.find("[")
end = payload.rfind("]")
if start == -1 or end <= start:
raise DataSourceError("新浪行情返回格式无法解析")
return json.loads(match.group(1))
return json.loads(payload[start : end + 1])
def _d(value) -> Decimal | None: