Mercurial > hg
comparison contrib/python-zstandard/NEWS.rst @ 42070:675775c33ab6
zstandard: vendor python-zstandard 0.11
The upstream source distribution from PyPI was extracted. Unwanted
files were removed.
The clang-format ignore list was updated to reflect the new source
of files.
The project contains a vendored copy of zstandard 1.3.8. The old
version was 1.3.6. This should result in some minor performance wins.
test-check-py3-compat.t was updated to reflect now-passing tests on
Python 3.8.
Some HTTP tests were updated to reflect new zstd compression output.
# no-check-commit because 3rd party code has different style guidelines
Differential Revision: https://phab.mercurial-scm.org/D6199
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 04 Apr 2019 17:34:43 -0700 |
parents | 73fef626dae3 |
children | 69de49c4e39c |
comparison
equal
deleted
inserted
replaced
42069:668eff08387f | 42070:675775c33ab6 |
---|---|
6 ======================== | 6 ======================== |
7 | 7 |
8 Actions Blocking Release | 8 Actions Blocking Release |
9 ------------------------ | 9 ------------------------ |
10 | 10 |
11 * compression and decompression APIs that support ``io.rawIOBase`` interface | 11 * compression and decompression APIs that support ``io.RawIOBase`` interface |
12 (#13). | 12 (#13). |
13 * ``stream_writer()`` APIs should support ``io.RawIOBase`` interface. | |
14 * Properly handle non-blocking I/O and partial writes for objects implementing | |
15 ``io.RawIOBase``. | |
16 * Make ``write_return_read=True`` the default for objects implementing | |
17 ``io.RawIOBase``. | |
18 * Audit for consistent and proper behavior of ``flush()`` and ``close()`` for | |
19 all objects implementing ``io.RawIOBase``. Is calling ``close()`` on | |
20 wrapped stream acceptable, should ``__exit__`` always call ``close()``, | |
21 should ``close()`` imply ``flush()``, etc. | |
22 * Consider making reads across frames configurable behavior. | |
13 * Refactor module names so C and CFFI extensions live under ``zstandard`` | 23 * Refactor module names so C and CFFI extensions live under ``zstandard`` |
14 package. | 24 package. |
15 * Overall API design review. | 25 * Overall API design review. |
16 * Use Python allocator where possible. | 26 * Use Python allocator where possible. |
17 * Figure out what to do about experimental APIs not implemented by CFFI. | 27 * Figure out what to do about experimental APIs not implemented by CFFI. |
41 ``ZDICT_optimizeTrainFromBuffer_fastCover``. | 51 ``ZDICT_optimizeTrainFromBuffer_fastCover``. |
42 * Expose and enforce ``ZSTD_minCLevel()`` for minimum compression level. | 52 * Expose and enforce ``ZSTD_minCLevel()`` for minimum compression level. |
43 * Consider a ``chunker()`` API for decompression. | 53 * Consider a ``chunker()`` API for decompression. |
44 * Consider stats for ``chunker()`` API, including finding the last consumed | 54 * Consider stats for ``chunker()`` API, including finding the last consumed |
45 offset of input data. | 55 offset of input data. |
56 * Consider exposing ``ZSTD_cParam_getBounds()`` and | |
57 ``ZSTD_dParam_getBounds()`` APIs. | |
58 * Consider controls over resetting compression contexts (session only, parameters, | |
59 or session and parameters). | |
60 * Actually use the CFFI backend in fuzzing tests. | |
46 | 61 |
47 Other Actions Not Blocking Release | 62 Other Actions Not Blocking Release |
48 --------------------------------------- | 63 --------------------------------------- |
49 | 64 |
50 * Support for block compression APIs. | 65 * Support for block compression APIs. |
51 * API for ensuring max memory ceiling isn't exceeded. | 66 * API for ensuring max memory ceiling isn't exceeded. |
52 * Move off nose for testing. | 67 * Move off nose for testing. |
68 | |
69 0.11.0 (released 2019-02-24) | |
70 ============================ | |
71 | |
72 Backwards Compatibility Nodes | |
73 ----------------------------- | |
74 | |
75 * ``ZstdDecompressor.read()`` now allows reading sizes of ``-1`` or ``0`` | |
76 and defaults to ``-1``, per the documented behavior of | |
77 ``io.RawIOBase.read()``. Previously, we required an argument that was | |
78 a positive value. | |
79 * The ``readline()``, ``readlines()``, ``__iter__``, and ``__next__`` methods | |
80 of ``ZstdDecompressionReader()`` now raise ``io.UnsupportedOperation`` | |
81 instead of ``NotImplementedError``. | |
82 * ``ZstdDecompressor.stream_reader()`` now accepts a ``read_across_frames`` | |
83 argument. The default value will likely be changed in a future release | |
84 and consumers are advised to pass the argument to avoid unwanted change | |
85 of behavior in the future. | |
86 * ``setup.py`` now always disables the CFFI backend if the installed | |
87 CFFI package does not meet the minimum version requirements. Before, it was | |
88 possible for the CFFI backend to be generated and a run-time error to | |
89 occur. | |
90 * In the CFFI backend, ``CompressionReader`` and ``DecompressionReader`` | |
91 were renamed to ``ZstdCompressionReader`` and ``ZstdDecompressionReader``, | |
92 respectively so naming is identical to the C extension. This should have | |
93 no meaningful end-user impact, as instances aren't meant to be | |
94 constructed directly. | |
95 * ``ZstdDecompressor.stream_writer()`` now accepts a ``write_return_read`` | |
96 argument to control whether ``write()`` returns the number of bytes | |
97 read from the source / written to the decompressor. It defaults to off, | |
98 which preserves the existing behavior of returning the number of bytes | |
99 emitted from the decompressor. The default will change in a future release | |
100 so behavior aligns with the specified behavior of ``io.RawIOBase``. | |
101 * ``ZstdDecompressionWriter.__exit__`` now calls ``self.close()``. This | |
102 will result in that stream plus the underlying stream being closed as | |
103 well. If this behavior is not desirable, do not use instances as | |
104 context managers. | |
105 * ``ZstdCompressor.stream_writer()`` now accepts a ``write_return_read`` | |
106 argument to control whether ``write()`` returns the number of bytes read | |
107 from the source / written to the compressor. It defaults to off, which | |
108 preserves the existing behavior of returning the number of bytes emitted | |
109 from the compressor. The default will change in a future release so | |
110 behavior aligns with the specified behavior of ``io.RawIOBase``. | |
111 * ``ZstdCompressionWriter.__exit__`` now calls ``self.close()``. This will | |
112 result in that stream plus any underlying stream being closed as well. If | |
113 this behavior is not desirable, do not use instances as context managers. | |
114 * ``ZstdDecompressionWriter`` no longer requires being used as a context | |
115 manager (#57). | |
116 * ``ZstdCompressionWriter`` no longer requires being used as a context | |
117 manager (#57). | |
118 * The ``overlap_size_log`` attribute on ``CompressionParameters`` instances | |
119 has been deprecated and will be removed in a future release. The | |
120 ``overlap_log`` attribute should be used instead. | |
121 * The ``overlap_size_log`` argument to ``CompressionParameters`` has been | |
122 deprecated and will be removed in a future release. The ``overlap_log`` | |
123 argument should be used instead. | |
124 * The ``ldm_hash_every_log`` attribute on ``CompressionParameters`` instances | |
125 has been deprecated and will be removed in a future release. The | |
126 ``ldm_hash_rate_log`` attribute should be used instead. | |
127 * The ``ldm_hash_every_log`` argument to ``CompressionParameters`` has been | |
128 deprecated and will be removed in a future release. The ``ldm_hash_rate_log`` | |
129 argument should be used instead. | |
130 * The ``compression_strategy`` argument to ``CompressionParameters`` has been | |
131 deprecated and will be removed in a future release. The ``strategy`` | |
132 argument should be used instead. | |
133 * The ``SEARCHLENGTH_MIN`` and ``SEARCHLENGTH_MAX`` constants are deprecated | |
134 and will be removed in a future release. Use ``MINMATCH_MIN`` and | |
135 ``MINMATCH_MAX`` instead. | |
136 * The ``zstd_cffi`` module has been renamed to ``zstandard.cffi``. As had | |
137 been documented in the ``README`` file since the ``0.9.0`` release, the | |
138 module should not be imported directly at its new location. Instead, | |
139 ``import zstandard`` to cause an appropriate backend module to be loaded | |
140 automatically. | |
141 | |
142 Bug Fixes | |
143 --------- | |
144 | |
145 * CFFI backend could encounter a failure when sending an empty chunk into | |
146 ``ZstdDecompressionObj.decompress()``. The issue has been fixed. | |
147 * CFFI backend could encounter an error when calling | |
148 ``ZstdDecompressionReader.read()`` if there was data remaining in an | |
149 internal buffer. The issue has been fixed. (#71) | |
150 | |
151 Changes | |
152 ------- | |
153 | |
154 * ``ZstDecompressionObj.decompress()`` now properly handles empty inputs in | |
155 the CFFI backend. | |
156 * ``ZstdCompressionReader`` now implements ``read1()`` and ``readinto1()``. | |
157 These are part of the ``io.BufferedIOBase`` interface. | |
158 * ``ZstdCompressionReader`` has gained a ``readinto(b)`` method for reading | |
159 compressed output into an existing buffer. | |
160 * ``ZstdCompressionReader.read()`` now defaults to ``size=-1`` and accepts | |
161 read sizes of ``-1`` and ``0``. The new behavior aligns with the documented | |
162 behavior of ``io.RawIOBase``. | |
163 * ``ZstdCompressionReader`` now implements ``readall()``. Previously, this | |
164 method raised ``NotImplementedError``. | |
165 * ``ZstdDecompressionReader`` now implements ``read1()`` and ``readinto1()``. | |
166 These are part of the ``io.BufferedIOBase`` interface. | |
167 * ``ZstdDecompressionReader.read()`` now defaults to ``size=-1`` and accepts | |
168 read sizes of ``-1`` and ``0``. The new behavior aligns with the documented | |
169 behavior of ``io.RawIOBase``. | |
170 * ``ZstdDecompressionReader()`` now implements ``readall()``. Previously, this | |
171 method raised ``NotImplementedError``. | |
172 * The ``readline()``, ``readlines()``, ``__iter__``, and ``__next__`` methods | |
173 of ``ZstdDecompressionReader()`` now raise ``io.UnsupportedOperation`` | |
174 instead of ``NotImplementedError``. This reflects a decision to never | |
175 implement text-based I/O on (de)compressors and keep the low-level API | |
176 operating in the binary domain. (#13) | |
177 * ``README.rst`` now documented how to achieve linewise iteration using | |
178 an ``io.TextIOWrapper`` with a ``ZstdDecompressionReader``. | |
179 * ``ZstdDecompressionReader`` has gained a ``readinto(b)`` method for | |
180 reading decompressed output into an existing buffer. This allows chaining | |
181 to an ``io.TextIOWrapper`` on Python 3 without using an ``io.BufferedReader``. | |
182 * ``ZstdDecompressor.stream_reader()`` now accepts a ``read_across_frames`` | |
183 argument to control behavior when the input data has multiple zstd | |
184 *frames*. When ``False`` (the default for backwards compatibility), a | |
185 ``read()`` will stop when the end of a zstd *frame* is encountered. When | |
186 ``True``, ``read()`` can potentially return data spanning multiple zstd | |
187 *frames*. The default will likely be changed to ``True`` in a future | |
188 release. | |
189 * ``setup.py`` now performs CFFI version sniffing and disables the CFFI | |
190 backend if CFFI is too old. Previously, we only used ``install_requires`` | |
191 to enforce the CFFI version and not all build modes would properly enforce | |
192 the minimum CFFI version. (#69) | |
193 * CFFI's ``ZstdDecompressionReader.read()`` now properly handles data | |
194 remaining in any internal buffer. Before, repeated ``read()`` could | |
195 result in *random* errors. (#71) | |
196 * Upgraded various Python packages in CI environment. | |
197 * Upgrade to hypothesis 4.5.11. | |
198 * In the CFFI backend, ``CompressionReader`` and ``DecompressionReader`` | |
199 were renamed to ``ZstdCompressionReader`` and ``ZstdDecompressionReader``, | |
200 respectively. | |
201 * ``ZstdDecompressor.stream_writer()`` now accepts a ``write_return_read`` | |
202 argument to control whether ``write()`` returns the number of bytes read | |
203 from the source. It defaults to ``False`` to preserve backwards | |
204 compatibility. | |
205 * ``ZstdDecompressor.stream_writer()`` now implements the ``io.RawIOBase`` | |
206 interface and behaves as a proper stream object. | |
207 * ``ZstdCompressor.stream_writer()`` now accepts a ``write_return_read`` | |
208 argument to control whether ``write()`` returns the number of bytes read | |
209 from the source. It defaults to ``False`` to preserve backwards | |
210 compatibility. | |
211 * ``ZstdCompressionWriter`` now implements the ``io.RawIOBase`` interface and | |
212 behaves as a proper stream object. ``close()`` will now close the stream | |
213 and the underlying stream (if possible). ``__exit__`` will now call | |
214 ``close()``. Methods like ``writable()`` and ``fileno()`` are implemented. | |
215 * ``ZstdDecompressionWriter`` no longer must be used as a context manager. | |
216 * ``ZstdCompressionWriter`` no longer must be used as a context manager. | |
217 When not using as a context manager, it is important to call | |
218 ``flush(FRAME_FRAME)`` or the compression stream won't be properly | |
219 terminated and decoders may complain about malformed input. | |
220 * ``ZstdCompressionWriter.flush()`` (what is returned from | |
221 ``ZstdCompressor.stream_writer()``) now accepts an argument controlling the | |
222 flush behavior. Its value can be one of the new constants | |
223 ``FLUSH_BLOCK`` or ``FLUSH_FRAME``. | |
224 * ``ZstdDecompressionObj`` instances now have a ``flush([length=None])`` method. | |
225 This provides parity with standard library equivalent types. (#65) | |
226 * ``CompressionParameters`` no longer redundantly store individual compression | |
227 parameters on each instance. Instead, compression parameters are stored inside | |
228 the underlying ``ZSTD_CCtx_params`` instance. Attributes for obtaining | |
229 parameters are now properties rather than instance variables. | |
230 * Exposed the ``STRATEGY_BTULTRA2`` constant. | |
231 * ``CompressionParameters`` instances now expose an ``overlap_log`` attribute. | |
232 This behaves identically to the ``overlap_size_log`` attribute. | |
233 * ``CompressionParameters()`` now accepts an ``overlap_log`` argument that | |
234 behaves identically to the ``overlap_size_log`` argument. An error will be | |
235 raised if both arguments are specified. | |
236 * ``CompressionParameters`` instances now expose an ``ldm_hash_rate_log`` | |
237 attribute. This behaves identically to the ``ldm_hash_every_log`` attribute. | |
238 * ``CompressionParameters()`` now accepts a ``ldm_hash_rate_log`` argument that | |
239 behaves identically to the ``ldm_hash_every_log`` argument. An error will be | |
240 raised if both arguments are specified. | |
241 * ``CompressionParameters()`` now accepts a ``strategy`` argument that behaves | |
242 identically to the ``compression_strategy`` argument. An error will be raised | |
243 if both arguments are specified. | |
244 * The ``MINMATCH_MIN`` and ``MINMATCH_MAX`` constants were added. They are | |
245 semantically equivalent to the old ``SEARCHLENGTH_MIN`` and | |
246 ``SEARCHLENGTH_MAX`` constants. | |
247 * Bundled zstandard library upgraded from 1.3.7 to 1.3.8. | |
248 * ``setup.py`` denotes support for Python 3.7 (Python 3.7 was supported and | |
249 tested in the 0.10 release). | |
250 * ``zstd_cffi`` module has been renamed to ``zstandard.cffi``. | |
251 * ``ZstdCompressor.stream_writer()`` now reuses a buffer in order to avoid | |
252 allocating a new buffer for every operation. This should result in faster | |
253 performance in cases where ``write()`` or ``flush()`` are being called | |
254 frequently. (#62) | |
255 * Bundled zstandard library upgraded from 1.3.6 to 1.3.7. | |
256 | |
257 0.10.2 (released 2018-11-03) | |
258 ============================ | |
259 | |
260 Bug Fixes | |
261 --------- | |
262 | |
263 * ``zstd_cffi.py`` added to ``setup.py`` (#60). | |
264 | |
265 Changes | |
266 ------- | |
267 | |
268 * Change some integer casts to avoid ``ssize_t`` (#61). | |
53 | 269 |
54 0.10.1 (released 2018-10-08) | 270 0.10.1 (released 2018-10-08) |
55 ============================ | 271 ============================ |
56 | 272 |
57 Backwards Compatibility Notes | 273 Backwards Compatibility Notes |