Skip to content

Commit 62cb74b

Browse files
authored
Do not assume Python 3.14 has compression.zstd
1 parent 0558851 commit 62cb74b

File tree

1 file changed

+14
-28
lines changed

1 file changed

+14
-28
lines changed

discord/utils.py

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,6 @@
7474

7575
import yarl
7676

77-
if sys.version_info >= (3, 14):
78-
import compression.zstd
79-
else:
80-
import zlib
81-
8277
try:
8378
import orjson # type: ignore
8479
except ModuleNotFoundError:
@@ -87,11 +82,18 @@
8782
HAS_ORJSON = True
8883

8984
try:
90-
import zstandard # type: ignore
91-
except ImportError:
92-
_HAS_ZSTD = False
93-
else:
85+
from zstandard import ZstdDecompressor # type: ignore
86+
9487
_HAS_ZSTD = True
88+
except ImportError:
89+
try:
90+
from compression.zstd import ZstdDecompressor # type: ignore
91+
except ImportError:
92+
import zlib
93+
94+
_HAS_ZSTD = False
95+
else:
96+
_HAS_ZSTD = True
9597

9698
__all__ = (
9799
'oauth_url',
@@ -1429,32 +1431,16 @@ def _human_join(seq: Sequence[str], /, *, delimiter: str = ', ', final: str = 'o
14291431
if _HAS_ZSTD:
14301432

14311433
class _ZstdDecompressionContext:
1432-
__slots__ = ('context',)
1433-
1434-
COMPRESSION_TYPE: str = 'zstd-stream'
1435-
1436-
def __init__(self) -> None:
1437-
decompressor = zstandard.ZstdDecompressor()
1438-
self.context = decompressor.decompressobj()
1439-
1440-
def decompress(self, data: bytes, /) -> str | None:
1441-
# Each WS message is a complete gateway message
1442-
return self.context.decompress(data).decode('utf-8')
1443-
1444-
_ActiveDecompressionContext: Type[_DecompressionContext] = _ZstdDecompressionContext
1445-
elif sys.version_info >= (3, 14):
1446-
1447-
class _ZstdDecompressionContext:
1448-
__slots__ = ('context',)
1434+
__slots__ = ('decompressor',)
14491435

14501436
COMPRESSION_TYPE: str = 'zstd-stream'
14511437

14521438
def __init__(self) -> None:
1453-
self.context = compression.zstd.ZstdDecompressor()
1439+
self.decompressor = ZstdDecompressor()
14541440

14551441
def decompress(self, data: bytes, /) -> str | None:
14561442
# Each WS message is a complete gateway message
1457-
return self.context.decompress(data).decode('utf-8')
1443+
return self.decompressor.decompress(data).decode('utf-8')
14581444

14591445
_ActiveDecompressionContext: Type[_DecompressionContext] = _ZstdDecompressionContext
14601446
else:

0 commit comments

Comments
 (0)