| import time |
| |
| |
| def url_dir(request): |
| return '/'.join(request.url_parts.path.split('/')[:-1]) + '/' |
| |
| |
| def stash_write(request, key, value): |
| """Write to the stash, overwriting any previous value""" |
| request.server.stash.take(key, url_dir(request)) |
| request.server.stash.put(key, value, url_dir(request)) |
| |
| |
| def main(request, response): |
| stateKey = request.GET.first("stateKey", "") |
| abortKey = request.GET.first("abortKey", "") |
| |
| if stateKey: |
| stash_write(request, stateKey, 'open') |
| |
| response.headers.set("Content-type", "text/plain") |
| response.write_status_headers() |
| |
| # Writing an initial 2k so browsers realise it's there. *shrug* |
| response.writer.write("." * 2048) |
| |
| while True: |
| if not response.writer.flush(): |
| break |
| if abortKey and request.server.stash.take(abortKey, url_dir(request)): |
| break |
| response.writer.write(".") |
| time.sleep(0.01) |
| |
| if stateKey: |
| stash_write(request, stateKey, 'closed') |