From 98fa9cf84e73c4c874d51478ad64c50ee7c2d00f Mon Sep 17 00:00:00 2001 From: Sam Sriram Date: Sun, 28 Dec 2025 14:34:53 +1100 Subject: [PATCH] Retain previous prices when eod prices unavailable --- backend/planner/market.py | 13 +++++++++++-- backend/planner/prices.py | 15 ++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/backend/planner/market.py b/backend/planner/market.py index 05403719..a13048de 100644 --- a/backend/planner/market.py +++ b/backend/planner/market.py @@ -73,16 +73,25 @@ def update_prices_for_symbols(symbols: Set[str], db) -> None: for symbol in symbols_list: try: price = get_share_price(symbol) - if price > 0: + if price is not None: price_map[symbol] = price logger.info(f"Market: Retrieved {symbol} price: ${price:.2f}") else: - logger.warning(f"Market: No price available for {symbol}") + logger.warning(f"Market: No price available for {symbol}; " + "retaining previous price") except Exception as e: logger.warning(f"Market: Could not fetch price for {symbol}: {e}") logger.info(f"Market: Retrieved prices for {len(price_map)}/{len(symbols_list)} symbols") + # 🚨 If no prices were retrieved at all, skip DB updates entirely + if not price_map: + logger.warning( + "Market: No prices retrieved for any symbols; " + "skipping price update and retaining previous prices" + ) + return + # Update database with fetched prices for symbol, price in price_map.items(): try: diff --git a/backend/planner/prices.py b/backend/planner/prices.py index 7eaacff8..2f94d246 100644 --- a/backend/planner/prices.py +++ b/backend/planner/prices.py @@ -1,10 +1,11 @@ from polygon import RESTClient from dotenv import load_dotenv import os -from datetime import datetime +from datetime import datetime, timedelta import random from functools import lru_cache from datetime import timezone +from typing import Optional load_dotenv(override=True) @@ -37,10 +38,10 @@ def get_market_for_prior_date(today): return market_data -def get_share_price_polygon_eod(symbol) -> float: +def get_share_price_polygon_eod(symbol) -> Optional[float]: today = datetime.now().date().strftime("%Y-%m-%d") market_data = get_market_for_prior_date(today) - return market_data.get(symbol, 0.0) + return market_data.get(symbol) def get_share_price_polygon_min(symbol) -> float: @@ -49,17 +50,17 @@ def get_share_price_polygon_min(symbol) -> float: return result.min.close or result.prev_day.close -def get_share_price_polygon(symbol) -> float: +def get_share_price_polygon(symbol) -> Optional[float]: if is_paid_polygon: return get_share_price_polygon_min(symbol) else: return get_share_price_polygon_eod(symbol) -def get_share_price(symbol) -> float: +def get_share_price(symbol) -> Optional[float]: if polygon_api_key: try: return get_share_price_polygon(symbol) except Exception as e: - print(f"Was not able to use the polygon API due to {e}; using a random number") - return float(random.randint(1, 100)) + print(f"Was not able to use the polygon API due to {e}; ") + return None