refactor: make klines_last_refresh private
This commit is contained in:
@@ -28,7 +28,7 @@ class ExchangeWS:
|
|||||||
|
|
||||||
self._klines_watching: set[PairWithTimeframe] = set()
|
self._klines_watching: set[PairWithTimeframe] = set()
|
||||||
self._klines_scheduled: set[PairWithTimeframe] = set()
|
self._klines_scheduled: set[PairWithTimeframe] = set()
|
||||||
self.klines_last_refresh: dict[PairWithTimeframe, float] = {}
|
self._klines_last_refresh: dict[PairWithTimeframe, float] = {}
|
||||||
self._klines_last_request: dict[PairWithTimeframe, float] = {}
|
self._klines_last_request: dict[PairWithTimeframe, float] = {}
|
||||||
self._thread = Thread(name="ccxt_ws", target=self._start_forever)
|
self._thread = Thread(name="ccxt_ws", target=self._start_forever)
|
||||||
self._thread.start()
|
self._thread.start()
|
||||||
@@ -104,7 +104,7 @@ class ExchangeWS:
|
|||||||
"""
|
"""
|
||||||
with self._state_lock:
|
with self._state_lock:
|
||||||
self._ccxt_object.ohlcvs.get(paircomb[0], {}).pop(paircomb[1], None)
|
self._ccxt_object.ohlcvs.get(paircomb[0], {}).pop(paircomb[1], None)
|
||||||
self.klines_last_refresh.pop(paircomb, None)
|
self._klines_last_refresh.pop(paircomb, None)
|
||||||
|
|
||||||
@retrier(retries=3)
|
@retrier(retries=3)
|
||||||
def ohlcvs(self, pair: str, timeframe: str) -> list[list]:
|
def ohlcvs(self, pair: str, timeframe: str) -> list[list]:
|
||||||
@@ -128,7 +128,7 @@ class ExchangeWS:
|
|||||||
"""
|
"""
|
||||||
ohlcvs = self.ohlcvs(pair, timeframe)
|
ohlcvs = self.ohlcvs(pair, timeframe)
|
||||||
with self._state_lock:
|
with self._state_lock:
|
||||||
last_refresh = self.klines_last_refresh.get((pair, timeframe, candle_type), 0)
|
last_refresh = self._klines_last_refresh.get((pair, timeframe, candle_type), 0)
|
||||||
return ohlcvs, last_refresh
|
return ohlcvs, last_refresh
|
||||||
|
|
||||||
def cleanup_expired(self) -> None:
|
def cleanup_expired(self) -> None:
|
||||||
@@ -227,7 +227,7 @@ class ExchangeWS:
|
|||||||
start = dt_ts()
|
start = dt_ts()
|
||||||
data = await self._ccxt_object.watch_ohlcv(pair, timeframe)
|
data = await self._ccxt_object.watch_ohlcv(pair, timeframe)
|
||||||
with self._state_lock:
|
with self._state_lock:
|
||||||
self.klines_last_refresh[(pair, timeframe, candle_type)] = dt_ts()
|
self._klines_last_refresh[(pair, timeframe, candle_type)] = dt_ts()
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"watch done {pair}, {timeframe}, data {len(data)} "
|
f"watch done {pair}, {timeframe}, data {len(data)} "
|
||||||
f"in {(dt_ts() - start) / 1000:.3f}s"
|
f"in {(dt_ts() - start) / 1000:.3f}s"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ def test_exchangews_init(mocker):
|
|||||||
assert exchange_ws._background_tasks == set()
|
assert exchange_ws._background_tasks == set()
|
||||||
assert exchange_ws._klines_watching == set()
|
assert exchange_ws._klines_watching == set()
|
||||||
assert exchange_ws._klines_scheduled == set()
|
assert exchange_ws._klines_scheduled == set()
|
||||||
assert exchange_ws.klines_last_refresh == {}
|
assert exchange_ws._klines_last_refresh == {}
|
||||||
assert exchange_ws._klines_last_request == {}
|
assert exchange_ws._klines_last_request == {}
|
||||||
# Cleanup
|
# Cleanup
|
||||||
exchange_ws.cleanup()
|
exchange_ws.cleanup()
|
||||||
@@ -258,7 +258,7 @@ async def test_exchangews_get_ohlcv(mocker, caplog):
|
|||||||
mocker.patch("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever", MagicMock())
|
mocker.patch("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever", MagicMock())
|
||||||
|
|
||||||
exchange_ws = ExchangeWS(config, ccxt_object)
|
exchange_ws = ExchangeWS(config, ccxt_object)
|
||||||
exchange_ws.klines_last_refresh = {
|
exchange_ws._klines_last_refresh = {
|
||||||
("ETH/USDT", "1m", CandleType.SPOT): 1635840120000,
|
("ETH/USDT", "1m", CandleType.SPOT): 1635840120000,
|
||||||
("ETH/USDT", "5m", CandleType.SPOT): 1635840600000,
|
("ETH/USDT", "5m", CandleType.SPOT): 1635840600000,
|
||||||
}
|
}
|
||||||
@@ -287,7 +287,7 @@ async def test_exchangews_get_ohlcv(mocker, caplog):
|
|||||||
|
|
||||||
# Change "received" times to be before the candle starts.
|
# Change "received" times to be before the candle starts.
|
||||||
# This should trigger the "time sync" warning.
|
# This should trigger the "time sync" warning.
|
||||||
exchange_ws.klines_last_refresh = {
|
exchange_ws._klines_last_refresh = {
|
||||||
("ETH/USDT", "1m", CandleType.SPOT): 1635840110000,
|
("ETH/USDT", "1m", CandleType.SPOT): 1635840110000,
|
||||||
("ETH/USDT", "5m", CandleType.SPOT): 1635840600000,
|
("ETH/USDT", "5m", CandleType.SPOT): 1635840600000,
|
||||||
}
|
}
|
||||||
@@ -323,7 +323,7 @@ async def test_exchangews_get_ohlcv_missing_refresh_date(mocker, caplog):
|
|||||||
mocker.patch("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever", MagicMock())
|
mocker.patch("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever", MagicMock())
|
||||||
|
|
||||||
exchange_ws = ExchangeWS(config, ccxt_object)
|
exchange_ws = ExchangeWS(config, ccxt_object)
|
||||||
exchange_ws.klines_last_refresh = {}
|
exchange_ws._klines_last_refresh = {}
|
||||||
|
|
||||||
# No refresh-date entry should not raise KeyError.
|
# No refresh-date entry should not raise KeyError.
|
||||||
resp = await exchange_ws.get_ohlcv("ETH/USDT", "1m", CandleType.SPOT, 1635840120000)
|
resp = await exchange_ws.get_ohlcv("ETH/USDT", "1m", CandleType.SPOT, 1635840120000)
|
||||||
@@ -355,7 +355,7 @@ def test_exchangews_continuous_stopped_task_exception(mocker, caplog):
|
|||||||
|
|
||||||
paircomb = ("ETH/USDT", "1m", CandleType.SPOT)
|
paircomb = ("ETH/USDT", "1m", CandleType.SPOT)
|
||||||
exchange_ws._klines_scheduled.add(paircomb)
|
exchange_ws._klines_scheduled.add(paircomb)
|
||||||
exchange_ws.klines_last_refresh[paircomb] = 1
|
exchange_ws._klines_last_refresh[paircomb] = 1
|
||||||
|
|
||||||
task = MagicMock()
|
task = MagicMock()
|
||||||
task.cancelled.return_value = False
|
task.cancelled.return_value = False
|
||||||
@@ -378,7 +378,7 @@ def test_exchangews_continuous_stopped_task_exception(mocker, caplog):
|
|||||||
|
|
||||||
assert task not in exchange_ws._background_tasks
|
assert task not in exchange_ws._background_tasks
|
||||||
assert paircomb not in exchange_ws._klines_scheduled
|
assert paircomb not in exchange_ws._klines_scheduled
|
||||||
assert paircomb not in exchange_ws.klines_last_refresh
|
assert paircomb not in exchange_ws._klines_last_refresh
|
||||||
assert ccxt_object.ohlcvs["ETH/USDT"].get("1m") is None
|
assert ccxt_object.ohlcvs["ETH/USDT"].get("1m") is None
|
||||||
assert run_threadsafe.call_count == 1
|
assert run_threadsafe.call_count == 1
|
||||||
assert log_has_re("Unhandled exception in watch task callback for ETH/USDT, 1m", caplog)
|
assert log_has_re("Unhandled exception in watch task callback for ETH/USDT, 1m", caplog)
|
||||||
|
|||||||
Reference in New Issue
Block a user