Cache markets in the exchange object

This commit is contained in:
Matthias
2021-01-28 19:40:10 +01:00
parent 65459086a3
commit 5cdd9dd445
4 changed files with 24 additions and 22 deletions

View File

@@ -66,6 +66,7 @@ class Exchange:
"""
self._api: ccxt.Exchange = None
self._api_async: ccxt_async.Exchange = None
self._markets: Dict = {}
self._config.update(config)
@@ -198,10 +199,10 @@ class Exchange:
@property
def markets(self) -> Dict:
"""exchange ccxt markets"""
if not self._api.markets:
if not self._markets:
logger.info("Markets were not loaded. Loading them now..")
self._load_markets()
return self._api.markets
return self._markets
@property
def precisionMode(self) -> str:
@@ -291,7 +292,7 @@ class Exchange:
def _load_markets(self) -> None:
""" Initialize markets both sync and async """
try:
self._api.load_markets()
self._markets = self._api.load_markets()
self._load_async_markets()
self._last_markets_refresh = arrow.utcnow().int_timestamp
except ccxt.BaseError as e:
@@ -306,7 +307,7 @@ class Exchange:
return None
logger.debug("Performing scheduled market reload..")
try:
self._api.load_markets(reload=True)
self._markets = self._api.load_markets(reload=True)
# Also reload async markets to avoid issues with newly listed pairs
self._load_async_markets(reload=True)
self._last_markets_refresh = arrow.utcnow().int_timestamp
@@ -660,8 +661,8 @@ class Exchange:
@retrier
def fetch_ticker(self, pair: str) -> dict:
try:
if (pair not in self._api.markets or
self._api.markets[pair].get('active', False) is False):
if (pair not in self.markets or
self.markets[pair].get('active', False) is False):
raise ExchangeError(f"Pair {pair} not available")
data = self._api.fetch_ticker(pair)
return data