diff --git a/wptserve/pipes.py b/wptserve/pipes.py index 637ab41811097a..e6a814f54a7ad6 100644 --- a/wptserve/pipes.py +++ b/wptserve/pipes.py @@ -3,6 +3,8 @@ import re import time import types +import gzip as gzip_module +from cStringIO import StringIO logger = logging.getLogger("wptserve") @@ -369,3 +371,23 @@ def config_replacement(match): response.content = new_content return response + +@pipe() +def gzip(request, response): + """This pipe gzip-encodes response data. + + It sets (or overwrites) these HTTP headers: + Content-Encoding is set to gzip + Content-Length is set to the length of the compressed content + """ + content = resolve_content(response) + response.headers.set("Content-Encoding", "gzip") + + out = StringIO.StringIO() + with gzip_module.GzipFile(fileobj=out, mode="w") as f: + f.write(content) + response.content = out.getvalue() + + response.headers.set("Content-Length", len(response.content)) + + return response