summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kombu/compression.py9
-rw-r--r--requirements/extras/brotli.txt2
-rw-r--r--requirements/test-ci.txt1
-rw-r--r--t/unit/test_compression.py16
4 files changed, 28 insertions, 0 deletions
diff --git a/kombu/compression.py b/kombu/compression.py
index 26feb70c..e8e5504b 100644
--- a/kombu/compression.py
+++ b/kombu/compression.py
@@ -76,3 +76,12 @@ register(zlib.compress,
register(bz2.compress,
bz2.decompress,
'application/x-bz2', aliases=['bzip2', 'bzip'])
+
+try:
+ import brotli
+except ImportError:
+ pass
+else:
+ register(brotli.compress,
+ brotli.decompress,
+ 'application/x-brotli', aliases=['brotli'])
diff --git a/requirements/extras/brotli.txt b/requirements/extras/brotli.txt
new file mode 100644
index 00000000..a449c7de
--- /dev/null
+++ b/requirements/extras/brotli.txt
@@ -0,0 +1,2 @@
+brotlipy>=0.7.0;python_implementation=="PyPy"
+brotli>=1.0.0;python_implementation=="CPython"
diff --git a/requirements/test-ci.txt b/requirements/test-ci.txt
index 65b43895..143af172 100644
--- a/requirements/test-ci.txt
+++ b/requirements/test-ci.txt
@@ -9,4 +9,5 @@ msgpack-python>0.2.0
-r extras/consul.txt
-r extras/librabbitmq.txt
-r extras/zookeeper.txt
+-r extras/brotli.txt
sqlalchemy
diff --git a/t/unit/test_compression.py b/t/unit/test_compression.py
index 4f18f05d..2b416824 100644
--- a/t/unit/test_compression.py
+++ b/t/unit/test_compression.py
@@ -1,5 +1,7 @@
from __future__ import absolute_import, unicode_literals
+import pytest
+
from kombu import compression
@@ -11,6 +13,11 @@ class test_compression:
def test_encoders__bz2(self):
assert 'application/x-bz2' in compression.encoders()
+ def test_encoders__brotli(self):
+ pytest.importorskip('brotli')
+
+ assert 'application/x-brotli' in compression.encoders()
+
def test_compress__decompress__zlib(self):
text = b'The Quick Brown Fox Jumps Over The Lazy Dog'
c, ctype = compression.compress(text, 'zlib')
@@ -24,3 +31,12 @@ class test_compression:
assert text != c
d = compression.decompress(c, ctype)
assert d == text
+
+ def test_compress__decompress__brotli(self):
+ pytest.importorskip('brotli')
+
+ text = b'The Brown Quick Fox Over The Lazy Dog Jumps'
+ c, ctype = compression.compress(text, 'brotli')
+ assert text != c
+ d = compression.decompress(c, ctype)
+ assert d == text