feat: don't allow re-creation of existing logs
This prevents lock spam - where 100ds of identical rows can be inserted into the database
This commit is contained in:
@@ -29,6 +29,11 @@ class PairLock(ModelBase):
|
|||||||
|
|
||||||
active: Mapped[bool] = mapped_column(nullable=False, default=True, index=True)
|
active: Mapped[bool] = mapped_column(nullable=False, default=True, index=True)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def lock_end_time_utc(self) -> datetime:
|
||||||
|
"""Lock end time with UTC timezoneinfo"""
|
||||||
|
return self.lock_end_time.replace(tzinfo=UTC)
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
lock_time = self.lock_time.strftime(DATETIME_PRINT_FORMAT)
|
lock_time = self.lock_time.strftime(DATETIME_PRINT_FORMAT)
|
||||||
lock_end_time = self.lock_end_time.strftime(DATETIME_PRINT_FORMAT)
|
lock_end_time = self.lock_end_time.strftime(DATETIME_PRINT_FORMAT)
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ class PairLocks:
|
|||||||
) -> PairLock:
|
) -> PairLock:
|
||||||
"""
|
"""
|
||||||
Create PairLock from now to "until".
|
Create PairLock from now to "until".
|
||||||
|
Does not create a new lock if there is already a lock with the same Reason, side and end time.
|
||||||
Uses database by default, unless PairLocks.use_db is set to False,
|
Uses database by default, unless PairLocks.use_db is set to False,
|
||||||
in which case a list is maintained.
|
in which case a list is maintained.
|
||||||
:param pair: pair to lock. use '*' to lock all pairs
|
:param pair: pair to lock. use '*' to lock all pairs
|
||||||
@@ -50,10 +51,19 @@ class PairLocks:
|
|||||||
:param now: Current timestamp. Used to determine lock start time.
|
:param now: Current timestamp. Used to determine lock start time.
|
||||||
:param side: Side to lock pair, can be 'long', 'short' or '*'
|
:param side: Side to lock pair, can be 'long', 'short' or '*'
|
||||||
"""
|
"""
|
||||||
|
lock_end_time = timeframe_to_next_date(PairLocks.timeframe, until)
|
||||||
|
existing_locks = PairLocks.get_pair_locks(pair, now, side=side)
|
||||||
|
for lock in existing_locks:
|
||||||
|
if (
|
||||||
|
lock.reason == reason
|
||||||
|
and lock.lock_end_time_utc == lock_end_time
|
||||||
|
and lock.side == side
|
||||||
|
):
|
||||||
|
return lock
|
||||||
lock = PairLock(
|
lock = PairLock(
|
||||||
pair=pair,
|
pair=pair,
|
||||||
lock_time=now or datetime.now(UTC),
|
lock_time=now or datetime.now(UTC),
|
||||||
lock_end_time=timeframe_to_next_date(PairLocks.timeframe, until),
|
lock_end_time=lock_end_time,
|
||||||
reason=reason,
|
reason=reason,
|
||||||
side=side,
|
side=side,
|
||||||
active=True,
|
active=True,
|
||||||
|
|||||||
Reference in New Issue
Block a user