--- /data/files/bmw/stocklab-audit-remediation-SL006-SL007-SL008-SL009-20260910-224500/pristine/app/app/workers/ingest.py 2026-09-10 18:10:37.000000000 +0300 +++ /data/files/bmw/stocklab-audit-remediation-SL006-SL007-SL008-SL009-20260910-224500-FIX2/app/app/workers/ingest.py 2026-09-10 21:42:59.237062884 +0300 @@ -16,6 +16,7 @@ changed. """ from __future__ import annotations +import httpx from datetime import date, timedelta @@ -409,6 +410,12 @@ adapter, lambda t: adapter.get_cash_flows(t, period="quarter"), ticker, "cash_flows_quarterly")) + if not income_periods: + raise RuntimeError( + f"Provider returned no financial periods for {ticker}; " + "refusing to commit stale data or trigger recompute." + ) + secondary_source = None secondary_by_period: dict = {} secondary_balance: dict = {} @@ -611,7 +618,7 @@ @celery_app.task( name="app.workers.ingest.ingest_security_task", bind=True, - autoretry_for=(ProviderRateLimitError, ConnectionError, TimeoutError), + autoretry_for=(ProviderRateLimitError, httpx.TransportError), retry_backoff=True, # exponential backoff between attempts retry_backoff_max=300, # cap backoff at 5 minutes retry_jitter=True, # avoid a thundering herd of simultaneous retries