Browse Source

Use compression.zstd for gateway compression on Python 3.14

pull/9330/merge
beerpsi 7 days ago
committed by GitHub
parent
commit
463becb7ed
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 21
      discord/utils.py
  2. 2
      pyproject.toml

21
discord/utils.py

@ -71,10 +71,14 @@ import types
import typing
import warnings
import logging
import zlib
import yarl
if sys.version_info >= (3, 14):
import compression.zstd
else:
import zlib
try:
import orjson # type: ignore
except ModuleNotFoundError:
@ -1437,6 +1441,21 @@ if _HAS_ZSTD:
# Each WS message is a complete gateway message
return self.context.decompress(data).decode('utf-8')
_ActiveDecompressionContext: Type[_DecompressionContext] = _ZstdDecompressionContext
elif sys.version_info >= (3, 14):
class _ZstdDecompressionContext:
__slots__ = ('context',)
COMPRESSION_TYPE: str = 'zstd-stream'
def __init__(self) -> None:
self.context = compression.zstd.ZstdDecompressor()
def decompress(self, data: bytes, /) -> str | None:
# Each WS message is a complete gateway message
return self.context.decompress(data).decode('utf-8')
_ActiveDecompressionContext: Type[_DecompressionContext] = _ZstdDecompressionContext
else:

2
pyproject.toml

@ -58,7 +58,7 @@ speed = [
"aiodns>=1.1; sys_platform != 'win32'",
"Brotli",
"cchardet==2.1.7; python_version < '3.10'",
"zstandard>=0.23.0"
"zstandard>=0.23.0; python_version <= '3.13'"
]
test = [
"coverage[toml]",

Loading…
Cancel
Save