|
74 | 74 |
|
75 | 75 | import yarl |
76 | 76 |
|
77 | | -if sys.version_info >= (3, 14): |
78 | | - import compression.zstd |
79 | | -else: |
80 | | - import zlib |
81 | | - |
82 | 77 | try: |
83 | 78 | import orjson # type: ignore |
84 | 79 | except ModuleNotFoundError: |
|
87 | 82 | HAS_ORJSON = True |
88 | 83 |
|
89 | 84 | try: |
90 | | - import zstandard # type: ignore |
91 | | -except ImportError: |
92 | | - _HAS_ZSTD = False |
93 | | -else: |
| 85 | + from zstandard import ZstdDecompressor # type: ignore |
| 86 | + |
94 | 87 | _HAS_ZSTD = True |
| 88 | +except ImportError: |
| 89 | + try: |
| 90 | + from compression.zstd import ZstdDecompressor # type: ignore |
| 91 | + except ImportError: |
| 92 | + import zlib |
| 93 | + |
| 94 | + _HAS_ZSTD = False |
| 95 | + else: |
| 96 | + _HAS_ZSTD = True |
95 | 97 |
|
96 | 98 | __all__ = ( |
97 | 99 | 'oauth_url', |
@@ -1429,32 +1431,16 @@ def _human_join(seq: Sequence[str], /, *, delimiter: str = ', ', final: str = 'o |
1429 | 1431 | if _HAS_ZSTD: |
1430 | 1432 |
|
1431 | 1433 | class _ZstdDecompressionContext: |
1432 | | - __slots__ = ('context',) |
1433 | | - |
1434 | | - COMPRESSION_TYPE: str = 'zstd-stream' |
1435 | | - |
1436 | | - def __init__(self) -> None: |
1437 | | - decompressor = zstandard.ZstdDecompressor() |
1438 | | - self.context = decompressor.decompressobj() |
1439 | | - |
1440 | | - def decompress(self, data: bytes, /) -> str | None: |
1441 | | - # Each WS message is a complete gateway message |
1442 | | - return self.context.decompress(data).decode('utf-8') |
1443 | | - |
1444 | | - _ActiveDecompressionContext: Type[_DecompressionContext] = _ZstdDecompressionContext |
1445 | | -elif sys.version_info >= (3, 14): |
1446 | | - |
1447 | | - class _ZstdDecompressionContext: |
1448 | | - __slots__ = ('context',) |
| 1434 | + __slots__ = ('decompressor',) |
1449 | 1435 |
|
1450 | 1436 | COMPRESSION_TYPE: str = 'zstd-stream' |
1451 | 1437 |
|
1452 | 1438 | def __init__(self) -> None: |
1453 | | - self.context = compression.zstd.ZstdDecompressor() |
| 1439 | + self.decompressor = ZstdDecompressor() |
1454 | 1440 |
|
1455 | 1441 | def decompress(self, data: bytes, /) -> str | None: |
1456 | 1442 | # Each WS message is a complete gateway message |
1457 | | - return self.context.decompress(data).decode('utf-8') |
| 1443 | + return self.decompressor.decompress(data).decode('utf-8') |
1458 | 1444 |
|
1459 | 1445 | _ActiveDecompressionContext: Type[_DecompressionContext] = _ZstdDecompressionContext |
1460 | 1446 | else: |
|
0 commit comments