fix(sector-radar): 兼容股票市场字段为空

This commit is contained in:
yuxuanhui
2026-08-30 01:50:27 +08:00
parent 6e217ac70f
commit 1e15e8059d
4 changed files with 35 additions and 6 deletions
@@ -36,12 +36,17 @@ def result[T](api_name: str, rows: tuple[T, ...]) -> SourceResult[T]:
return SourceResult((snapshot,), rows)
def basic(ts_code: str, *, list_date: date = date(2020, 1, 1)) -> StockBasicRow:
def basic(
ts_code: str,
*,
list_date: date = date(2020, 1, 1),
market: str | None = "主板",
) -> StockBasicRow:
return StockBasicRow(
ts_code=ts_code,
symbol=ts_code.split(".")[0],
name=ts_code,
market="主板",
market=market,
exchange="SZSE",
list_status="L",
list_date=list_date,
@@ -49,6 +54,28 @@ def basic(ts_code: str, *, list_date: date = date(2020, 1, 1)) -> StockBasicRow:
)
def test_missing_market_keeps_hs_a_stock_but_code_rules_still_exclude_bse_and_b_shares() -> None:
codes = ("000001.SZ", "920001.BJ", "200001.SZ", "900001.SH")
basics = tuple(basic(code, market=None) for code in codes)
daily_rows = tuple(daily(code, Decimal("1")) for code in codes)
moneyflow_rows = tuple(moneyflow(code, Decimal("1")) for code in codes)
facts = normalize_stock_facts(
target_trade_date=TARGET_DATE,
candidate_codes=codes,
stock_basics=result("stock_basic", basics),
suspensions=result("suspend_d", ()),
daily=result("daily", daily_rows),
moneyflow=result("moneyflow_dc", moneyflow_rows),
)
by_code = {fact.ts_code: fact for fact in facts}
assert by_code["000001.SZ"].status is StockFactStatus.AVAILABLE
assert by_code["920001.BJ"].status is StockFactStatus.LIFECYCLE_INVALID
assert by_code["200001.SZ"].status is StockFactStatus.LIFECYCLE_INVALID
assert by_code["900001.SH"].status is StockFactStatus.LIFECYCLE_INVALID
def daily(ts_code: str, amount: Decimal | None) -> DailyRow:
return DailyRow(
ts_code=ts_code,