mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-11-02 14:32:53 +00:00
Do not assume Python 3.14 has compression.zstd
This commit is contained in:
@@ -74,11 +74,6 @@ import logging
|
|||||||
|
|
||||||
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:
|
||||||
@@ -87,11 +82,18 @@ else:
|
|||||||
HAS_ORJSON = True
|
HAS_ORJSON = True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import zstandard # type: ignore
|
from zstandard import ZstdDecompressor # type: ignore
|
||||||
except ImportError:
|
|
||||||
_HAS_ZSTD = False
|
|
||||||
else:
|
|
||||||
_HAS_ZSTD = True
|
_HAS_ZSTD = True
|
||||||
|
except ImportError:
|
||||||
|
try:
|
||||||
|
from compression.zstd import ZstdDecompressor # type: ignore
|
||||||
|
except ImportError:
|
||||||
|
import zlib
|
||||||
|
|
||||||
|
_HAS_ZSTD = False
|
||||||
|
else:
|
||||||
|
_HAS_ZSTD = True
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'oauth_url',
|
'oauth_url',
|
||||||
@@ -1429,32 +1431,16 @@ def _human_join(seq: Sequence[str], /, *, delimiter: str = ', ', final: str = 'o
|
|||||||
if _HAS_ZSTD:
|
if _HAS_ZSTD:
|
||||||
|
|
||||||
class _ZstdDecompressionContext:
|
class _ZstdDecompressionContext:
|
||||||
__slots__ = ('context',)
|
__slots__ = ('decompressor',)
|
||||||
|
|
||||||
COMPRESSION_TYPE: str = 'zstd-stream'
|
COMPRESSION_TYPE: str = 'zstd-stream'
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
decompressor = zstandard.ZstdDecompressor()
|
self.decompressor = ZstdDecompressor()
|
||||||
self.context = decompressor.decompressobj()
|
|
||||||
|
|
||||||
def decompress(self, data: bytes, /) -> str | None:
|
def decompress(self, data: bytes, /) -> str | None:
|
||||||
# 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.decompressor.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:
|
||||||
|
|||||||
Reference in New Issue
Block a user