41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
import logging
|
|
|
|
from flask import jsonify
|
|
|
|
from pyinfra.server.dispatcher.dispatcher import Nothing
|
|
from pyinfra.server.stream.queued_stream_function import QueuedStreamFunction
|
|
|
|
logger = logging.getLogger()
|
|
|
|
|
|
class LazyRestProcessor:
|
|
def __init__(self, queued_stream_function: QueuedStreamFunction, submit_suffix="submit", pickup_suffix="pickup"):
|
|
self.submit_suffix = submit_suffix
|
|
self.pickup_suffix = pickup_suffix
|
|
self.queued_stream_function = queued_stream_function
|
|
|
|
def push(self, request):
|
|
self.queued_stream_function.push(request.json)
|
|
return jsonify(request.base_url.replace(self.submit_suffix, self.pickup_suffix))
|
|
|
|
def pop(self):
|
|
result = self.queued_stream_function.pop() or Nothing
|
|
|
|
if not valid(result):
|
|
logger.error(f"Received invalid result: {result}")
|
|
result = Nothing
|
|
|
|
if result is Nothing:
|
|
resp = jsonify("No more items left")
|
|
resp.status_code = 204
|
|
|
|
else:
|
|
resp = jsonify(result)
|
|
resp.status_code = 206
|
|
|
|
return resp
|
|
|
|
|
|
def valid(result):
|
|
return isinstance(result, dict) or result is Nothing
|