chore: decommission FMP, Finnhub and Alpha Vantage (A6)
The A5 cutover has been on and observed in production, so SEC Company Facts + DoltHub earnings are already the live source for `fundamental_data`. This removes everything the legacy path still occupied. Gone: the three providers and their config/env keys; the weekly `fundamental_collector` job; the cutover toggle (SEC + Dolt is now the unconditional path, so `off` can no longer silently freeze scoring inputs); the A5 parity report, whose deltas became structurally zero once the candidate builder started writing the table it compared against; and the FMP tier of universe bootstrap. Two behavioral notes: - Disabling **SEC Fundamentals Import** now stops the SEC network fetch only. The local cache refresh moved outside the job-enable check, because candidates also derive from daily closes and earnings events — freezing those on an ingestion pause would stale scoring with no fallback left to recover from. - `/ingestion/fetch?sources=fundamentals` still accepts the key and reports `skipped`; there is no per-ticker fetch any more. Migration 029 does not blanket-delete the leftover settings rows. Migrations run before the service restart, and pre-A6 code reads an absent `job_*_enabled` row as *enabled* — so the two behavior-bearing keys become tombstones pinned to safe values (hidden in Admin) and only the inert three are deleted. Removing the provider keys from the production `.env` is the matching rollout step. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
from datetime import date, timedelta
|
||||
|
||||
from scripts.backfill_earnings_events import _dedupe_bulk_rows, _windows
|
||||
from scripts.import_dolthub_earnings import _align_symbol
|
||||
from scripts.run_earnings_research import (
|
||||
_analyse_2a_trades,
|
||||
@@ -41,42 +40,6 @@ def test_dolthub_alignment_allows_fiscal_period_label_after_announcement() -> No
|
||||
assert matches == [(0, 0), (1, 1)]
|
||||
|
||||
|
||||
def test_bulk_windows_cover_range_without_overlap() -> None:
|
||||
result = _windows(date(2020, 1, 1), date(2020, 1, 10), 4)
|
||||
assert result == [
|
||||
(date(2020, 1, 1), date(2020, 1, 4)),
|
||||
(date(2020, 1, 5), date(2020, 1, 8)),
|
||||
(date(2020, 1, 9), date(2020, 1, 10)),
|
||||
]
|
||||
|
||||
|
||||
def test_bulk_dedupe_prefers_more_complete_and_counts_restatement() -> None:
|
||||
rows = [
|
||||
{
|
||||
"symbol": "AAPL",
|
||||
"announce_date": "2024-01-01",
|
||||
"announce_time": None,
|
||||
"eps_estimate": 1.0,
|
||||
"eps_actual": 1.1,
|
||||
"revenue_estimate": None,
|
||||
"revenue_actual": None,
|
||||
},
|
||||
{
|
||||
"symbol": "AAPL",
|
||||
"announce_date": "2024-01-01",
|
||||
"announce_time": "amc",
|
||||
"eps_estimate": 1.0,
|
||||
"eps_actual": 1.2,
|
||||
"revenue_estimate": 10.0,
|
||||
"revenue_actual": 11.0,
|
||||
},
|
||||
]
|
||||
deduped, duplicates, restated = _dedupe_bulk_rows(rows)
|
||||
assert duplicates == 1
|
||||
assert restated == 1
|
||||
assert deduped == [rows[1]]
|
||||
|
||||
|
||||
def test_2a_uses_net_r_strict_hold_and_next_session_stop() -> None:
|
||||
calendar = [
|
||||
date(2024, 1, 2),
|
||||
|
||||
Reference in New Issue
Block a user