Spaces:
Sleeping
Sleeping
File size: 1,142 Bytes
e2d4dfc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
from abc import ABC, abstractmethod
import json
from queue import Queue
from typing import Iterator
class QueueItemBase(ABC):
def to_dict(self) -> dict:
d = self.__dict__
d["type"] = self.__class__.__name__
return d
def to_json(self) -> str:
return json.dumps(self.to_dict())
@classmethod
def from_dict(cls, d: dict):
_d = d.copy()
del _d["type"]
return cls(**_d)
@classmethod
def from_json(cls, json_str: str):
return cls.from_dict(json.loads(json_str))
class QueueClientBase(ABC):
dequeue_interval = 0.5
@abstractmethod
def put(self, item: QueueItemBase):
...
@abstractmethod
def get(self) -> Iterator[QueueItemBase]:
...
class DefaultQueueClient(QueueClientBase):
def __init__(self) -> None:
self.queue = Queue()
self.dequeue_interval = 0.5
def put(self, item: QueueItemBase):
self.queue.put(item)
def get(self) -> Iterator[QueueItemBase]:
items = []
while not self.queue.empty():
items.append(self.queue.get())
return iter(items) |