Browse Source
Use compression.zstd for gateway compression on Python 3.14
pull/9330/merge
beerpsi
7 days ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with
21 additions and
2 deletions
-
discord/utils.py
-
pyproject.toml
|
|
@ -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: |
|
|
|
|
|
|
|
|
|
@ -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]", |
|
|
|