Browse Source

Use compression.zstd for gateway compression on Python 3.14

pull/9330/merge
beerpsi 1 week 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 typing
import warnings import warnings
import logging import logging
import zlib
import yarl import yarl
if sys.version_info >= (3, 14):
import compression.zstd
else:
import zlib
try: try:
import orjson # type: ignore import orjson # type: ignore
except ModuleNotFoundError: except ModuleNotFoundError:
@ -1437,6 +1441,21 @@ if _HAS_ZSTD:
# Each WS message is a complete gateway message # Each WS message is a complete gateway message
return self.context.decompress(data).decode('utf-8') 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 _ActiveDecompressionContext: Type[_DecompressionContext] = _ZstdDecompressionContext
else: else:

2
pyproject.toml

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

Loading…
Cancel
Save