From 40cb70fca132d86a9fe117e96fd665fa9ae24931 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 Dec 2024 14:30:47 +0100 Subject: [PATCH] fix: one-side pairlocks not showing in UI --- freqtrade/persistence/pairlock.py | 6 +++--- freqtrade/persistence/pairlock_middleware.py | 5 +++-- tests/plugins/test_pairlocks.py | 7 +++++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/freqtrade/persistence/pairlock.py b/freqtrade/persistence/pairlock.py index 01549fb63..6c98a607d 100644 --- a/freqtrade/persistence/pairlock.py +++ b/freqtrade/persistence/pairlock.py @@ -39,7 +39,7 @@ class PairLock(ModelBase): @staticmethod def query_pair_locks( - pair: str | None, now: datetime, side: str = "*" + pair: str | None, now: datetime, side: str | None = None ) -> ScalarResult["PairLock"]: """ Get all currently active locks for this pair @@ -53,9 +53,9 @@ class PairLock(ModelBase): ] if pair: filters.append(PairLock.pair == pair) - if side != "*": + if side is not None and side != "*": filters.append(or_(PairLock.side == side, PairLock.side == "*")) - else: + elif side is not None: filters.append(PairLock.side == "*") return PairLock.session.scalars(select(PairLock).filter(*filters)) diff --git a/freqtrade/persistence/pairlock_middleware.py b/freqtrade/persistence/pairlock_middleware.py index c182cf534..0adbcc8be 100644 --- a/freqtrade/persistence/pairlock_middleware.py +++ b/freqtrade/persistence/pairlock_middleware.py @@ -67,13 +67,14 @@ class PairLocks: @staticmethod def get_pair_locks( - pair: str | None, now: datetime | None = None, side: str = "*" + pair: str | None, now: datetime | None = None, side: str | None = None ) -> Sequence[PairLock]: """ Get all currently active locks for this pair :param pair: Pair to check for. Returns all current locks if pair is empty :param now: Datetime object (generated via datetime.now(timezone.utc)). defaults to datetime.now(timezone.utc) + :param side: Side get locks for, can be 'long', 'short', '*' or None """ if not now: now = datetime.now(timezone.utc) @@ -88,7 +89,7 @@ class PairLocks: lock.lock_end_time >= now and lock.active is True and (pair is None or lock.pair == pair) - and (lock.side == "*" or lock.side == side) + and (side is None or lock.side == "*" or lock.side == side) ) ] return locks diff --git a/tests/plugins/test_pairlocks.py b/tests/plugins/test_pairlocks.py index 0102079fe..f227818b3 100644 --- a/tests/plugins/test_pairlocks.py +++ b/tests/plugins/test_pairlocks.py @@ -37,6 +37,7 @@ def test_PairLocks(use_db): assert not PairLocks.is_pair_locked(pair) assert not PairLocks.is_pair_locked(pair, side="long") assert PairLocks.is_pair_locked(pair, side="short") + assert len(PairLocks.get_pair_locks(pair)) == 1 # XRP/BTC should not be locked now pair = "XRP/BTC" @@ -47,9 +48,11 @@ def test_PairLocks(use_db): PairLocks.lock_pair(pair, dt_now() + timedelta(minutes=4)) assert PairLocks.is_pair_locked(pair) - # Get both locks from above + # Get all locks from above locks = PairLocks.get_pair_locks(None) - assert len(locks) == 2 + assert len(locks) == 4 + + assert len(PairLocks.get_pair_locks(None, side="*")) == 2 # Unlock original pair pair = "ETH/BTC"