aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/compression/zstd/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/compression/zstd/__init__.py')
-rw-r--r--Lib/compression/zstd/__init__.py136
1 files changed, 72 insertions, 64 deletions
diff --git a/Lib/compression/zstd/__init__.py b/Lib/compression/zstd/__init__.py
index 4f734eb07b0..84b25914b0a 100644
--- a/Lib/compression/zstd/__init__.py
+++ b/Lib/compression/zstd/__init__.py
@@ -2,41 +2,48 @@
__all__ = (
# compression.zstd
- "COMPRESSION_LEVEL_DEFAULT",
- "compress",
- "CompressionParameter",
- "decompress",
- "DecompressionParameter",
- "finalize_dict",
- "get_frame_info",
- "Strategy",
- "train_dict",
+ 'COMPRESSION_LEVEL_DEFAULT',
+ 'compress',
+ 'CompressionParameter',
+ 'decompress',
+ 'DecompressionParameter',
+ 'finalize_dict',
+ 'get_frame_info',
+ 'Strategy',
+ 'train_dict',
# compression.zstd._zstdfile
- "open",
- "ZstdFile",
+ 'open',
+ 'ZstdFile',
# _zstd
- "get_frame_size",
- "zstd_version",
- "zstd_version_info",
- "ZstdCompressor",
- "ZstdDecompressor",
- "ZstdDict",
- "ZstdError",
+ 'get_frame_size',
+ 'zstd_version',
+ 'zstd_version_info',
+ 'ZstdCompressor',
+ 'ZstdDecompressor',
+ 'ZstdDict',
+ 'ZstdError',
)
import _zstd
import enum
-from _zstd import *
+from _zstd import (ZstdCompressor, ZstdDecompressor, ZstdDict, ZstdError,
+ get_frame_size, zstd_version)
from compression.zstd._zstdfile import ZstdFile, open, _nbytes
-COMPRESSION_LEVEL_DEFAULT = _zstd._compressionLevel_values[0]
+# zstd_version_number is (MAJOR * 100 * 100 + MINOR * 100 + RELEASE)
+zstd_version_info = (*divmod(_zstd.zstd_version_number // 100, 100),
+ _zstd.zstd_version_number % 100)
+"""Version number of the runtime zstd library as a tuple of integers."""
+
+COMPRESSION_LEVEL_DEFAULT = _zstd.ZSTD_CLEVEL_DEFAULT
"""The default compression level for Zstandard, currently '3'."""
class FrameInfo:
"""Information about a Zstandard frame."""
+
__slots__ = 'decompressed_size', 'dictionary_id'
def __init__(self, decompressed_size, dictionary_id):
@@ -65,7 +72,7 @@ def get_frame_info(frame_buffer):
the frame may or may not need a dictionary to be decoded,
and the ID of such a dictionary is not specified.
"""
- return FrameInfo(*_zstd._get_frame_info(frame_buffer))
+ return FrameInfo(*_zstd.get_frame_info(frame_buffer))
def train_dict(samples, dict_size):
@@ -85,7 +92,7 @@ def train_dict(samples, dict_size):
chunk_sizes = tuple(_nbytes(sample) for sample in samples)
if not chunks:
raise ValueError("samples contained no data; can't train dictionary.")
- dict_content = _zstd._train_dict(chunks, chunk_sizes, dict_size)
+ dict_content = _zstd.train_dict(chunks, chunk_sizes, dict_size)
return ZstdDict(dict_content)
@@ -119,13 +126,13 @@ def finalize_dict(zstd_dict, /, samples, dict_size, level):
chunks = b''.join(samples)
chunk_sizes = tuple(_nbytes(sample) for sample in samples)
if not chunks:
- raise ValueError("The samples are empty content, can't finalize the"
+ raise ValueError("The samples are empty content, can't finalize the "
"dictionary.")
- dict_content = _zstd._finalize_dict(zstd_dict.dict_content,
- chunks, chunk_sizes,
- dict_size, level)
+ dict_content = _zstd.finalize_dict(zstd_dict.dict_content, chunks,
+ chunk_sizes, dict_size, level)
return ZstdDict(dict_content)
+
def compress(data, level=None, options=None, zstd_dict=None):
"""Return Zstandard compressed *data* as bytes.
@@ -141,6 +148,7 @@ def compress(data, level=None, options=None, zstd_dict=None):
comp = ZstdCompressor(level=level, options=options, zstd_dict=zstd_dict)
return comp.compress(data, mode=ZstdCompressor.FLUSH_FRAME)
+
def decompress(data, zstd_dict=None, options=None):
"""Decompress one or more frames of Zstandard compressed *data*.
@@ -156,59 +164,59 @@ def decompress(data, zstd_dict=None, options=None):
decomp = ZstdDecompressor(options=options, zstd_dict=zstd_dict)
results.append(decomp.decompress(data))
if not decomp.eof:
- raise ZstdError("Compressed data ended before the "
- "end-of-stream marker was reached")
+ raise ZstdError('Compressed data ended before the '
+ 'end-of-stream marker was reached')
data = decomp.unused_data
if not data:
break
- return b"".join(results)
+ return b''.join(results)
class CompressionParameter(enum.IntEnum):
"""Compression parameters."""
- compression_level = _zstd._ZSTD_c_compressionLevel
- window_log = _zstd._ZSTD_c_windowLog
- hash_log = _zstd._ZSTD_c_hashLog
- chain_log = _zstd._ZSTD_c_chainLog
- search_log = _zstd._ZSTD_c_searchLog
- min_match = _zstd._ZSTD_c_minMatch
- target_length = _zstd._ZSTD_c_targetLength
- strategy = _zstd._ZSTD_c_strategy
-
- enable_long_distance_matching = _zstd._ZSTD_c_enableLongDistanceMatching
- ldm_hash_log = _zstd._ZSTD_c_ldmHashLog
- ldm_min_match = _zstd._ZSTD_c_ldmMinMatch
- ldm_bucket_size_log = _zstd._ZSTD_c_ldmBucketSizeLog
- ldm_hash_rate_log = _zstd._ZSTD_c_ldmHashRateLog
-
- content_size_flag = _zstd._ZSTD_c_contentSizeFlag
- checksum_flag = _zstd._ZSTD_c_checksumFlag
- dict_id_flag = _zstd._ZSTD_c_dictIDFlag
-
- nb_workers = _zstd._ZSTD_c_nbWorkers
- job_size = _zstd._ZSTD_c_jobSize
- overlap_log = _zstd._ZSTD_c_overlapLog
+ compression_level = _zstd.ZSTD_c_compressionLevel
+ window_log = _zstd.ZSTD_c_windowLog
+ hash_log = _zstd.ZSTD_c_hashLog
+ chain_log = _zstd.ZSTD_c_chainLog
+ search_log = _zstd.ZSTD_c_searchLog
+ min_match = _zstd.ZSTD_c_minMatch
+ target_length = _zstd.ZSTD_c_targetLength
+ strategy = _zstd.ZSTD_c_strategy
+
+ enable_long_distance_matching = _zstd.ZSTD_c_enableLongDistanceMatching
+ ldm_hash_log = _zstd.ZSTD_c_ldmHashLog
+ ldm_min_match = _zstd.ZSTD_c_ldmMinMatch
+ ldm_bucket_size_log = _zstd.ZSTD_c_ldmBucketSizeLog
+ ldm_hash_rate_log = _zstd.ZSTD_c_ldmHashRateLog
+
+ content_size_flag = _zstd.ZSTD_c_contentSizeFlag
+ checksum_flag = _zstd.ZSTD_c_checksumFlag
+ dict_id_flag = _zstd.ZSTD_c_dictIDFlag
+
+ nb_workers = _zstd.ZSTD_c_nbWorkers
+ job_size = _zstd.ZSTD_c_jobSize
+ overlap_log = _zstd.ZSTD_c_overlapLog
def bounds(self):
"""Return the (lower, upper) int bounds of a compression parameter.
Both the lower and upper bounds are inclusive.
"""
- return _zstd._get_param_bounds(self.value, is_compress=True)
+ return _zstd.get_param_bounds(self.value, is_compress=True)
class DecompressionParameter(enum.IntEnum):
"""Decompression parameters."""
- window_log_max = _zstd._ZSTD_d_windowLogMax
+ window_log_max = _zstd.ZSTD_d_windowLogMax
def bounds(self):
"""Return the (lower, upper) int bounds of a decompression parameter.
Both the lower and upper bounds are inclusive.
"""
- return _zstd._get_param_bounds(self.value, is_compress=False)
+ return _zstd.get_param_bounds(self.value, is_compress=False)
class Strategy(enum.IntEnum):
@@ -219,16 +227,16 @@ class Strategy(enum.IntEnum):
the numeric value might change.
"""
- fast = _zstd._ZSTD_fast
- dfast = _zstd._ZSTD_dfast
- greedy = _zstd._ZSTD_greedy
- lazy = _zstd._ZSTD_lazy
- lazy2 = _zstd._ZSTD_lazy2
- btlazy2 = _zstd._ZSTD_btlazy2
- btopt = _zstd._ZSTD_btopt
- btultra = _zstd._ZSTD_btultra
- btultra2 = _zstd._ZSTD_btultra2
+ fast = _zstd.ZSTD_fast
+ dfast = _zstd.ZSTD_dfast
+ greedy = _zstd.ZSTD_greedy
+ lazy = _zstd.ZSTD_lazy
+ lazy2 = _zstd.ZSTD_lazy2
+ btlazy2 = _zstd.ZSTD_btlazy2
+ btopt = _zstd.ZSTD_btopt
+ btultra = _zstd.ZSTD_btultra
+ btultra2 = _zstd.ZSTD_btultra2
# Check validity of the CompressionParameter & DecompressionParameter types
-_zstd._set_parameter_types(CompressionParameter, DecompressionParameter)
+_zstd.set_parameter_types(CompressionParameter, DecompressionParameter)