rebuild(stage-9): deliver deterministic intelligent screening

This commit is contained in:
leefer
2026-07-30 05:15:17 +08:00
parent 6cb52e864a
commit 158257ebb8
46 changed files with 7322 additions and 34 deletions
+8 -7
View File
@@ -120,9 +120,7 @@ class IfindProvider:
},
)
rows.extend(_result(payload, "mixed", "not_applicable", SnapshotState.REALTIME).rows)
covered = {
str(row.get("thscode") or "") for row in rows if row.get("thscode")
}
covered = {str(row.get("thscode") or "") for row in rows if row.get("thscode")}
return ProviderResult(
tuple(rows),
ObservationMetadata(
@@ -137,6 +135,9 @@ class IfindProvider:
),
)
def screener_inputs(self, trade_dates: tuple[str, ...]) -> dict[str, ProviderResult | None]:
raise ProviderError("iFinD尚未批准用于盘后因子批量计算")
def _request(self, endpoint: str, body: dict[str, Any]) -> dict[str, Any]:
if not self.configured:
raise ProviderError("实时行情服务尚未配置")
@@ -183,9 +184,7 @@ class IfindProvider:
def _auth_error(self, payload: dict[str, Any]) -> bool:
message = str(payload.get("errmsg") or payload.get("message") or "").casefold()
return (
_error_code(payload) in self.auth_error_codes
or "token" in message
or "鉴权" in message
_error_code(payload) in self.auth_error_codes or "token" in message or "鉴权" in message
)
def _refresh(self) -> str:
@@ -246,7 +245,9 @@ def _result(
row = {
key: values[index]
if isinstance(values, list) and index < len(values)
else values if index == 0 else None
else values
if index == 0
else None
for key, values in columns.items()
}
if isinstance(times, list) and index < len(times):