Skip to content

Commit

Permalink
Test if return value is an exception when downloading historic data
Browse files Browse the repository at this point in the history
  • Loading branch information
xmatthias committed Oct 23, 2020
1 parent 2e7367d commit b8c12f6
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
17 changes: 12 additions & 5 deletions freqtrade/exchange/exchange.py
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,9 @@ def get_historic_ohlcv(self, pair: str, timeframe: str,
async def _async_get_historic_ohlcv(self, pair: str,
timeframe: str,
since_ms: int) -> List:
"""
Download historic ohlcv
"""

one_call = timeframe_to_msecs(timeframe) * self._ohlcv_candle_limit
logger.debug(
Expand All @@ -702,9 +705,14 @@ async def _async_get_historic_ohlcv(self, pair: str,

# Combine gathered results
data: List = []
for p, timeframe, res in results:
for res in results:
if isinstance(res, Exception):
logger.warning("Async code raised an exception: %s", res.__class__.__name__)
continue
# Deconstruct tuple if it's not an exception
p, _, new_data = res
if p == pair:
data.extend(res)
data.extend(new_data)
# Sort data again after extending the result - above calls return in "async order"
data = sorted(data, key=lambda x: x[0])
logger.info("Downloaded data for %s with length %s.", pair, len(data))
Expand Down Expand Up @@ -741,9 +749,8 @@ def refresh_latest_ohlcv(self, pair_list: ListPairsWithTimeframes) -> List[Tuple
if isinstance(res, Exception):
logger.warning("Async code raised an exception: %s", res.__class__.__name__)
continue
pair = res[0]
timeframe = res[1]
ticks = res[2]
# Deconstruct tuple (has 3 elements)
pair, timeframe, ticks = res
# keeping last candle time as last refreshed time of the pair
if ticks:
self._pairs_last_refresh_time[(pair, timeframe)] = ticks[-1][0] // 1000
Expand Down
9 changes: 9 additions & 0 deletions tests/exchange/test_exchange.py
Original file line number Diff line number Diff line change
Expand Up @@ -1295,6 +1295,15 @@ async def mock_candle_hist(pair, timeframe, since_ms):
# Returns twice the above OHLCV data
assert len(ret) == 2

caplog.clear()

async def mock_get_candle_hist_error(pair, *args, **kwargs):
raise TimeoutError()

exchange._async_get_candle_history = MagicMock(side_effect=mock_get_candle_hist_error)
ret = exchange.get_historic_ohlcv(pair, "5m", int((arrow.utcnow().timestamp - since) * 1000))
assert log_has_re(r"Async code raised an exception: .*", caplog)


def test_refresh_latest_ohlcv(mocker, default_conf, caplog) -> None:
ohlcv = [
Expand Down

0 comments on commit b8c12f6

Please sign in to comment.