diff options
author | Omer Katz <omer.drow@gmail.com> | 2019-01-13 09:44:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-13 09:44:44 +0200 |
commit | 627964c804407322bc30c91402767652b4659e35 (patch) | |
tree | d3d68d4df00c76f832169ec179e7d5ba59d4155e | |
parent | 8c88d9276a390c5abdf43247283feaab7841c2e7 (diff) | |
download | kombu-627964c804407322bc30c91402767652b4659e35.tar.gz |
Added optional support for zstd compression. (#985)
-rw-r--r-- | kombu/compression.py | 17 | ||||
-rw-r--r-- | requirements/extras/zstd.txt | 1 | ||||
-rw-r--r-- | requirements/test-ci.txt | 1 | ||||
-rw-r--r-- | t/unit/test_compression.py | 14 |
4 files changed, 33 insertions, 0 deletions
diff --git a/kombu/compression.py b/kombu/compression.py index 0f1c43d2..2eeb34cc 100644 --- a/kombu/compression.py +++ b/kombu/compression.py @@ -100,3 +100,20 @@ if lzma: # pragma: no cover register(lzma.compress, lzma.decompress, 'application/x-lzma', aliases=['lzma', 'xz']) + +try: + import zstandard as zstd +except ImportError: # pragma: no cover + pass +else: + def zstd_compress(body): + c = zstd.ZstdCompressor() + return c.compress(body) + + def zstd_decompress(body): + d = zstd.ZstdDecompressor() + return d.decompress(body) + + register(zstd_compress, + zstd_decompress, + 'application/zstd', aliases=['zstd', 'zstandard']) diff --git a/requirements/extras/zstd.txt b/requirements/extras/zstd.txt new file mode 100644 index 00000000..864700d2 --- /dev/null +++ b/requirements/extras/zstd.txt @@ -0,0 +1 @@ +zstandard diff --git a/requirements/test-ci.txt b/requirements/test-ci.txt index 143af172..3c0e7e15 100644 --- a/requirements/test-ci.txt +++ b/requirements/test-ci.txt @@ -10,4 +10,5 @@ msgpack-python>0.2.0 -r extras/librabbitmq.txt -r extras/zookeeper.txt -r extras/brotli.txt +-r extras/zstd.txt sqlalchemy diff --git a/t/unit/test_compression.py b/t/unit/test_compression.py index 9e3bf4df..1df873d3 100644 --- a/t/unit/test_compression.py +++ b/t/unit/test_compression.py @@ -28,6 +28,11 @@ class test_compression: assert 'application/x-lzma' in compression.encoders() + def test_encoders__zstd(self): + pytest.importorskip('zstandard') + + assert 'application/zstd' 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') @@ -65,3 +70,12 @@ class test_compression: assert text != c d = compression.decompress(c, ctype) assert d == text + + def test_compress__decompress__zstd(self): + pytest.importorskip('zstandard') + + text = b'The Brown Quick Fox Over The Lazy Dog Jumps' + c, ctype = compression.compress(text, 'zstd') + assert text != c + d = compression.decompress(c, ctype) + assert d == text |