29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from datetime import datetime, timedelta
|
|
|
|
from dibbler.models import Transaction
|
|
|
|
|
|
def assign_times(
|
|
transactions: list[Transaction],
|
|
start_time: datetime = datetime(2024, 1, 1, 0, 0, 0),
|
|
delta: timedelta = timedelta(minutes=1),
|
|
) -> None:
|
|
"""Assigns datetimes to a list of transactions starting from start_time and incrementing by delta."""
|
|
current_time = start_time
|
|
for transaction in transactions:
|
|
transaction.time = current_time
|
|
current_time += delta
|
|
|
|
|
|
def assert_id_order_similar_to_time_order(transactions: list[Transaction]) -> None:
|
|
"""Asserts that the order of transaction IDs is similar to the order of their timestamps."""
|
|
sorted_by_time = sorted(transactions, key=lambda t: t.time)
|
|
sorted_by_id = sorted(transactions, key=lambda t: t.id)
|
|
|
|
for t1, t2 in zip(sorted_by_time, sorted_by_id):
|
|
assert t1.id == t2.id or t1.time == t2.time, (
|
|
f"Transaction ID order does not match time order:\n"
|
|
f"ID {t1.id} at time {t1.time}\n"
|
|
f"ID {t2.id} at time {t2.time}"
|
|
)
|