Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions backend/planner/market.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
15 changes: 8 additions & 7 deletions backend/planner/prices.py
Original file line number Diff line number Diff line change
@@ -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)

Expand Down Expand Up @@ -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:
Expand All @@ -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