Use compression.zstd for gateway compression on Python 3.14

This commit is contained in:
beerpsi
2025-10-09 04:33:29 +07:00
committed by GitHub
parent e2b6fa8370
commit 463becb7ed
2 changed files with 21 additions and 2 deletions

View File

@@ -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:

View File

@@ -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]",