feat(data): 财务/日线同步增量 + 新浪「两边一致」校验兜底 + 逐只进度
- financial 默认增量:按 A 股披露节奏判断已最新并跳过;--full 强制全量重拉 - Tushare fina_indicator 增加报告期窗口与 100 条/请求自动分页(修复老报告期静默截断) - 新浪兜底收紧为校验兜底:两源重叠历史一致才导入缺失键,行标记 source=sina; 财务可比字段取 eps/销售毛利率(ROE 两端口径不同不作依据),日线只比较最近重叠交易日 - CLI 输出逐只进度与导入内容描述(来源/行数/报告期与公告区间),失败股票留待重跑 - financial_indicator 增 source 列(迁移 d3f6c9a21b04);新增一致性/分页/服务测试
This commit is contained in:
@@ -125,9 +125,49 @@ class TestFinancial:
|
||||
assert float(row.eps) == 1.23
|
||||
assert float(row.roe) == 15.5
|
||||
assert float(row.net_profit) == 1230000000
|
||||
assert row.source == "sina" # 兜底行必须标记来源(与 Tushare 首选行区分)
|
||||
# FinancialIndicator 校验能通过 → 格式与 Tushare 一致
|
||||
assert row.model_dump()["eps"] is not None
|
||||
|
||||
def test_window_filter(self) -> None:
|
||||
payload = json.dumps(
|
||||
{
|
||||
"result": {
|
||||
"data": {
|
||||
"report_date": [
|
||||
{"date_value": "2024-06-30"},
|
||||
{"date_value": "2024-03-31"},
|
||||
],
|
||||
"report_list": {
|
||||
"2024-06-30": {
|
||||
"publish_date": "2024-08-31",
|
||||
"data": [{"item_title": "基本每股收益", "item_value": "1.23"}],
|
||||
},
|
||||
"2024-03-31": {
|
||||
"publish_date": "2024-04-27",
|
||||
"data": [{"item_title": "基本每股收益", "item_value": "0.5"}],
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
ensure_ascii=False,
|
||||
)
|
||||
|
||||
class _TwoResp:
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, *exc):
|
||||
return False
|
||||
|
||||
def read(self):
|
||||
return payload.encode("utf-8")
|
||||
|
||||
provider = SinaProvider(urlopen=lambda _req, **kw: _TwoResp())
|
||||
rows = provider.get_financial("600519.SH", date(2024, 6, 30), date(2024, 6, 30))
|
||||
assert [r.report_date for r in rows] == [date(2024, 6, 30)]
|
||||
|
||||
def test_bad_structure_raises(self) -> None:
|
||||
class _BadResp(_FinResp):
|
||||
def read(self):
|
||||
|
||||
Reference in New Issue
Block a user