From cb70258b30edf1b8e291cc00c87b8dd63a5bc46e Mon Sep 17 00:00:00 2001 From: Saleh Mir Date: Sun, 15 Dec 2024 15:28:44 +0330 Subject: [PATCH] refactor(candle): streamline caching logic and ensure immediate materialization of database results --- jesse/services/candle.py | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/jesse/services/candle.py b/jesse/services/candle.py index 5075da0a7..378cd6b97 100644 --- a/jesse/services/candle.py +++ b/jesse/services/candle.py @@ -257,22 +257,19 @@ def _get_candles_from_db( key = jh.key(exchange, symbol) cache_key = f"{start_date_timestamp}-{finish_date_timestamp}-{key}" cached_value = cache.get_value(cache_key) - else: - cached_value = None - - # if cache exists use cache_value - if cached_value: - candles_tuple = cached_value - else: - candles_tuple = Candle.select( - Candle.timestamp, Candle.open, Candle.close, Candle.high, Candle.low, - Candle.volume - ).where( - Candle.exchange == exchange, - Candle.symbol == symbol, - Candle.timeframe == '1m' or Candle.timeframe.is_null(), - Candle.timestamp.between(start_date_timestamp, finish_date_timestamp) - ).order_by(Candle.timestamp.asc()).tuples() + if cached_value: + return np.array(cached_value) + + # Always materialize the database results immediately + candles_tuple = list(Candle.select( + Candle.timestamp, Candle.open, Candle.close, Candle.high, Candle.low, + Candle.volume + ).where( + Candle.exchange == exchange, + Candle.symbol == symbol, + Candle.timeframe == '1m' or Candle.timeframe.is_null(), + Candle.timestamp.between(start_date_timestamp, finish_date_timestamp) + ).order_by(Candle.timestamp.asc()).tuples()) # validate the dates if start_date_timestamp == finish_date_timestamp: @@ -284,7 +281,7 @@ def _get_candles_from_db( if caching: # cache for 1 week it for near future calls - cache.set_value(cache_key, tuple(candles_tuple), expire_seconds=60 * 60 * 24 * 7) + cache.set_value(cache_key, candles_tuple, expire_seconds=60 * 60 * 24 * 7) return np.array(candles_tuple)