pyinfra/pyinfra/utils/buffer.py

24 lines
701 B
Python

from collections import deque
from typing import Any
from funcy import repeatedly
def bufferize(fn, buffer_size=3, persist_fn=lambda x: x):
def buffered_fn(item: Any, final=False):
buffer.append(persist_fn(item))
response_payload = fn(repeatedly(buffer.popleft, n_items_to_pop(buffer, final)))
return response_payload
def buffer_full(current_buffer_size):
assert current_buffer_size <= buffer_size
return current_buffer_size == buffer_size
def n_items_to_pop(buffer, final):
current_buffer_size = len(buffer)
return (final or buffer_full(current_buffer_size)) * current_buffer_size
buffer = deque()
return buffered_fn