summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruvok2025-04-15 17:49:08 +0200
committeruvok2025-04-15 17:49:08 +0200
commite9ee4a15e7824ecf774bf126c75d0465a237cf27 (patch)
treed5526dd548901339fc40b01aad45f2e8f61fab83
parentd86d0ecaddc27b85053758fab55c3f72562dfd2a (diff)
Mark queue as "internal"
-rw-r--r--test_trade_queue.py18
-rw-r--r--trade_queue.py13
2 files changed, 17 insertions, 14 deletions
diff --git a/test_trade_queue.py b/test_trade_queue.py
index 2fa3ee3..1bfa1ef 100644
--- a/test_trade_queue.py
+++ b/test_trade_queue.py
@@ -17,9 +17,9 @@ class TestFIFOQueue(unittest.TestCase):
"""
Test adding trades to the queue.
"""
- self.assertEqual(len(self.queue.queue), 3) # There should be 3 trades in the queue
- self.assertEqual(self.queue.queue[0].amount, 10.0) # Check the first trade's amount
- self.assertEqual(self.queue.queue[1].date, "2025-04-15") # Check the second trade's date
+ self.assertEqual(len(self.queue._queue), 3) # There should be 3 trades in the queue
+ self.assertEqual(self.queue._queue[0].amount, 10.0) # Check the first trade's amount
+ self.assertEqual(self.queue._queue[1].date, "2025-04-15") # Check the second trade's date
def test_remove_exact_amount(self):
"""
@@ -28,7 +28,7 @@ class TestFIFOQueue(unittest.TestCase):
trades = self.queue.remove_coins(10.0)
self.assertEqual(len(trades), 1) # One trade should be returned
self.assertEqual(trades[0].amount, 10.0) # Amount should match the request
- self.assertEqual(len(self.queue.queue), 2) # Two trades should remain in the queue
+ self.assertEqual(len(self.queue._queue), 2) # Two trades should remain in the queue
def test_remove_partial_trade(self):
"""
@@ -37,7 +37,7 @@ class TestFIFOQueue(unittest.TestCase):
trades = self.queue.remove_coins(5.0)
self.assertEqual(len(trades), 1) # One partial trade should be returned
self.assertEqual(trades[0].amount, 5.0) # Amount should match the request
- self.assertEqual(self.queue.queue[0].amount, 5.0) # Remaining trade amount should update
+ self.assertEqual(self.queue._queue[0].amount, 5.0) # Remaining trade amount should update
def test_remove_multiple_trades(self):
"""
@@ -47,7 +47,7 @@ class TestFIFOQueue(unittest.TestCase):
self.assertEqual(len(trades), 2) # Two trades should be returned
self.assertEqual(trades[0].amount, 10.0) # The first trade should be fully consumed
self.assertEqual(trades[1].amount, 15.0) # The second trade should be partially consumed
- self.assertEqual(self.queue.queue[0].amount, 5.0) # Remaining trade in queue should update
+ self.assertEqual(self.queue._queue[0].amount, 5.0) # Remaining trade in queue should update
def test_remove_insufficient_amount(self):
"""
@@ -108,9 +108,9 @@ class TestFIFOQueue(unittest.TestCase):
self.assertEqual(trades[0].amount, 4.0) # Check the removed amount
self.assertEqual(trades[0].total_cost, 40.0) # Total cost should be proportional: (100 * 5 / 10)
- self.assertEqual(self.queue.queue[0].price_per_coin, 10) # Original total cost remains unchanged
- self.assertEqual(self.queue.queue[0].amount, 6.0) # Remaining amount in the first trade should be updated
- self.assertEqual(self.queue.queue[0].total_cost, 60.0) # Original total cost remains unchanged
+ self.assertEqual(self.queue._queue[0].price_per_coin, 10) # Original total cost remains unchanged
+ self.assertEqual(self.queue._queue[0].amount, 6.0) # Remaining amount in the first trade should be updated
+ self.assertEqual(self.queue._queue[0].total_cost, 60.0) # Original total cost remains unchanged
if __name__ == "__main__":
unittest.main()
diff --git a/trade_queue.py b/trade_queue.py
index 9cae560..c7e5537 100644
--- a/trade_queue.py
+++ b/trade_queue.py
@@ -15,17 +15,20 @@ class FIFOQueue:
Will track trades.
"""
def __init__(self) -> None:
- self.queue: Deque[Trade] = deque()
+ self._queue: Deque[Trade] = deque()
self._cached_total: Decimal = Decimal(0)
self._cache_valid: bool = True
logger.info("FIFOQueue initialized with empty queue.")
+
+ def __len__(self) -> int:
+ return len(self._queue)
def add(self, amount: float | Decimal, total_cost: float | Decimal, date: str) -> None:
"""
Add a trade to the queue.
"""
trade = Trade(amount, total_cost, date)
- self.queue.append(trade)
+ self._queue.append(trade)
self._cache_valid = False
logger.info(f"Added trade: {trade}.")
@@ -52,7 +55,7 @@ class FIFOQueue:
entries: List[Trade] = []
while remaining > 0:
- trade = self.queue[0]
+ trade = self._queue[0]
logger.debug(f"Processing trade: {trade}")
if trade.amount > remaining:
@@ -64,7 +67,7 @@ class FIFOQueue:
else:
remaining -= trade.amount
entries.append(trade)
- self.queue.popleft()
+ self._queue.popleft()
logger.info(f"Removed full trade: {trade}. Remaining coins to remove: {remaining}")
return entries
@@ -75,7 +78,7 @@ class FIFOQueue:
"""
if not self._cache_valid:
logger.debug("Cache invalid, recalculating remaining amount.")
- self._cached_total = sum((trade.amount for trade in self.queue), Decimal(0))
+ self._cached_total = sum((trade.amount for trade in self._queue), Decimal(0))
self._cache_valid = True
logger.info(f"Cache recalculated: {self._cached_total:.2f}")