diff options
-rwxr-xr-x | webapp.py | 20 |
1 files changed, 11 insertions, 9 deletions
@@ -3,6 +3,7 @@ import argparse import contextlib import datetime +import io import sqlite3 from wsgiref.simple_server import make_server @@ -49,15 +50,16 @@ hash_template = jinjaenv.get_template("hash.html") index_template = jinjaenv.get_template("index.html") source_template = jinjaenv.get_template("source.html") -def encode_and_buffer(iterator): - buff = b"" - for elem in iterator: - buff += elem.encode("utf8") - if len(buff) >= 2048: - yield buff - buff = b"" - if buff: - yield buff +def encode_and_buffer(stream): + stream.enable_buffering(16) + buff = io.BytesIO() + for elem in stream: + buff.write(elem.encode("utf8")) + if buff.tell() >= 2048: + yield buff.getvalue() + buff = io.BytesIO() + if buff.tell() > 0: + yield buff.getvalue() def html_response(unicode_iterator, max_age=24 * 60 * 60): resp = Response(encode_and_buffer(unicode_iterator), mimetype="text/html") |