Use Generator when sending initial dataframes

This commit is contained in:
Matthias 2022-11-14 07:25:52 +01:00
parent 30b467906c
commit a951b49541
2 changed files with 5 additions and 11 deletions

View File

@ -84,11 +84,8 @@ async def _process_consumer_request(
# Limit the amount of candles per dataframe to 'limit' or 1500 # Limit the amount of candles per dataframe to 'limit' or 1500
limit = max(data.get('limit', 1500), 1500) limit = max(data.get('limit', 1500), 1500)
# They requested the full historical analyzed dataframes # For every pair in the generator, send a separate message
analyzed_df = rpc._ws_request_analyzed_df(limit) for message in rpc._ws_request_analyzed_df(limit):
# For every dataframe, send as a separate message
for _, message in analyzed_df.items():
response = WSAnalyzedDFMessage(data=message) response = WSAnalyzedDFMessage(data=message)
await channel_manager.send_direct(channel, response.dict(exclude_none=True)) await channel_manager.send_direct(channel, response.dict(exclude_none=True))

View File

@ -5,7 +5,7 @@ import logging
from abc import abstractmethod from abc import abstractmethod
from datetime import date, datetime, timedelta, timezone from datetime import date, datetime, timedelta, timezone
from math import isnan from math import isnan
from typing import Any, Dict, List, Optional, Tuple, Union from typing import Any, Dict, Generator, List, Optional, Tuple, Union
import arrow import arrow
import psutil import psutil
@ -1063,23 +1063,20 @@ class RPC:
self, self,
pairlist: List[str], pairlist: List[str],
limit: Optional[int] limit: Optional[int]
) -> Dict[str, Any]: ) -> Generator[Dict[str, Any], None, None]:
""" Get the analysed dataframes of each pair in the pairlist """ """ Get the analysed dataframes of each pair in the pairlist """
timeframe = self._freqtrade.config['timeframe'] timeframe = self._freqtrade.config['timeframe']
candle_type = self._freqtrade.config.get('candle_type_def', CandleType.SPOT) candle_type = self._freqtrade.config.get('candle_type_def', CandleType.SPOT)
_data = {}
for pair in pairlist: for pair in pairlist:
dataframe, last_analyzed = self.__rpc_analysed_dataframe_raw(pair, timeframe, limit) dataframe, last_analyzed = self.__rpc_analysed_dataframe_raw(pair, timeframe, limit)
_data[pair] = { yield {
"key": (pair, timeframe, candle_type), "key": (pair, timeframe, candle_type),
"df": dataframe, "df": dataframe,
"la": last_analyzed "la": last_analyzed
} }
return _data
def _ws_request_analyzed_df(self, limit: Optional[int]): def _ws_request_analyzed_df(self, limit: Optional[int]):
""" Historical Analyzed Dataframes for WebSocket """ """ Historical Analyzed Dataframes for WebSocket """
whitelist = self._freqtrade.active_pair_whitelist whitelist = self._freqtrade.active_pair_whitelist