Skip to content

Instantly share code, notes, and snippets.

@nxnfufunezn
Created October 26, 2015 04:41
Show Gist options
  • Save nxnfufunezn/d3fe9c805004a94a262d to your computer and use it in GitHub Desktop.
Save nxnfufunezn/d3fe9c805004a94a262d to your computer and use it in GitHub Desktop.
Python Script to test encoding
from flask import after_this_request, request
from cStringIO import StringIO as IO
import gzip
import functools
def gzipped(f):
@functools.wraps(f)
def view_func(*args, **kwargs):
@after_this_request
def zipper(response):
print request.headers
response.direct_passthrough = False
if (response.status_code < 200 or
response.status_code >= 300 or
'Content-Encoding' in response.headers):
return response
gzip_buffer = IO()
gzip_file = gzip.GzipFile(mode='wb',
fileobj=gzip_buffer)
gzip_file.write(response.data)
gzip_file.close()
response.data = gzip_buffer.getvalue()
response.headers['Content-Encoding'] = 'gzip'
response.headers['Vary'] = 'Accept-Encoding'
response.headers['Content-Length'] = len(response.data)
return response
return f(*args, **kwargs)
return view_func
def brotlified(f):
@functools.wraps(f)
def view_func(*args, **kwargs):
@after_this_request
def zipper(response):
print request.headers
response.direct_passthrough = False
if (response.status_code < 200 or
response.status_code >= 300 or
'Content-Encoding' in response.headers):
return response
compressed_data = brotli.compress(response.data)
response.data = compressed_data
response.headers['Content-Encoding'] = 'br'
response.headers['Vary'] = 'Accept-Encoding'
response.headers['Content-Length'] = len(response.data)
return response
return f(*args, **kwargs)
return view_func
from flask import Flask
app = Flask(__name__)
import brotli
@app.route('/')
def hello_world():
return '/gzip for gzip </br> /brotli for brotli'
@app.route('/gzip')
@gzipped
def gzip_me():
return "XXXXXXXXXXZZZZZYYYYYYYYYY"
@app.route('/brotli')
@brotlified
def brotli_me():
return "XXXXXXXXXXZZZZZYYYYYYYYYY"
if __name__ == '__main__':
app.run( port=8000 )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment