Merge pull request #254 from Lukasa/brotli

Add a Brotli endpoint.
This commit is contained in:
2017-03-16 20:21:26 -04:00
committed by GitHub
4 changed files with 41 additions and 1 deletions
+9
View File
@@ -204,6 +204,15 @@ def view_deflate_encoded_content():
'origin', 'headers', method=request.method, deflated=True))
@app.route('/brotli')
@filters.brotli
def view_brotli_encoded_content():
"""Returns Brotli-Encoded Data."""
return jsonify(get_dict(
'origin', 'headers', method=request.method, brotli=True))
@app.route('/redirect/<int:n>')
def redirect_n_times(n):
"""302 Redirects n times."""
+25
View File
@@ -10,6 +10,8 @@ This module provides response filter decorators.
import gzip as gzip2
import zlib
import brotli as _brotli
from six import BytesIO
from decimal import Decimal
from time import time as now
@@ -88,3 +90,26 @@ def deflate(f, *args, **kwargs):
return data
return deflated_data
@decorator
def brotli(f, *args, **kwargs):
"""Brotli Flask Response Decorator"""
data = f(*args, **kwargs)
if isinstance(data, Response):
content = data.data
else:
content = data
deflated_data = _brotli.compress(content)
if isinstance(data, Response):
data.data = deflated_data
data.headers['Content-Encoding'] = 'br'
data.headers['Content-Length'] = str(len(data.data))
return data
return deflated_data
+3 -1
View File
@@ -32,5 +32,7 @@ setup(
],
packages=find_packages(),
include_package_data = True, # include files listed in MANIFEST.in
install_requires=['Flask','MarkupSafe','decorator','itsdangerous','six'],
install_requires=[
'Flask','MarkupSafe','decorator','itsdangerous','six','brotlipy'
],
)
+4
View File
@@ -236,6 +236,10 @@ class HttpbinTestCase(unittest.TestCase):
response = self.app.get('/gzip')
self.assertEqual(response.status_code, 200)
def test_brotli(self):
response = self.app.get('/brotli')
self.assertEqual(response.status_code, 200)
def test_digest_auth_with_wrong_password(self):
auth_header = 'Digest username="user",realm="wrong",nonce="wrong",uri="/digest-auth/user/passwd/MD5",response="wrong",opaque="wrong"'
response = self.app.get(