from funcy import first from pyinfra.server.buffering.queue import stream_queue, Queue class QueuedStreamFunction: def __init__(self, stream_function): """Combines a stream function with a queue. Args: stream_function: Needs to operate on iterables. """ self.queue = Queue() self.stream_function = stream_function def push(self, item): self.queue.append(item) def pop(self): items = stream_queue(self.queue) return first(self.stream_function(items))