Remove assigning klines from download method

This commit is contained in:
Matthias 2018-12-10 20:22:21 +01:00
parent 36de451809
commit e2bff9d5cb
2 changed files with 20 additions and 17 deletions

View File

@ -489,9 +489,9 @@ class Exchange(object):
# Combine tickers # Combine tickers
data: List = [] data: List = []
for tick in tickers: for p, ticker in tickers:
if tick[0] == pair: if p == pair:
data.extend(tick[1]) data.extend(ticker)
# Sort data again after extending the result - above calls return in "async order" order # Sort data again after extending the result - above calls return in "async order" order
data = sorted(data, key=lambda x: x[0]) data = sorted(data, key=lambda x: x[0])
logger.info("downloaded %s with length %s.", pair, len(data)) logger.info("downloaded %s with length %s.", pair, len(data))
@ -502,9 +502,16 @@ class Exchange(object):
Refresh tickers asyncronously and return the result. Refresh tickers asyncronously and return the result.
""" """
logger.debug("Refreshing klines for %d pairs", len(pair_list)) logger.debug("Refreshing klines for %d pairs", len(pair_list))
asyncio.get_event_loop().run_until_complete( ticklist = asyncio.get_event_loop().run_until_complete(
self.async_get_candles_history(pair_list, ticker_interval)) self.async_get_candles_history(pair_list, ticker_interval))
for pair, ticks in ticklist:
# keeping last candle time as last refreshed time of the pair
if ticks:
self._pairs_last_refresh_time[pair] = ticks[-1][0] // 1000
# keeping candles in cache
self.klines[pair] = ticks
async def async_get_candles_history(self, pairs: List[str], async def async_get_candles_history(self, pairs: List[str],
tick_interval: str) -> List[Tuple[str, List]]: tick_interval: str) -> List[Tuple[str, List]]:
"""Download ohlcv history for pair-list asyncronously """ """Download ohlcv history for pair-list asyncronously """
@ -528,7 +535,7 @@ class Exchange(object):
# so we fetch it from local cache # so we fetch it from local cache
if (not since_ms and if (not since_ms and
self._pairs_last_refresh_time.get(pair, 0) + interval_in_sec >= self._pairs_last_refresh_time.get(pair, 0) + interval_in_sec >=
arrow.utcnow().timestamp): arrow.utcnow().timestamp and pair in self.klines):
data = self.klines[pair] data = self.klines[pair]
logger.debug("Using cached klines data for %s ...", pair) logger.debug("Using cached klines data for %s ...", pair)
else: else:
@ -542,13 +549,6 @@ class Exchange(object):
if data and data[0][0] > data[-1][0]: if data and data[0][0] > data[-1][0]:
data = sorted(data, key=lambda x: x[0]) data = sorted(data, key=lambda x: x[0])
# keeping last candle time as last refreshed time of the pair
if data:
self._pairs_last_refresh_time[pair] = data[-1][0] // 1000
# keeping candles in cache
self.klines[pair] = data
logger.debug("done fetching %s ...", pair) logger.debug("done fetching %s ...", pair)
return pair, data return pair, data

View File

@ -737,7 +737,7 @@ def test_get_history(default_conf, mocker, caplog):
def test_refresh_tickers(mocker, default_conf, caplog) -> None: def test_refresh_tickers(mocker, default_conf, caplog) -> None:
tick = [ tick = [
[ [
1511686200000, # unix timestamp ms arrow.utcnow().timestamp * 1000, # unix timestamp ms
1, # open 1, # open
2, # high 2, # high
3, # low 3, # low
@ -757,9 +757,16 @@ def test_refresh_tickers(mocker, default_conf, caplog) -> None:
assert log_has(f'Refreshing klines for {len(pairs)} pairs', caplog.record_tuples) assert log_has(f'Refreshing klines for {len(pairs)} pairs', caplog.record_tuples)
assert exchange.klines assert exchange.klines
assert exchange._api_async.fetch_ohlcv.call_count == 2
for pair in pairs: for pair in pairs:
assert exchange.klines[pair] assert exchange.klines[pair]
# test caching
exchange.refresh_tickers(['IOTA/ETH', 'XRP/ETH'], '5m')
assert exchange._api_async.fetch_ohlcv.call_count == 2
assert log_has(f"Using cached klines data for {pairs[0]} ...", caplog.record_tuples)
@pytest.mark.asyncio @pytest.mark.asyncio
async def test__async_get_candle_history(default_conf, mocker, caplog): async def test__async_get_candle_history(default_conf, mocker, caplog):
@ -788,10 +795,6 @@ async def test__async_get_candle_history(default_conf, mocker, caplog):
assert res[1] == tick assert res[1] == tick
assert exchange._api_async.fetch_ohlcv.call_count == 1 assert exchange._api_async.fetch_ohlcv.call_count == 1
assert not log_has(f"Using cached klines data for {pair} ...", caplog.record_tuples) assert not log_has(f"Using cached klines data for {pair} ...", caplog.record_tuples)
# test caching
res = await exchange._async_get_candle_history(pair, "5m")
assert exchange._api_async.fetch_ohlcv.call_count == 1
assert log_has(f"Using cached klines data for {pair} ...", caplog.record_tuples)
# exchange = Exchange(default_conf) # exchange = Exchange(default_conf)
await async_ccxt_exception(mocker, default_conf, MagicMock(), await async_ccxt_exception(mocker, default_conf, MagicMock(),