Skip to content

Commit c641235

Browse files
committed
Use compression.zstd (PEP-784)
1 parent f86523c commit c641235

File tree

3 files changed

+21
-17
lines changed

3 files changed

+21
-17
lines changed

kombu/compression.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from __future__ import annotations
44

5+
import sys
56
import zlib
67

78
from kombu.utils.encoding import ensure_bytes
@@ -104,18 +105,13 @@ def decompress(body, content_type):
104105
'application/x-lzma', aliases=['lzma', 'xz'])
105106

106107
try:
107-
import zstandard as zstd
108+
if sys.version_info >= (3, 14):
109+
from compression import zstd
110+
else:
111+
from backports import zstd
108112
except ImportError: # pragma: no cover
109-
pass
113+
pass # no zstd support
110114
else:
111-
def zstd_compress(body):
112-
c = zstd.ZstdCompressor()
113-
return c.compress(body)
114-
115-
def zstd_decompress(body):
116-
d = zstd.ZstdDecompressor()
117-
return d.decompress(body)
118-
119-
register(zstd_compress,
120-
zstd_decompress,
115+
register(zstd.compress,
116+
zstd.decompress,
121117
'application/zstd', aliases=['zstd', 'zstandard'])

requirements/extras/zstd.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
zstandard==0.25.0
1+
backports.zstd==1.0.0; python_version<'3.14'

t/unit/test_compression.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@
66

77
from kombu import compression
88

9+
try:
10+
if sys.version_info >= (3, 14):
11+
from compression import zstd
12+
else:
13+
from backports import zstd
14+
except ImportError:
15+
_HAS_ZSTD = False
16+
else:
17+
_HAS_ZSTD = True
18+
919

1020
class test_compression:
1121

@@ -26,9 +36,8 @@ def test_encoders__lzma(self):
2636

2737
assert 'application/x-lzma' in compression.encoders()
2838

39+
@pytest.mark.skipif(not _HAS_ZSTD, reason="requires zstd support")
2940
def test_encoders__zstd(self):
30-
pytest.importorskip('zstandard')
31-
3241
assert 'application/zstd' in compression.encoders()
3342

3443
def test_compress__decompress__zlib(self):
@@ -63,9 +72,8 @@ def test_compress__decompress__lzma(self):
6372
d = compression.decompress(c, ctype)
6473
assert d == text
6574

75+
@pytest.mark.skipif(not _HAS_ZSTD, reason="requires zstd support")
6676
def test_compress__decompress__zstd(self):
67-
pytest.importorskip('zstandard')
68-
6977
text = b'The Brown Quick Fox Over The Lazy Dog Jumps'
7078
c, ctype = compression.compress(text, 'zstd')
7179
assert text != c

0 commit comments

Comments
 (0)