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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user