import datetime import json import time def _url_dir(request): return u'/'.join(request.url_parts.path.split(u'/')[:-1]) + u'/' def store_request_timing_and_headers(request): """Store the current timestamp and request's headers in the stash object of the server. The request must a GET request and must have the "id" parameter. """ id = request.GET.first(b"id") timestamp = datetime.datetime.now().timestamp() value = { "timestamp": timestamp, "headers": request.raw_headers, } url_dir = _url_dir(request) request.server.stash.put(id, value, url_dir) def get_request_timing_and_headers(request, id=None): """Get previously stored timestamp and request headers associated with the given "id". When "id" is not given the id is retrieved from "request". """ if id is None: id = request.GET.first(b"id") url_dir = _url_dir(request) item = request.server.stash.take(id, url_dir) if not item: return None return json.dumps(item) def wait_for_preload_to_finish(request, id): """Wait until a preload associated with "id" is sent.""" while True: if get_request_timing_and_headers(request, id): break time.sleep(0.1) time.sleep(0.1)