Releases: indygreg/python-zstandard
Releases · indygreg/python-zstandard
0.22.0
Backwards Compatibility Notes
ZstdDecompressor.decompressobj()
will changeread_across_frames
to
default toTrue
in a future release. If you depend on the current
functionality of stopping at frame boundaries, start explicitly passing
read_across_frames=False
to preserve the current behavior.manylinux2010
wheels are no longer published since this wheel format
is no longer supported by the pypa/manylinux project.- Removed CI coverage for PyPy 3.7 and 3.8, which are no longer supported
PyPy versions. - Support for Python 3.7 has been dropped because it reached end of life.
Python 3.8 is the minimum supported Python version. The code should still be
compatible with Python 3.7 and removing of version checks fromsetup.py
will likely yield a working install. However, this is no officially supported.
Changes
ZstdDecompressor.decompressobj()
now accepts aread_across_frames
boolean named argument to control whether to transparently read across
multiple zstd frames. It defaults toFalse
to preserve existing
behavior.- Added CI coverage for PyPy 3.10.
- Added CI coverage for newer Anaconda Python versions.
- Packages used in CI have been upgraded to latest versions. This should
nominally only impact developers of this project and not end-users. pyproject.toml
now declares a[build-system]
section saying to build
with setuptools.- CI now builds wheels with pip instead of
setup.py
directly. - Official support for CPython 3.12. Binary wheels for 3.12 are now published
during releases. There were no meaningful code changes to support Python 3.12. - Binary wheels for musllinux_1_1 x86_64 and aarch64 are now being built and
published.
0.21.0
Backwards Compatibility Notes
- Support for Python 3.6 has been dropped. Python 3.7 is the minimum supported
Python version.
Changes
- Bundled zstd library upgraded from 1.5.4 to 1.5.5.
- PyO3 Rust crate upgraded from 0.15 to 0.18.
- CI environment changed from Ubuntu 20.04 -> 22.04, Windows 2019 -> 2022,
macOS 11 -> macOS 12. - C types now use
PyType_Spec
and corresponding APIs. (#187) Contributed by
Mike Hommey.
0.20.0
Backwards Compatibility Notes
- This will likely be the last release officially supporting Python 3.6.
Python 3.6 is end of life as of 2021-12-23.
Changes
- Bundled zstd library upgraded from 1.5.2 to 1.5.4.
- Use of the deprecated
ZSTD_copyDCtx()
was removed from the C and
Rust backends.
0.19.0
Bug Fixes
- The C backend implementation of
ZstdDecompressionObj.decompress()
could
have raised an assertion in cases where the function was called multiple
times on an instance. In non-debug builds, calls to this method could have
leaked memory.
Changes
- PyPy 3.6 support dropped; Pypy 3.8 and 3.9 support added.
- Anaconda 3.6 support dropped.
- Official support for Python 3.11. This did not require meaningful code changes
and previous release(s) likely worked with 3.11 without any changes. - CFFI's build system now respects distutils's
compiler.preprocessor
if it
is set. (#179) - The internal logic of
ZstdDecompressionObj.decompress()
was refactored.
This may have fixed unconfirmed issues whereunused_data
was set
prematurely. The new logic will also avoid an extra call to
ZSTD_decompressStream()
in some scenarios, possibly improving performance. ZstdDecompressor.decompress()
how has aread_across_frames
keyword
argument. It defaults to False. True is not yet implemented and will raise an
exception if used. The new argument will default to True in a future release
and is provided now so callers can start passingread_across_frames=False
to preserve the existing functionality during a future upgrade.ZstdDecompressor.decompress()
now has anallow_extra_data
keyword
argument to control whether an exception is raised if input contains extra
data. It defaults to True, preserving existing behavior of ignoring extra
data. It will likely default to False in a future release. Callers desiring
the current behavior are encouraged to explicitly pass
allow_extra_data=True
so behavior won't change during a future upgrade.
0.16.0
Backwards Compatibility Notes
- Support for Python 3.5 has been dropped. Python 3.6 is now the minimum required Python version.
Changes
- Bundled zstd library upgraded from 1.4.8 to 1.5.0.
manylinux2014_aarch64
wheels are now being produced for CPython 3.6+. (#145).- Wheels are now being produced for CPython 3.10.
- Arguments to
ZstdCompressor()
andZstdDecompressor()
are now all optional in the C backend and an explicitNone
value is accepted. Before, the C backend wouldn't accept an explicitNone
value (but the CFFI backend would). The new behavior should be consistent between the backends. (#153)
0.15.2
0.15.2 (released 2021-02-27)
Backwards Compatibility Notes
ZstdCompressor.multi_compress_to_buffer()
and
ZstdDecompressor.multi_decompress_to_buffer()
are no longer
available when linking against a system zstd library. These
experimental features are only available when building against the
bundled single file zstd C source file distribution. (#106)
Changes
setup.py
now recognizes aZSTD_EXTRA_COMPILER_ARGS
environment variable to specify additional compiler arguments
to use when compiling the C backend.- PyPy build and test coverage has been added to CI.
- Added CI jobs for building against external zstd library.
- Wheels supporting macOS ARM/M1 devices are now being produced.
- References to Python 2 have been removed from the in-repo Debian packaging
code. - Significant work has been made on a Rust backend. It is currently feature
complete but not yet optimized. We are not yet shipping the backend as part
of the distributed wheels until it is more mature. - The
.pyi
type annotations file has replaced various default argument
values with...
.
0.15.1
Bug Fixes
setup.py
no longer attempts to build the C backend on PyPy. (#130)<sys/types.h>
is now included before<sys/sysctl.h>
. This was
the case in releases prior to 0.15.0 and the include order was reversed
as part of runningclang-format
. The old/working order has been
restored. (#128)- Include some private zstd C headers so we can build the C extension against
a system library. The previous behavior of referencing these headers is
restored. That behave is rather questionable and undermines the desire to
use the system zstd.
0.15.0
Backwards Compatibility Notes
- Support for Python 2.7 has been dropped. Python 3.5 is now the
minimum required Python version. (#109) train_dictionary()
now uses thefastcover
training mechanism
(as opposed tocover
). Some parameter values that worked with the old
mechanism may not work with the new one. e.g.d
must be6
or8
if it is defined.train_dictionary()
now always calls
ZDICT_optimizeTrainFromBuffer_fastCover()
instead of different APIs
depending on which arguments were passed.- The names of various Python modules have been changed. The C extension
is now built aszstandard.backend_c
instead ofzstd
. The
CFFI extension module is now built aszstandard._cffi
instead of
_zstd_cffi
. The CFFI backend is nowzstandard.backend_cffi
instead
ofzstandard.cffi
. ZstdDecompressionReader.seekable()
now returnsFalse
instead of
True
because not all seek operations are supported and some Python
code in the wild keys off this value to determine ifseek()
can be
called for all scenarios.ZstdDecompressionReader.seek()
now raisesOSError
instead of
ValueError
when the seek cannot be fulfilled. (#107)ZstdDecompressionReader.readline()
and
ZstdDecompressionReader.readlines()
now accept an integer argument.
This makes them conform with the IO interface. The methods still raise
io.UnsupportedOperation
.ZstdCompressionReader.__enter__
andZstdDecompressionReader.__enter__
now raiseValueError
if the instance was already closed.- The deprecated
overlap_size_log
attribute onZstdCompressionParameters
instances has been removed. Theoverlap_log
attribute should be used
instead. - The deprecated
overlap_size_log
argument toZstdCompressionParameters
has been removed. Theoverlap_log
argument should be used instead. - The deprecated
ldm_hash_every_log
attribute on
ZstdCompressionParameters
instances has been removed. The
ldm_hash_rate_log
attribute should be used instead. - The deprecated
ldm_hash_every_log
argument to
ZstdCompressionParameters
has been removed. Theldm_hash_rate_log
argument should be used instead. - The deprecated
CompressionParameters
type alias to
ZstdCompressionParamaters
has been removed. Use
ZstdCompressionParameters
. - The deprecated aliases
ZstdCompressor.read_from()
and
ZstdDecompressor.read_from()
have been removed. Use the corresponding
read_to_iter()
methods instead. - The deprecated aliases
ZstdCompressor.write_to()
and
ZstdDecompressor.write_to()
have been removed. Use the corresponding
stream_writer()
methods instead. ZstdCompressor.copy_stream()
,ZstdCompressorIterator.__next__()
,
andZstdDecompressor.copy_stream()
now raise the original exception
on error calling the source stream'sread()
instead of raising
ZstdError
. This only affects the C backend.ZstdDecompressionObj.flush()
now returnsbytes
instead of
None
. This makes it behave more similarly toflush()
methods
for similar types in the Python standard library. (#78)ZstdCompressionWriter.__exit__()
now always callsclose()
.
Previously,close()
would not be called if the context manager
raised an exception. The old behavior was inconsistent with other
stream types in this package and with the behavior of Python's
standard library IO types. (#86)- Distribution metadata no longer lists
cffi
as aninstall_requires
except when running on PyPy. Instead,cffi
is listed as an
extras_require
. ZstdCompressor.stream_reader()
andZstdDecompressor.stream_reader()
now default to closing the source stream when the instance is itself
closed. To change this behavior, passclosefd=False
. (#76)- The
CFFI
backend now defines
ZstdCompressor.multi_compress_to_buffer()
and
ZstdDecompressor.multi_decompress_to_buffer()
. However, they
raiseNotImplementedError
, as they are not yet implemented. - The
CFFI
backend now exposes the typesZstdCompressionChunker
,
ZstdCompressionObj
,ZstdCompressionReader
,
ZstdCompressionWriter
,ZstdDecompressionObj
,
ZstdDecompressionReader
, andZstdDecompressionWriter
as
symbols on thezstandard
module. - The
CFFI
backend now exposes the typesBufferSegment
,
BufferSegments
,BufferWithSegments
, and
BufferWithSegmentsCollection
. However, they are not implemented. ZstdCompressionWriter.flush()
now callsflush()
on the inner stream
if such a method exists. However, whenclose()
itself calls
self.flush()
,flush()
is not called on the inner stream.ZstdDecompressionWriter.close()
no longer callsflush()
on
the inner stream. However,ZstdDecompressionWriter.flush()
still
callsflush()
on the inner stream.ZstdCompressor.stream_writer()
andZstdDecompressor.stream_writer()
now have theirwrite_return_read
argument default toTrue
.
This brings the behavior ofwrite()
in compliance with the
io.RawIOBase
interface by default. The argument may be removed
in a future release.ZstdCompressionParameters
no longer exposes acompression_strategy
property. Its constructor no longer accepts acompression_strategy
argument. Use thestrategy
property/argument instead.
Bug Fixes
- Fix a memory leak in
stream_reader
decompressor when reader is closed
before reading everything. (Patch by Pierre Fersing.) - The C backend now properly checks for errors after calling IO methods
on inner streams in various methods.ZstdCompressionWriter.write()
now catches exceptions when calling the inner stream'swrite()
.
ZstdCompressionWriter.flush()
on inner stream'swrite()
.
ZstdCompressor.copy_stream()
on dest stream'swrite()
.
ZstdDecompressionWriter.write()
on inner stream'swrite()
.
ZstdDecompressor.copy_stream()
on dest stream'swrite()
. (#102)
Changes
- Bundled zstandard library upgraded from 1.4.5 to 1.4.8.
- The bundled zstandard library is now using the single C source file
distribution. The 2 main header files are still present, as these are
needed by CFFI to generate the CFFI bindings. PyBuffer
instances are no longer checked to be C contiguous and
have a single dimension. The former was redundant with what
PyArg_ParseTuple()
already did and the latter is not necessary
in practice because very few extension modules create buffers with
more than 1 dimension. (#124)- Added Python typing stub file for the
zstandard
module. (#120) - The
make_cffi.py
script should now respect theCC
environment
variable for locating the compiler. (#103) - CI now properly uses the
cffi
backend when running all tests. train_dictionary()
has been rewritten to use thefastcover
APIs
and to consistently callZDICT_optimizeTrainFromBuffer_fastCover()
instead of different C APIs depending on what arguments were passed.
The function also now accepts argumentsf
,split_point
, and
accel
, which are parameters unique tofastcover
.- CI now tests and builds wheels for Python 3.9.
zstd.c
file renamed toc-ext/backend_c.c
.- All built/installed Python modules are now in the
zstandard
package. Previously, there were modules in other packages. (#115) - C source code is now automatically formatted with
clang-format
. ZstdCompressor.stream_writer()
,ZstdCompressor.stream_reader()
,
ZstdDecompressor.stream_writer()
, and
ZstdDecompressor.stream_reader()
now accept aclosefd
argument to control whether the underlying stream should be closed
when theZstdCompressionWriter
,ZstdCompressReader
,
ZstdDecompressionWriter
, orZstdDecompressionReader
is closed.
(#76)- There is now a
zstandard.open()
function for returning a file
object with zstd (de)compression. (#64) - The
zstandard
module now exposes abackend_features
attribute containing a set of strings denoting optional features
present in that backend. This can be used to sniff feature support
by performing a string lookup instead of sniffing for API presence
or behavior. - Python docstrings have been moved from the C backend to the CFFI
backend. Sphinx docs have been updated to generate API documentation
via the CFFI backend. Documentation for Python APIs is now fully
defined via Python docstrings instead of spread across Sphinx ReST
files and source code. ZstdCompressionParameters
now exposes astrategy
property.- There are now
compress()
anddecompress()
convenience functions
on thezstandard
module. These are simply wrappers around the
corresponding APIs onZstdCompressor
andZstdDecompressor
.
0.14.1
0.14.0
Backwards Compatibility Notes
- This will likely be the final version supporting Python 2.7. Future
releases will likely only work on Python 3.5+. See #109 for more
context. - There is a significant possibility that future versions will use
Rust - instead of C - for compiled code. See #110 for more context.
Bug Fixes
- Some internal fields of C structs are now explicitly initialized.
(Possible fix for #105.) - The
make_cffi.py
script used to build the CFFI bindings now
callsdistutils.sysconfig.customize_compiler()
so compiler
customizations (such as honoring theCC
environment variable)
are performed. Patch by @Arfrever. (#103) - The
make_cffi.py
script now setsLC_ALL=C
when invoking
the preprocessor in an attempt to normalize output to ASCII. (#95)
Changes
- Bundled zstandard library upgraded from 1.4.4 to 1.4.5. See release notes at https://github.com/facebook/zstd/releases/tag/v1.4.5.
setup.py
is now executable.- Python code reformatted with black using 80 character line lengths.