1# Unreleased 2 3# 5.2.1, 28 August 2021 4 5- make HTTP/S seeking less strict (PR [#646](https://github.com/RaRe-Technologies/smart_open/pull/646), [@mpenkov](https://github.com/mpenkov)) 6 7# 5.2.0, 18 August 2021 8 9- Work around changes to `urllib.parse.urlsplit` (PR [#633](https://github.com/RaRe-Technologies/smart_open/pull/633), [@judahrand](https://github.com/judahrand)) 10- New blob_properties transport parameter for GCS (PR [#632](https://github.com/RaRe-Technologies/smart_open/pull/632), [@FHTheron](https://github.com/FHTheron)) 11- Don't leak compressed stream (PR [#636](https://github.com/RaRe-Technologies/smart_open/pull/636), [@ampanasiuk](https://github.com/ampanasiuk)) 12- Change python_requires version to fix PEP 440 issue (PR [#639](https://github.com/RaRe-Technologies/smart_open/pull/639), [@lucasvieirasilva](https://github.com/lucasvieirasilva)) 13- New max_concurrency transport parameter for azure (PR [#642](https://github.com/RaRe-Technologies/smart_open/pull/642), [@omBratteng](https://github.com/omBratteng)) 14 15# 5.1.0, 25 May 2021 16 17This release introduces a new top-level parameter: `compression`. 18It controls compression behavior and partially overlaps with the old `ignore_ext` parameter. 19For details, see the README.rst file. 20You may continue to use `ignore_ext` parameter for now, but it will be deprecated in the next major release. 21 22- Add warning for recently deprecated s3 parameters (PR [#618](https://github.com/RaRe-Technologies/smart_open/pull/618), [@mpenkov](https://github.com/mpenkov)) 23- Add new top-level compression parameter (PR [#609](https://github.com/RaRe-Technologies/smart_open/pull/609), [@dmcguire81](https://github.com/dmcguire81)) 24- Drop mock dependency; standardize on unittest.mock (PR [#621](https://github.com/RaRe-Technologies/smart_open/pull/621), [@musicinmybrain](https://github.com/musicinmybrain)) 25- Fix to_boto3 method (PR [#619](https://github.com/RaRe-Technologies/smart_open/pull/619), [@mpenkov](https://github.com/mpenkov)) 26 27# 5.0.0, 30 Mar 2021 28 29This release modifies the handling of transport parameters for the S3 back-end in a backwards-incompatible way. 30See [the migration docs](MIGRATING_FROM_OLDER_VERSIONS.rst) for details. 31 32- Refactor S3, replace high-level resource/session API with low-level client API (PR [#583](https://github.com/RaRe-Technologies/smart_open/pull/583), [@mpenkov](https://github.com/mpenkov)) 33- Fix potential infinite loop when reading from webhdfs (PR [#597](https://github.com/RaRe-Technologies/smart_open/pull/597), [@traboukos](https://github.com/traboukos)) 34- Add timeout parameter for http/https (PR [#594](https://github.com/RaRe-Technologies/smart_open/pull/594), [@dustymugs](https://github.com/dustymugs)) 35- Remove `tests` directory from package (PR [#589](https://github.com/RaRe-Technologies/smart_open/pull/589), [@e-nalepa](https://github.com/e-nalepa)) 36 37# 4.2.0, 15 Feb 2021 38 39- Support tell() for text mode write on s3/gcs/azure (PR [#582](https://github.com/RaRe-Technologies/smart_open/pull/582), [@markopy](https://github.com/markopy)) 40- Implement option to use a custom buffer during S3 writes (PR [#547](https://github.com/RaRe-Technologies/smart_open/pull/547), [@mpenkov](https://github.com/mpenkov)) 41 42# 4.1.2, 18 Jan 2021 43 44- Correctly pass boto3 resource to writers (PR [#576](https://github.com/RaRe-Technologies/smart_open/pull/576), [@jackluo923](https://github.com/jackluo923)) 45- Improve robustness of S3 reading (PR [#552](https://github.com/RaRe-Technologies/smart_open/pull/552), [@mpenkov](https://github.com/mpenkov)) 46- Replace codecs with TextIOWrapper to fix newline issues when reading text files (PR [#578](https://github.com/RaRe-Technologies/smart_open/pull/578), [@markopy](https://github.com/markopy)) 47 48# 4.1.0, 30 Dec 2020 49 50- Refactor `s3` submodule to minimize resource usage (PR [#569](https://github.com/RaRe-Technologies/smart_open/pull/569), [@mpenkov](https://github.com/mpenkov)) 51- Change `download_as_string` to `download_as_bytes` in `gcs` submodule (PR [#571](https://github.com/RaRe-Technologies/smart_open/pull/571), [@alexandreyc](https://github.com/alexandreyc)) 52 53# 4.0.1, 27 Nov 2020 54 55- Exclude `requests` from `install_requires` dependency list. 56 If you need it, use `pip install smart_open[http]` or `pip install smart_open[webhdfs]`. 57 58# 4.0.0, 24 Nov 2020 59 60- Fix reading empty file or seeking past end of file for s3 backend (PR [#549](https://github.com/RaRe-Technologies/smart_open/pull/549), [@jcushman](https://github.com/jcushman)) 61- Fix handling of rt/wt mode when working with gzip compression (PR [#559](https://github.com/RaRe-Technologies/smart_open/pull/559), [@mpenkov](https://github.com/mpenkov)) 62- Bump minimum Python version to 3.6 (PR [#562](https://github.com/RaRe-Technologies/smart_open/pull/562), [@mpenkov](https://github.com/mpenkov)) 63 64# 3.0.0, 8 Oct 2020 65 66This release modifies the behavior of setup.py with respect to dependencies. 67Previously, `boto3` and other AWS-related packages were installed by default. 68Now, in order to install them, you need to run either: 69 70 pip install smart_open[s3] 71 72to install the AWS dependencies only, or 73 74 pip install smart_open[all] 75 76to install all dependencies, including AWS, GCS, etc. 77 78# 2.2.1, 1 Oct 2020 79 80- Include S3 dependencies by default, because removing them in the 2.2.0 minor release was a mistake. 81 82# 2.2.0, 25 Sep 2020 83 84This release modifies the behavior of setup.py with respect to dependencies. 85Previously, `boto3` and other AWS-related packages were installed by default. 86Now, in order to install them, you need to run either: 87 88 pip install smart_open[s3] 89 90to install the AWS dependencies only, or 91 92 pip install smart_open[all] 93 94to install all dependencies, including AWS, GCS, etc. 95 96Summary of changes: 97 98- Correctly pass `newline` parameter to built-in `open` function (PR [#478](https://github.com/RaRe-Technologies/smart_open/pull/478), [@burkovae](https://github.com/burkovae)) 99- Remove boto as a dependency (PR [#523](https://github.com/RaRe-Technologies/smart_open/pull/523), [@isobit](https://github.com/isobit)) 100- Performance improvement: avoid redundant GetObject API queries in s3.Reader (PR [#495](https://github.com/RaRe-Technologies/smart_open/pull/495), [@jcushman](https://github.com/jcushman)) 101- Support installing smart_open without AWS dependencies (PR [#534](https://github.com/RaRe-Technologies/smart_open/pull/534), [@justindujardin](https://github.com/justindujardin)) 102- Take object version into account in `to_boto3` method (PR [#539](https://github.com/RaRe-Technologies/smart_open/pull/539), [@interpolatio](https://github.com/interpolatio)) 103 104## Deprecations 105 106Functionality on the left hand side will be removed in future releases. 107Use the functions on the right hand side instead. 108 109- `smart_open.s3_iter_bucket` → `smart_open.s3.iter_bucket` 110 111# 2.1.1, 27 Aug 2020 112 113 - Bypass unnecessary GCS storage.buckets.get permission (PR [#516](https://github.com/RaRe-Technologies/smart_open/pull/516), [@gelioz](https://github.com/gelioz)) 114 - Allow SFTP connection with SSH key (PR [#522](https://github.com/RaRe-Technologies/smart_open/pull/522), [@rostskadat](https://github.com/rostskadat)) 115 116# 2.1.0, 1 July 2020 117 118 - Azure storage blob support ([@nclsmitchell](https://github.com/nclsmitchell) and [@petedannemann](https://github.com/petedannemann)) 119 - Correctly pass `newline` parameter to built-in `open` function (PR [#478](https://github.com/RaRe-Technologies/smart_open/pull/478), [@burkovae](https://github.com/burkovae)) 120 - Ensure GCS objects always have a .name attribute (PR [#506](https://github.com/RaRe-Technologies/smart_open/pull/506), [@todor-markov](https://github.com/todor-markov)) 121 - Use exception chaining to convey the original cause of the exception (PR [#508](https://github.com/RaRe-Technologies/smart_open/pull/508), [@cool-RR](https://github.com/cool-RR)) 122 123# 2.0.0, 27 April 2020, "Python 3" 124 125 - **This version supports Python 3 only** (3.5+). 126 - If you still need Python 2, install the smart_open==1.10.1 legacy release instead. 127 - Prevent smart_open from writing to logs on import (PR [#476](https://github.com/RaRe-Technologies/smart_open/pull/476), [@mpenkov](https://github.com/mpenkov)) 128 - Modify setup.py to explicitly support only Py3.5 and above (PR [#471](https://github.com/RaRe-Technologies/smart_open/pull/471), [@Amertz08](https://github.com/Amertz08)) 129 - Include all the test_data in setup.py (PR [#473](https://github.com/RaRe-Technologies/smart_open/pull/473), [@sikuan](https://github.com/sikuan)) 130 131# 1.10.1, 26 April 2020 132 133 - This is the last version to support Python 2.7. Versions 1.11 and above will support Python 3 only. 134 - Use only if you need Python 2. 135 136# 1.11.1, 8 Apr 2020 137 138 - Add missing boto dependency (Issue [#468](https://github.com/RaRe-Technologies/smart_open/issues/468)) 139 140# 1.11.0, 8 Apr 2020 141 142 - Fix GCS multiple writes (PR [#421](https://github.com/RaRe-Technologies/smart_open/pull/421), [@petedannemann](https://github.com/petedannemann)) 143 - Implemented efficient readline for ByteBuffer (PR [#426](https://github.com/RaRe-Technologies/smart_open/pull/426), [@mpenkov](https://github.com/mpenkov)) 144 - Fix WebHDFS read method (PR [#433](https://github.com/RaRe-Technologies/smart_open/pull/433), [@mpenkov](https://github.com/mpenkov)) 145 - Make S3 uploads more robust (PR [#434](https://github.com/RaRe-Technologies/smart_open/pull/434), [@mpenkov](https://github.com/mpenkov)) 146 - Add pathlib monkeypatch with replacement of `pathlib.Path.open` (PR [#436](https://github.com/RaRe-Technologies/smart_open/pull/436), [@menshikh-iv](https://github.com/menshikh-iv)) 147 - Fix error when calling str() or repr() on GCS SeekableBufferedInputBase (PR [#442](https://github.com/RaRe-Technologies/smart_open/pull/442), [@robcowie](https://github.com/robcowie)) 148 - Move optional dependencies to extras (PR [#454](https://github.com/RaRe-Technologies/smart_open/pull/454), [@Amertz08](https://github.com/Amertz08)) 149 - Correctly handle GCS paths that contain '?' char (PR [#460](https://github.com/RaRe-Technologies/smart_open/pull/460), [@chakruperitus](https://github.com/chakruperitus)) 150 - Make our doctools submodule more robust (PR [#467](https://github.com/RaRe-Technologies/smart_open/pull/467), [@mpenkov](https://github.com/mpenkov)) 151 152Starting with this release, you will have to run: 153 154 pip install smart_open[gcs] to use the GCS transport. 155 156In the future, all extra dependencies will be optional. If you want to continue installing all of them, use: 157 158 pip install smart_open[all] 159 160See the README.rst for details. 161 162# 1.10.0, 16 Mar 2020 163 164 - Various webhdfs improvements (PR [#383](https://github.com/RaRe-Technologies/smart_open/pull/383), [@mrk-its](https://github.com/mrk-its)) 165 - Fixes "the connection was closed by the remote peer" error (PR [#389](https://github.com/RaRe-Technologies/smart_open/pull/389), [@Gapex](https://github.com/Gapex)) 166 - allow use of S3 single part uploads (PR [#400](https://github.com/RaRe-Technologies/smart_open/pull/400), [@adrpar](https://github.com/adrpar)) 167 - Add test data in package via MANIFEST.in (PR [#401](https://github.com/RaRe-Technologies/smart_open/pull/401), [@jayvdb](https://github.com/jayvdb)) 168 - Google Cloud Storage (GCS) (PR [#404](https://github.com/RaRe-Technologies/smart_open/pull/404), [@petedannemann](https://github.com/petedannemann)) 169 - Implement to_boto3 function for S3 I/O. (PR [#405](https://github.com/RaRe-Technologies/smart_open/pull/405), [@mpenkov](https://github.com/mpenkov)) 170 - enable smart_open to operate without docstrings (PR [#406](https://github.com/RaRe-Technologies/smart_open/pull/406), [@mpenkov](https://github.com/mpenkov)) 171 - Implement object_kwargs parameter (PR [#411](https://github.com/RaRe-Technologies/smart_open/pull/411), [@mpenkov](https://github.com/mpenkov)) 172 - Remove dependency on old boto library (PR [#413](https://github.com/RaRe-Technologies/smart_open/pull/413), [@mpenkov](https://github.com/mpenkov)) 173 - implemented efficient readline for ByteBuffer (PR [#426](https://github.com/RaRe-Technologies/smart_open/pull/426), [@mpenkov](https://github.com/mpenkov)) 174 - improve buffering efficiency (PR [#427](https://github.com/RaRe-Technologies/smart_open/pull/427), [@mpenkov](https://github.com/mpenkov)) 175 - fix WebHDFS read method (PR [#433](https://github.com/RaRe-Technologies/smart_open/pull/433), [@mpenkov](https://github.com/mpenkov)) 176 - Make S3 uploads more robust (PR [#434](https://github.com/RaRe-Technologies/smart_open/pull/434), [@mpenkov](https://github.com/mpenkov)) 177 178# 1.9.0, 3 Nov 2019 179 180 - Add version_id transport parameter for fetching a specific S3 object version (PR [#325](https://github.com/RaRe-Technologies/smart_open/pull/325), [@interpolatio](https://github.com/interpolatio)) 181 - Document passthrough use case (PR [#333](https://github.com/RaRe-Technologies/smart_open/pull/333), [@mpenkov](https://github.com/mpenkov)) 182 - Support seeking over HTTP and HTTPS (PR [#339](https://github.com/RaRe-Technologies/smart_open/pull/339), [@interpolatio](https://github.com/interpolatio)) 183 - Add support for rt, rt+, wt, wt+, at, at+ methods (PR [#342](https://github.com/RaRe-Technologies/smart_open/pull/342), [@interpolatio](https://github.com/interpolatio)) 184 - Change VERSION to version.py (PR [#349](https://github.com/RaRe-Technologies/smart_open/pull/349), [@mpenkov](https://github.com/mpenkov)) 185 - Adding howto guides (PR [#355](https://github.com/RaRe-Technologies/smart_open/pull/355), [@mpenkov](https://github.com/mpenkov)) 186 - smart_open/s3: Initial implementations of str and repr (PR [#359](https://github.com/RaRe-Technologies/smart_open/pull/359), [@ZlatSic](https://github.com/ZlatSic)) 187 - Support writing any bytes-like object to S3. (PR [#361](https://github.com/RaRe-Technologies/smart_open/pull/361), [@gilbsgilbs](https://github.com/gilbsgilbs)) 188 189# 1.8.4, 2 Jun 2019 190 191 - Don't use s3 bucket_head to check for bucket existence (PR [#315](https://github.com/RaRe-Technologies/smart_open/pull/315), [@caboteria](https://github.com/caboteria)) 192 - Dont list buckets in s3 tests (PR [#318](https://github.com/RaRe-Technologies/smart_open/pull/318), [@caboteria](https://github.com/caboteria)) 193 - Use warnings.warn instead of logger.warning (PR [#321](https://github.com/RaRe-Technologies/smart_open/pull/321), [@mpenkov](https://github.com/mpenkov)) 194 - Optimize reading from S3 (PR [#322](https://github.com/RaRe-Technologies/smart_open/pull/322), [@mpenkov](https://github.com/mpenkov)) 195 196# 1.8.3, 26 April 2019 197 198 - Improve S3 read performance by not copying buffer (PR [#284](https://github.com/RaRe-Technologies/smart_open/pull/284), [@aperiodic](https://github.com/aperiodic)) 199 - accept bytearray and memoryview as input to write in s3 submodule (PR [#293](https://github.com/RaRe-Technologies/smart_open/pull/293), [@bmizhen-exos](https://github.com/bmizhen-exos)) 200 - Fix two S3 bugs (PR [#307](https://github.com/RaRe-Technologies/smart_open/pull/307), [@mpenkov](https://github.com/mpenkov)) 201 - Minor fixes: bz2file dependency, paramiko warning handling (PR [#309](https://github.com/RaRe-Technologies/smart_open/pull/309), [@mpenkov](https://github.com/mpenkov)) 202 - improve unit tests (PR [#310](https://github.com/RaRe-Technologies/smart_open/pull/310), [@mpenkov](https://github.com/mpenkov)) 203 204# 1.8.2, 17 April 2019 205 206 - Removed dependency on lzma (PR [#262](https://github.com/RaRe-Technologies/smart_open/pull/282), [@tdhopper](https://github.com/tdhopper)) 207 - backward compatibility fixes (PR [#294](https://github.com/RaRe-Technologies/smart_open/pull/294), [@mpenkov](https://github.com/mpenkov)) 208 - Minor fixes (PR [#291](https://github.com/RaRe-Technologies/smart_open/pull/291), [@mpenkov](https://github.com/mpenkov)) 209 - Fix #289: the smart_open package now correctly exposes a `__version__` attribute 210 - Fix #285: handle edge case with question marks in an S3 URL 211 212This release rolls back support for transparently decompressing .xz files, 213previously introduced in 1.8.1. This is a useful feature, but it requires a 214tricky dependency. It's still possible to handle .xz files with relatively 215little effort. Please see the 216[README.rst](https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#supported-compression-formats) 217file for details. 218 219# 1.8.1, 6 April 2019 220 221 - Added support for .xz / lzma (PR [#262](https://github.com/RaRe-Technologies/smart_open/pull/262), [@vmarkovtsev](https://github.com/vmarkovtsev)) 222 - Added streaming HTTP support (PR [#236](https://github.com/RaRe-Technologies/smart_open/pull/236), [@handsomezebra](https://github.com/handsomezebra)) 223 - Fix handling of "+" mode, refactor tests (PR [#263](https://github.com/RaRe-Technologies/smart_open/pull/263), [@vmarkovtsev](https://github.com/vmarkovtsev)) 224 - Added support for SSH/SCP/SFTP (PR [#58](https://github.com/RaRe-Technologies/smart_open/pull/58), [@val314159](https://github.com/val314159) & [@mpenkov](https://github.com/mpenkov)) 225 - Added new feature: compressor registry (PR [#266](https://github.com/RaRe-Technologies/smart_open/pull/266), [@mpenkov](https://github.com/mpenkov)) 226 - Implemented new `smart_open.open` function (PR [#268](https://github.com/RaRe-Technologies/smart_open/pull/268), [@mpenkov](https://github.com/mpenkov)) 227 228## smart_open.open 229 230This new function replaces `smart_open.smart_open`, which is now deprecated. 231Main differences: 232 233- ignore_extension → ignore_ext 234- new `transport_params` dict parameter to contain keyword parameters for the transport layer (S3, HTTPS, HDFS, etc). 235 236Main advantages of the new function: 237 238- Simpler interface for the user, less parameters 239- Greater API flexibility: adding additional keyword arguments will no longer require updating the top-level interface 240- Better documentation for keyword parameters (previously, they were documented via examples only) 241 242The old `smart_open.smart_open` function is deprecated, but continues to work as previously. 243 244 245# 1.8.0, 17th January 2019 246 247 - Add `python3.7` support (PR [#240](https://github.com/RaRe-Technologies/smart_open/pull/240), [@menshikh-iv](https://github.com/menshikh-iv)) 248 - Add `http/https` schema correctly (PR [#242](https://github.com/RaRe-Technologies/smart_open/pull/242), [@gliv](https://github.com/gliv)) 249 - Fix url parsing for `S3` (PR [#235](https://github.com/RaRe-Technologies/smart_open/pull/235), [@rileypeterson](https://github.com/rileypeterson)) 250 - Clean up `_parse_uri_s3x`, resolve edge cases (PR [#237](https://github.com/RaRe-Technologies/smart_open/pull/237), [@mpenkov](https://github.com/mpenkov)) 251 - Handle leading slash in local path edge case (PR [#238](https://github.com/RaRe-Technologies/smart_open/pull/238), [@mpenkov](https://github.com/mpenkov)) 252 - Roll back README changes (PR [#239](https://github.com/RaRe-Technologies/smart_open/pull/239), [@mpenkov](https://github.com/mpenkov)) 253 - Add example how to work with Digital Ocean spaces and boto profile (PR [#248](https://github.com/RaRe-Technologies/smart_open/pull/248), [@navado](https://github.com/@navado) & [@mpenkov](https://github.com/mpenkov)) 254 - Fix boto fail to load gce plugin (PR [#255](https://github.com/RaRe-Technologies/smart_open/pull/255), [@menshikh-iv](https://github.com/menshikh-iv)) 255 - Drop deprecated `sudo` from travis config (PR [#256](https://github.com/RaRe-Technologies/smart_open/pull/256), [@cclauss](https://github.com/cclauss)) 256 - Raise `ValueError` if s3 key does not exist (PR [#245](https://github.com/RaRe-Technologies/smart_open/pull/245), [@adrpar](https://github.com/adrpar)) 257 - Ensure `_list_bucket` uses continuation token for subsequent pages (PR [#246](https://github.com/RaRe-Technologies/smart_open/pull/246), [@tcsavage](https://github.com/tcsavage)) 258 259# 1.7.1, 18th September 2018 260 261 - Unpin boto/botocore for regular installation. Fix #227 (PR [#232](https://github.com/RaRe-Technologies/smart_open/pull/232), [@menshikh-iv](https://github.com/menshikh-iv)) 262 263# 1.7.0, 18th September 2018 264 265 - Drop support for `python3.3` and `python3.4` & workaround for broken `moto` (PR [#225](https://github.com/RaRe-Technologies/smart_open/pull/225), [@menshikh-iv](https://github.com/menshikh-iv)) 266 - Add `s3a://` support for `S3`. Fix #210 (PR [#229](https://github.com/RaRe-Technologies/smart_open/pull/229), [@mpenkov](https://github.com/mpenkov)) 267 - Allow use `@` in object (key) names for `S3`. Fix #94 (PRs [#204](https://github.com/RaRe-Technologies/smart_open/pull/204) & [#224](https://github.com/RaRe-Technologies/smart_open/pull/224), [@dkasyanov](https://github.com/dkasyanov) & [@mpenkov](https://github.com/mpenkov)) 268 - Make `close` idempotent & add dummy `flush` for `S3` (PR [#212](https://github.com/RaRe-Technologies/smart_open/pull/212), [@mpenkov](https://github.com/mpenkov)) 269 - Use built-in `open` whenever possible. Fix #207 (PR [#208](https://github.com/RaRe-Technologies/smart_open/pull/208), [@mpenkov](https://github.com/mpenkov)) 270 - Fix undefined name `uri` in `smart_open_lib.py`. Fix #213 (PR [#214](https://github.com/RaRe-Technologies/smart_open/pull/214), [@cclauss](https://github.com/cclauss)) 271 - Fix new unittests from [#212](https://github.com/RaRe-Technologies/smart_open/pull/212) (PR [#219](https://github.com/RaRe-Technologies/smart_open/pull/219), [@mpenkov](https://github.com/mpenkov)) 272 - Reorganize README & make examples py2/py3 compatible (PR [#211](https://github.com/RaRe-Technologies/smart_open/pull/211), [@piskvorky](https://github.com/piskvorky)) 273 274# 1.6.0, 29th June 2018 275 276 - Migrate to `boto3`. Fix #43 (PR [#164](https://github.com/RaRe-Technologies/smart_open/pull/164), [@mpenkov](https://github.com/mpenkov)) 277 - Refactoring smart_open to share compression and encoding functionality (PR [#185](https://github.com/RaRe-Technologies/smart_open/pull/185), [@mpenkov](https://github.com/mpenkov)) 278 - Drop `python2.6` compatibility. Fix #156 (PR [#192](https://github.com/RaRe-Technologies/smart_open/pull/192), [@mpenkov](https://github.com/mpenkov)) 279 - Accept a custom `boto3.Session` instance (support STS AssumeRole). Fix #130, #149, #199 (PR [#201](https://github.com/RaRe-Technologies/smart_open/pull/201), [@eschwartz](https://github.com/eschwartz)) 280 - Accept `multipart_upload` parameters (supports ServerSideEncryption) for `S3`. Fix (PR [#202](https://github.com/RaRe-Technologies/smart_open/pull/202), [@eschwartz](https://github.com/eschwartz)) 281 - Add support for `pathlib.Path`. Fix #170 (PR [#175](https://github.com/RaRe-Technologies/smart_open/pull/175), [@clintval](https://github.com/clintval)) 282 - Fix performance regression using local file-system. Fix #184 (PR [#190](https://github.com/RaRe-Technologies/smart_open/pull/190), [@mpenkov](https://github.com/mpenkov)) 283 - Replace `ParsedUri` class with functions, cleanup internal argument parsing (PR [#191](https://github.com/RaRe-Technologies/smart_open/pull/191), [@mpenkov](https://github.com/mpenkov)) 284 - Handle edge case (read 0 bytes) in read function. Fix #171 (PR [#193](https://github.com/RaRe-Technologies/smart_open/pull/193), [@mpenkov](https://github.com/mpenkov)) 285 - Fix bug with changing `f._current_pos` when call `f.readline()` (PR [#182](https://github.com/RaRe-Technologies/smart_open/pull/182), [@inksink](https://github.com/inksink)) 286 - Сlose the old body explicitly after `seek` for `S3`. Fix #187 (PR [#188](https://github.com/RaRe-Technologies/smart_open/pull/188), [@inksink](https://github.com/inksink)) 287 288# 1.5.7, 18th March 2018 289 290 - Fix author/maintainer fields in `setup.py`, avoid bug from `setuptools==39.0.0` and add workaround for `botocore` and `python==3.3`. Fix #176 (PR [#178](https://github.com/RaRe-Technologies/smart_open/pull/178) & [#177](https://github.com/RaRe-Technologies/smart_open/pull/177), [@menshikh-iv](https://github.com/menshikh-iv) & [@baldwindc](https://github.com/baldwindc)) 291 292# 1.5.6, 28th December 2017 293 294 - Improve S3 read performance. Fix #152 (PR [#157](https://github.com/RaRe-Technologies/smart_open/pull/157), [@mpenkov](https://github.com/mpenkov)) 295 - Add integration testing + benchmark with real S3. Partial fix #151, #156 (PR [#158](https://github.com/RaRe-Technologies/smart_open/pull/158), [@menshikh-iv](https://github.com/menshikh-iv) & [@mpenkov](https://github.com/mpenkov)) 296 - Disable integration testing if secure vars isn't defined (PR [#157](https://github.com/RaRe-Technologies/smart_open/pull/158), [@menshikh-iv](https://github.com/menshikh-iv)) 297 298# 1.5.5, 6th December 2017 299 300 - Fix problems from 1.5.4 release. Fix #153, #154 , partial fix #152 (PR [#155](https://github.com/RaRe-Technologies/smart_open/pull/155), [@mpenkov](https://github.com/mpenkov)) 301 302# 1.5.4, 30th November 2017 303 304 - Add naitive .gz support for HDFS (PR [#128](https://github.com/RaRe-Technologies/smart_open/pull/128), [@yupbank](https://github.com/yupbank)) 305 - Drop python2.6 support + fix style (PR [#137](https://github.com/RaRe-Technologies/smart_open/pull/137), [@menshikh-iv](https://github.com/menshikh-iv)) 306 - Create separate compression-specific layer. Fix [#91](https://github.com/RaRe-Technologies/smart_open/issues/91) (PR [#131](https://github.com/RaRe-Technologies/smart_open/pull/131), [@mpenkov](https://github.com/mpenkov)) 307 - Fix ResourceWarnings + replace deprecated assertEquals (PR [#140](https://github.com/RaRe-Technologies/smart_open/pull/140), [@horpto](https://github.com/horpto)) 308 - Add encoding parameter to smart_open. Fix [#142](https://github.com/RaRe-Technologies/smart_open/issues/142) (PR [#143](https://github.com/RaRe-Technologies/smart_open/pull/143), [@mpenkov](https://github.com/mpenkov)) 309 - Add encoding tests for readers. Fix [#145](https://github.com/RaRe-Technologies/smart_open/issues/145), partial fix [#146](https://github.com/RaRe-Technologies/smart_open/issues/146) (PR [#147](https://github.com/RaRe-Technologies/smart_open/pull/147), [@mpenkov](https://github.com/mpenkov)) 310 - Fix file mode for updating case (PR [#150](https://github.com/RaRe-Technologies/smart_open/pull/150), [@menshikh-iv](https://github.com/menshikh-iv)) 311 312# 1.5.3, 18th May 2017 313 314 - Remove GET parameters from url. Fix #120 (PR #121, @mcrowson) 315 316# 1.5.2, 12th Apr 2017 317 318 - Enable compressed formats over http. Avoid filehandle leak. Fix #109 and #110. (PR #112, @robottwo ) 319 - Make possible to change number of retries (PR #102, @shaform) 320 321# 1.5.1, 16th Mar 2017 322 323 - Bugfix for compressed formats (PR #110, @tmylk) 324 325# 1.5.0, 14th Mar 2017 326 327 - HTTP/HTTPS read support w/ Kerberos (PR #107, @robottwo) 328 329# 1.4.0, 13th Feb 2017 330 331 - HdfsOpenWrite implementation similar to read (PR #106, @skibaa) 332 - Support custom S3 server host, port, ssl. (PR #101, @robottwo) 333 - Add retry around `s3_iter_bucket_process_key` to address S3 Read Timeout errors. (PR #96, @bbbco) 334 - Include tests data in sdist + install them. (PR #105, @cournape) 335 336# 1.3.5, 5th October 2016 337 338# - Add MANIFEST.in required for conda-forge recip (PR #90, @tmylk) 339 - Fix #92. Allow hash in filename (PR #93, @tmylk) 340 341# 1.3.4, 26th August 2016 342 343 - Relative path support (PR #73, @yupbank) 344 - Move gzipstream module to smart_open package (PR #81, @mpenkov) 345 - Ensure reader objects never return None (PR #81, @mpenkov) 346 - Ensure read functions never return more bytes than asked for (PR #84, @mpenkov) 347 - Add support for reading gzipped objects until EOF, e.g. read() (PR #81, @mpenkov) 348 - Add missing parameter to read_from_buffer call (PR #84, @mpenkov) 349 - Add unit tests for gzipstream (PR #84, @mpenkov) 350 - Bundle gzipstream to enable streaming of gzipped content from S3 (PR #73, @mpenkov) 351 - Update gzipstream to avoid deep recursion (PR #73, @mpenkov) 352 - Implemented readline for S3 (PR #73, @mpenkov) 353 - Added pip requirements.txt (PR #73, @mpenkov) 354 - Invert NO_MULTIPROCESSING flag (PR #79, @Janrain-Colin) 355 - Add ability to add query to webhdfs uri. (PR #78, @ellimilial) 356 357# 1.3.3, 16th May 2016 358 359 - Accept an instance of boto.s3.key.Key to smart_open (PR #38, @asieira) 360 - Allow passing `encrypt_key` and other parameters to `initiate_multipart_upload` (PR #63, @asieira) 361 - Allow passing boto `host` and `profile_name` to smart_open (PR #71 #68, @robcowie) 362 - Write an empty key to S3 even if nothing is written to S3OpenWrite (PR #61, @petedmarsh) 363 - Support `LC_ALL=C` environment variable setup (PR #40, @nikicc) 364 - Python 3.5 support 365 366# 1.3.2, 3rd January 2016 367 368 - Bug fix release to enable 'wb+' file mode (PR #50) 369 370 371# 1.3.1, 18th December 2015 372 373 - Disable multiprocessing if unavailable. Allows to run on Google Compute Engine. (PR #41, @nikicc) 374 - Httpretty updated to allow LC_ALL=C locale config. (PR #39, @jsphpl) 375 - Accept an instance of boto.s3.key.Key (PR #38, @asieira) 376 377 378# 1.3.0, 19th September 2015 379 380 - WebHDFS read/write (PR #29, @ziky90) 381 - re-upload last S3 chunk in failed upload (PR #20, @andreycizov) 382 - return the entire key in s3_iter_bucket instead of only the key name (PR #22, @salilb) 383 - pass optional keywords on S3 write (PR #30, @val314159) 384 - smart_open a no-op if passed a file-like object with a read attribute (PR #32, @gojomo) 385 - various improvements to testing (PR #30, @val314159) 386 387 388# 1.1.0, 1st February 2015 389 390 - support for multistream bzip files (PR #9, @pombredanne) 391 - introduce this CHANGELOG 392