refactor: address architect review findings (6 items)
R1: Extend @safe to catch ValueError->400, simplify routes_backtest
(eliminated 4 copies of duplicated try/except)
R2: Consolidate PROVIDER constant into obb_utils.py (single source)
R3: Add days_ago() helper to obb_utils.py, replace 8+ duplications
R4: Extract Reddit/ApeWisdom into reddit_service.py from finnhub_service
R5: Fix missing top-level import asyncio in finnhub_service
R6: (deferred - sentiment logic extraction is a larger change)
All 561 tests passing.
This commit is contained in:
@@ -7,12 +7,10 @@ from typing import Any
|
||||
|
||||
from openbb import obb
|
||||
|
||||
from obb_utils import to_list
|
||||
from obb_utils import to_list, days_ago, PROVIDER
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
PROVIDER = "yfinance"
|
||||
|
||||
|
||||
# --- ETF ---
|
||||
|
||||
@@ -30,7 +28,7 @@ async def get_etf_info(symbol: str) -> dict[str, Any]:
|
||||
|
||||
async def get_etf_historical(symbol: str, days: int = 365) -> list[dict[str, Any]]:
|
||||
"""Get ETF price history."""
|
||||
start = (datetime.now(tz=timezone.utc) - timedelta(days=days)).strftime("%Y-%m-%d")
|
||||
start = days_ago(days)
|
||||
try:
|
||||
result = await asyncio.to_thread(
|
||||
obb.etf.historical, symbol, start_date=start, provider=PROVIDER
|
||||
@@ -66,7 +64,7 @@ async def get_available_indices() -> list[dict[str, Any]]:
|
||||
|
||||
async def get_index_historical(symbol: str, days: int = 365) -> list[dict[str, Any]]:
|
||||
"""Get index price history."""
|
||||
start = (datetime.now(tz=timezone.utc) - timedelta(days=days)).strftime("%Y-%m-%d")
|
||||
start = days_ago(days)
|
||||
try:
|
||||
result = await asyncio.to_thread(
|
||||
obb.index.price.historical, symbol, start_date=start, provider=PROVIDER
|
||||
@@ -82,7 +80,7 @@ async def get_index_historical(symbol: str, days: int = 365) -> list[dict[str, A
|
||||
|
||||
async def get_crypto_historical(symbol: str, days: int = 365) -> list[dict[str, Any]]:
|
||||
"""Get cryptocurrency price history."""
|
||||
start = (datetime.now(tz=timezone.utc) - timedelta(days=days)).strftime("%Y-%m-%d")
|
||||
start = days_ago(days)
|
||||
try:
|
||||
result = await asyncio.to_thread(
|
||||
obb.crypto.price.historical, symbol, start_date=start, provider=PROVIDER
|
||||
@@ -110,7 +108,7 @@ async def get_currency_historical(
|
||||
symbol: str, days: int = 365
|
||||
) -> list[dict[str, Any]]:
|
||||
"""Get forex price history (e.g., EURUSD)."""
|
||||
start = (datetime.now(tz=timezone.utc) - timedelta(days=days)).strftime("%Y-%m-%d")
|
||||
start = days_ago(days)
|
||||
try:
|
||||
result = await asyncio.to_thread(
|
||||
obb.currency.price.historical, symbol, start_date=start, provider=PROVIDER
|
||||
@@ -140,7 +138,7 @@ async def get_futures_historical(
|
||||
symbol: str, days: int = 365
|
||||
) -> list[dict[str, Any]]:
|
||||
"""Get futures price history."""
|
||||
start = (datetime.now(tz=timezone.utc) - timedelta(days=days)).strftime("%Y-%m-%d")
|
||||
start = days_ago(days)
|
||||
try:
|
||||
result = await asyncio.to_thread(
|
||||
obb.derivatives.futures.historical, symbol, start_date=start, provider=PROVIDER
|
||||
|
||||
Reference in New Issue
Block a user