From 3deaf32a4e0dcf29d8c98b619f28544de49b07a9 Mon Sep 17 00:00:00 2001 From: nocturn9x Date: Mon, 1 Jun 2020 08:37:55 +0000 Subject: [PATCH] Fixed an issue with a ttl equal to 0 and added a check in __init__ for negative values --- ttlcollections/structures.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/ttlcollections/structures.py b/ttlcollections/structures.py index 74f445f..3309e2b 100644 --- a/ttlcollections/structures.py +++ b/ttlcollections/structures.py @@ -38,6 +38,10 @@ class TTLQueue: self.qsize = qsize if qsize else math.inf # Infinite size self.ttl = ttl + if self.ttl < 0: + raise ValueError("ttl can't be negative!") + if self.qsize < 0: + raise ValueError("qsize can't be negative!") self.timer = timer self._queue = deque() @@ -74,9 +78,13 @@ class TTLQueue: """ ttl = ttl if ttl else self.ttl + if not ttl: + ttl = math.inf + else: + ttl = ttl + self.timer() self.expire(self.timer()) if len(self._queue) < self.qsize: - self._queue.append(TTLItem(element, ttl + self.timer())) + self._queue.append(TTLItem(element, ttl)) else: raise QueueFull("The queue is full!") @@ -137,6 +145,10 @@ class TTLStack: self.timer = timer self.ttl = ttl self.size = size if size else math.inf + if self.ttl < 0: + raise ValueError("ttl can't be negative!") + if self.size < 0: + raise ValueError("size can't be negative!") self._stack = deque() def push(self, element, ttl: int = 0): @@ -153,8 +165,12 @@ class TTLStack: ttl = ttl if ttl else self.ttl self.expire(self.timer()) + if not ttl: + ttl = math.inf + else: + ttl = ttl + self.timer() if len(self._stack) < self.size: - self._stack.appendleft(TTLItem(element, self.timer() + ttl)) + self._stack.appendleft(TTLItem(element, ttl)) else: raise StackFull("The stack is full!") @@ -255,9 +271,13 @@ class TTLHeap(TTLQueue): """ ttl = ttl if ttl else self.ttl + if not ttl: + ttl = math.inf + else: + ttl = ttl + self.timer() self.expire(self.timer()) if len(self._queue) < self.qsize: - heappush(self._queue, TTLItem(element, self.timer() + ttl)) + heappush(self._queue, TTLItem(element, ttl)) else: raise QueueFull("The queue is full!")