refactor: 管线写入依赖解耦——pipeline_write 直接 import

bzzoiro_events / bzzoiro_standings / bzzoiro_stats 直接 import
src.data.pipeline_write(_write_raw_event/_write_lineage/_safe_write_ingest_failure),
删除 bzzoiro.py 门面中的 pipeline_write 转发胶水。

保留 fetch_*/_fetch_json_async/REQUEST_INTERVAL 经 bz. 门面调用(测试 monkeypatch 入口);
测试 best-effort 改为 patch 管线模块自身命名空间(from-import 绑定语义)。
函数语义与「失败不拖垮主流程」不变;source_record_id/transform_name 约定不变。

全量测试 270 通过。
This commit is contained in:
shangfangjian
2026-09-22 01:15:45 +08:00
parent 3a56ee17e1
commit 03727bda00
6 changed files with 34 additions and 32 deletions
+4 -5
View File
@@ -16,6 +16,7 @@ from datetime import datetime, timedelta, timezone
from src.data.bzzoiro_common import _match_key, _to_date, _to_int_or_none
from src.data.config import BZZOIRO_LEAGUE_IDS, LEAGUE_COUNTRIES, LEAGUE_NAMES
from src.data.normalize import normalize_bzzoiro
from src.data.pipeline_write import _safe_write_ingest_failure, _write_lineage, _write_raw_event
from src.data.sources import register
from src.data.team_names_zh import zh_name
from src.db.models import Match
@@ -98,7 +99,7 @@ class BzzoiroSource:
# 单联赛抓取失败隔离:记录错误后继续其余联赛,不拖垮整批
logger.exception("bzzoiro fetch failed for %s", code)
league_r["errors"].append(f"fetch failed: {e}")
await bz._safe_write_ingest_failure(
await _safe_write_ingest_failure(
db,
entity_type="events",
source_record_id=None,
@@ -300,11 +301,9 @@ async def _write_events_bronze(
source_record_id 查重保证;best-effort:基础设施写入失败只记 warning,
绝不拖垮采集主流程(与 _safe_write_ingest_failure 同级约束)。
"""
from src.data import bzzoiro as bz
try:
await bz._write_raw_event(db, "bzzoiro", source_record_id, raw_payload, batch_id)
await bz._write_lineage(
await _write_raw_event(db, "bzzoiro", source_record_id, raw_payload, batch_id)
await _write_lineage(
db, "bzzoiro", source_record_id,
"matches", target_match_id, "events_ingest",
{"league": league_code, "match_status": match_status},