# Change Log All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). ## Unreleased ## [2.4.16] - 2022-05-02 ### Changed - Make `fs.zipfs._ZipExtFile` use the seeking mechanism implemented in the Python standard library in Python version 3.7 and later ([#527](https://github.com/PyFilesystem/pyfilesystem2/pull/527)). - Mark `fs.zipfs.ReadZipFS` as a case-sensitive filesystem ([#527](https://github.com/PyFilesystem/pyfilesystem2/pull/527)). - Optimized moving files between filesystems with syspaths. ([#523](https://github.com/PyFilesystem/pyfilesystem2/pull/523)). - Fixed `fs.move.move_file` to clean up the copy on the destination in case of errors. - `fs.opener.manage_fs` with `writeable=True` will now raise a `ResourceReadOnly` exception if the managed filesystem is not writeable. - Marked filesystems wrapped with `fs.wrap.WrapReadOnly` as read-only. ## [2.4.15] - 2022-02-07 ### Changed - Support more lenient usernames and group names in FTP servers ([#507](https://github.com/PyFilesystem/pyfilesystem2/pull/507)). Closes [#506](https://github.com/PyFilesystem/pyfilesystem2/issues/506). - Removed dependency on pytz ([#518](https://github.com/PyFilesystem/pyfilesystem2/pull/518)). Closes [#516](https://github.com/PyFilesystem/pyfilesystem2/issues/518). ### Fixed - Fixed `MemoryFS.move` and `MemoryFS.movedir` not updating the name of moved resources, causing `MemoryFS.scandir` to use the old name. ([#510](https://github.com/PyFilesystem/pyfilesystem2/pull/510)). Closes [#509](https://github.com/PyFilesystem/pyfilesystem2/issues/509). - Make `WrapFS.move` and `WrapFS.movedir` use the delegate FS methods instead of `fs.move` functions, which was causing optimized implementation of `movedir` to be always skipped. ([#511](https://github.com/PyFilesystem/pyfilesystem2/pull/511)). ## [2.4.14] - 2021-11-16 ### Added - Added `fs.copy.copy_file_if`, `fs.copy.copy_dir_if`, and `fs.copy.copy_fs_if`. Closes [#458](https://github.com/PyFilesystem/pyfilesystem2/issues/458). - Added `fs.base.FS.getmodified`. ### Changed - FTP servers that do not support the MLST command now try to use the MDTM command to retrieve the last modification timestamp of a resource. Closes [#456](https://github.com/PyFilesystem/pyfilesystem2/pull/456). ### Fixed - Fixed performance bugs in `fs.copy.copy_dir_if_newer`. Test cases were adapted to catch those bugs in the future. - Fixed precision bug for timestamps in `fs.OSFS.setinfo`. ## [2.4.13] - 2021-03-27 ### Added - Added FTP over TLS (FTPS) support to FTPFS. Closes [#437](https://github.com/PyFilesystem/pyfilesystem2/issues/437), [#449](https://github.com/PyFilesystem/pyfilesystem2/pull/449). - `PathError` now supports wrapping an exception using the `exc` argument. Closes [#453](https://github.com/PyFilesystem/pyfilesystem2/issues/453). - Better documentation of the `writable` parameter of `fs.open_fs`, and hint about using `fs.wrap.read_only` when a read-only filesystem is required. Closes [#441](https://github.com/PyFilesystem/pyfilesystem2/issues/441). - Copy and move operations now provide a parameter `preserve_time` that, when passed as `True`, makes sure the "mtime" of the destination file will be the same as that of the source file. ### Changed - Make `FS.upload` explicit about the expected error when the parent directory of the destination does not exist. Closes [#445](https://github.com/PyFilesystem/pyfilesystem2/pull/445). - Migrate continuous integration from Travis-CI to GitHub Actions and introduce several linters again in the build steps ([#448](https://github.com/PyFilesystem/pyfilesystem2/pull/448)). Closes [#446](https://github.com/PyFilesystem/pyfilesystem2/issues/446). - Stop requiring `pytest` to run tests, allowing any test runner supporting `unittest`-style test suites. - `FSTestCases` now builds the large data required for `upload` and `download` tests only once in order to reduce the total testing time. - `MemoryFS.move` and `MemoryFS.movedir` will now avoid copying data. Closes [#452](https://github.com/PyFilesystem/pyfilesystem2/issues/452). - `FS.removetree("/")` behaviour has been standardized in all filesystems, and is expected to clear the contents of the root folder without deleting it. Closes [#471](https://github.com/PyFilesystem/pyfilesystem2/issues/471). - `FS.getbasic` is now deprecated, as it is redundant with `FS.getinfo`, and `FS.getinfo` is now explicitly expected to return the *basic* info namespace unconditionally. Closes [#469](https://github.com/PyFilesystem/pyfilesystem2/issues/469). ### Fixed - Make `FTPFile`, `MemoryFile` and `RawWrapper` accept [`array.array`](https://docs.python.org/3/library/array.html) arguments for the `write` and `writelines` methods, as expected by their base class [`io.RawIOBase`](https://docs.python.org/3/library/io.html#io.RawIOBase). - Various documentation issues, including `MemoryFS` docstring not rendering properly. - Avoid creating a new connection on every call of `FTPFS.upload`. Closes [#455](https://github.com/PyFilesystem/pyfilesystem2/issues/455). - `WrapReadOnly.removetree` not raising a `ResourceReadOnly` when called. Closes [#468](https://github.com/PyFilesystem/pyfilesystem2/issues/468). - `WrapCachedDir.isdir` and `WrapCachedDir.isfile` raising a `ResourceNotFound` error on non-existing path ([#470](https://github.com/PyFilesystem/pyfilesystem2/pull/470)). - `FTPFS` not listing certain entries with sticky/SUID/SGID permissions set by Linux server ([#473](https://github.com/PyFilesystem/pyfilesystem2/pull/473)). Closes [#451](https://github.com/PyFilesystem/pyfilesystem2/issues/451). - `scandir` iterator not being closed explicitly in `OSFS.scandir`, occasionally causing a `ResourceWarning` to be thrown. Closes [#311](https://github.com/PyFilesystem/pyfilesystem2/issues/311). - Incomplete type annotations for the `temp_fs` parameter of `WriteTarFS` and `WriteZipFS`. Closes [#410](https://github.com/PyFilesystem/pyfilesystem2/issues/410). ## [2.4.12] - 2021-01-14 ### Added - Missing `mode` attribute to `_MemoryFile` objects returned by `MemoryFS.openbin`. - Missing `readinto` method for `MemoryFS` and `FTPFS` file objects. Closes [#380](https://github.com/PyFilesystem/pyfilesystem2/issues/380). - Added compatibility if a Windows FTP server returns file information to the `LIST` command with 24-hour times. Closes [#438](https://github.com/PyFilesystem/pyfilesystem2/issues/438). - Added Python 3.9 support. Closes [#443](https://github.com/PyFilesystem/pyfilesystem2/issues/443). ### Changed - Start testing on PyPy. Due to [#342](https://github.com/PyFilesystem/pyfilesystem2/issues/342) we have to treat PyPy builds specially and allow them to fail, but at least we'll be able to see if we break something aside from known issues with FTP tests. - Include docs in source distributions as well as the whole tests folder, ensuring `conftest.py` is present, fixes [#364](https://github.com/PyFilesystem/pyfilesystem2/issues/364). - Stop patching copy with Python 3.8+ because it already uses `sendfile` ([#424](https://github.com/PyFilesystem/pyfilesystem2/pull/424)). Closes [#421](https://github.com/PyFilesystem/pyfilesystem2/issues/421). ### Fixed - Fixed crash when CPython's -OO flag is used - Fixed error when parsing timestamps from a FTP directory served from a WindowsNT FTP Server. Closes [#395](https://github.com/PyFilesystem/pyfilesystem2/issues/395). - Fixed documentation of `Mode.to_platform_bin`. Closes [#382](https://github.com/PyFilesystem/pyfilesystem2/issues/382). - Fixed the code example in the "Testing Filesystems" section of the "Implementing Filesystems" guide. Closes [#407](https://github.com/PyFilesystem/pyfilesystem2/issues/407). - Fixed `FTPFS.openbin` not implicitly opening files in binary mode like expected from `openbin`. Closes [#406](https://github.com/PyFilesystem/pyfilesystem2/issues/406). ## [2.4.11] - 2019-09-07 ### Added - Added geturl for TarFS and ZipFS for 'fs' purpose. NoURL for 'download' purpose. - Added helpful root path in CreateFailed exception. Closes [#340](https://github.com/PyFilesystem/pyfilesystem2/issues/340). - Added Python 3.8 support. ### Fixed - Fixed tests leaving tmp files - Fixed typing issues - Fixed link namespace returning bytes - Fixed broken FSURL in windows [#329](https://github.com/PyFilesystem/pyfilesystem2/issues/329) - Fixed hidden exception at fs.close() when opening an absent zip/tar file URL [#333](https://github.com/PyFilesystem/pyfilesystem2/issues/333) - Fixed abstract class import from `collections` which would break on Python 3.8 - Fixed incorrect imports of `mock` on Python 3 - Removed some unused imports and unused `requirements.txt` file - Added mypy checks to Travis. Closes [#332](https://github.com/PyFilesystem/pyfilesystem2/issues/332). - Fixed missing `errno.ENOTSUP` on PyPy. Closes [#338](https://github.com/PyFilesystem/pyfilesystem2/issues/338). - Fixed bug in a decorator that would trigger an `AttributeError` when a class was created that implemented a deprecated method and had no docstring of its own. ### Changed - Entire test suite has been migrated to [pytest](https://docs.pytest.org/en/latest/). Closes [#327](https://github.com/PyFilesystem/pyfilesystem2/issues/327). - Style checking is now enforced using `flake8`; this involved some code cleanup such as removing unused imports. ## [2.4.10] - 2019-07-29 ### Fixed - Fixed broken WrapFS.movedir [#322](https://github.com/PyFilesystem/pyfilesystem2/issues/322). ## [2.4.9] - 2019-07-28 ### Fixed - Restored fs.path import - Fixed potential race condition in makedirs. Fixes [#310](https://github.com/PyFilesystem/pyfilesystem2/issues/310) - Added missing methods to WrapFS. Fixed [#294](https://github.com/PyFilesystem/pyfilesystem2/issues/294) ### Changed - `MemFS` now immediately releases all memory it holds when `close()` is called, rather than when it gets garbage collected. Closes [issue #308](https://github.com/PyFilesystem/pyfilesystem2/issues/308). - `FTPFS` now translates `EOFError` into `RemoteConnectionError`. Closes [#292](https://github.com/PyFilesystem/pyfilesystem2/issues/292) - Added automatic close for filesystems that go out of scope. Fixes [#298](https://github.com/PyFilesystem/pyfilesystem2/issues/298) ## [2.4.8] - 2019-06-12 ### Changed - `geturl` will return URL with user/password if needed @zmej-serow ## [2.4.7] - 2019-06-08 ### Added - Flag to OSFS to disable env var expansion ## [2.4.6] - 2019-06-08 ### Added - Implemented `geturl` in FTPFS @zmej-serow ### Fixed - Fixed FTP test suite when time is not UTC-0 @mrg0029 - Fixed issues with paths in tarfs https://github.com/PyFilesystem/pyfilesystem2/issues/284 ### Changed - Dropped Python3.3 support ## [2.4.5] - 2019-05-05 ### Fixed - Restored deprecated `setfile` method with deprecation warning to change to `writefile` - Fixed exception when a tarfile contains a path called '.' https://github.com/PyFilesystem/pyfilesystem2/issues/275 - Made TarFS directory loading lazy ### Changed - Detect case insensitivity using by writing temp file ## [2.4.4] - 2019-02-23 ### Fixed - OSFS fail in nfs mounts ## [2.4.3] - 2019-02-23 ### Fixed - Fixed broken "case_insensitive" check - Fixed Windows test fails ## [2.4.2] - 2019-02-22 ### Fixed - Fixed exception when Python runs with -OO ## [2.4.1] - 2019-02-20 ### Fixed - Fixed hash method missing from WrapFS ## [2.4.0] - 2019-02-15 ### Added - Added `exclude` and `filter_dirs` arguments to walk - Micro-optimizations to walk ## [2.3.1] - 2019-02-10 ### Fixed - Add encoding check in OSFS.validatepath ## [2.3.0] - 2019-01-30 ### Fixed - IllegalBackReference had mangled error message ### Added - FS.hash method ## [2.2.1] - 2019-01-06 ### Fixed - `Registry.install` returns its argument. ## [2.2.0] - 2019-01-01 A few methods have been renamed for greater clarity (but functionality remains the same). The old methods are now aliases and will continue to work, but will issue a deprecation warning via the `warnings` module. Please update your code accordingly. - `getbytes` -> `readbytes` - `getfile` -> `download` - `gettext` -> `readtext` - `setbytes` -> `writebytes` - `setbinfile` -> `upload` - `settext` -> `writetext` ### Changed - Changed default chunk size in `copy_file_data` to 1MB - Added `chunk_size` and `options` to `FS.upload` ## [2.1.3] - 2018-12-24 ### Fixed - Incomplete FTPFile.write when using `workers` @geoffjukes - Fixed AppFS not creating directory ### Added - Added load_extern switch to opener, fixes #228 @althanos ## [2.1.2] - 2018-11-10 ### Added - Support for Windows NT FTP servers @sspross ### Fixed - Root dir of MemoryFS accesible as a file - Packaging issues @televi - Deprecation warning re collections.Mapping ## [2.1.1] - 2018-10-03 ### Added - Added PEP 561 py.typed files - Use sendfile for faster copies @althonos - Atomic exclusive mode in Py2.7 @sqwishy ### Fixed - Fixed lstat @kamomil ## [2.1.0] - 2018-08-12 ### Added - fs.glob support ## [2.0.27] - 2018-08-05 ### Fixed - Fixed for Winows paths #152 - Fixed ftp dir parsing (@dhirschfeld) ## [2.0.26] - 2018-07-26 ### Fixed - fs.copy and fs.move disable workers if not thread-safe - fs.match detects case insensitivity - Open in exclusive mode is atomic (@squishy) - Exceptions can be pickleabe (@Spacerat) ## [2.0.25] - 2018-07-20 ### Added - workers parameter to fs.copy, fs.move, and fs.mirror for concurrent copies ## [2.0.24] - 2018-06-28 ### Added - timeout to FTP opener ## [2.0.23] - 2018-05-02 - Fix for Markdown on PyPi, no code changes ## [2.0.22] - 2018-05-02 ### Fixed - Handling of broken unicode on Python2.7 ### Added - Added fs.getospath ## [2.0.21] - 2018-05-02 ### Added - Typing information - Added Info.suffix, Info.suffixes, Info.stem attributes ### Fixed - Fixed issue with implied directories in TarFS ### Changed - Changed path.splitext so that 'leading periods on the basename are ignored', which is the behaviour of os.path.splitext ## [2.0.20] - 2018-03-13 ### Fixed - MultiFS.listdir now correctly filters out duplicates ## [2.0.19] - 2018-03-11 ### Fixed - encoding issue with TarFS - CreateFailed now contains the original exception in `exc` attribute ## [2.0.18] - 2018-01-31 ### Added - fs.getfile function ### Changed - Modified walk to use iterators internally (for more efficient walking) - Modified fs.copy to use getfile ## [2.0.17] - 2017-11-20 ### Fixed - Issue with ZipFS files missing a byte ## [2.0.16] - 2017-11-11 ### Added - fs.parts ### Fixed - Walk now yields Step named tuples as advertised ### Added - Added max_depth parameter to fs.walk ## [2.0.15] - 2017-11-05 ### Changed - ZipFS files are now seekable (Martin Larralde) ## [2.0.14] - 2016-11-05 No changes, pushed wrong branch to PyPi. ## [2.0.13] - 2017-10-17 ### Fixed - Fixed ignore_errors in walk.py ## [2.0.12] - 2017-10-15 ### Fixed - settext, appendtext, appendbytes, setbytes now raise a TypeError if the type is wrong, rather than ValueError - More efficient feature detection for FTPFS - Fixes for `fs.filesize` - Major documentation refactor (Martin Larralde) ## [2.0.11] ### Added - fs.mirror ## [2.0.10] ### Added - Added params support to FS URLs ### Fixed - Many fixes to FTPFS contributed by Martin Larralde. ## [2.0.9] ### Changed - MountFS and MultiFS now accept FS URLS - Add openers for AppFS ## [2.0.8] - 2017-08-13 ### Added - Lstat info namespace - Link info namespace - FS.islink method - Info.is_link method ## [2.0.7] - 2017-08-06 ### Fixes - Fixed entry point breaking pip ## [2.0.6] - 2017-08-05 ### Fixes - Opener refinements ## [2.0.5] - 2017-08-02 ### Fixed - Fixed potential for deadlock in MemoryFS ### Added - Added factory parameter to opendir. - ClosingSubFS. - File objects are all derived from io.IOBase. ### Fixed - Fix closing for FTP opener. ## [2.0.4] - 2017-06-11 ### Added - Opener extension mechanism contributed by Martin Larralde. - Support for pathlike objects. ### Fixed - Stat information was missing from info. ### Changed - More specific error when `validatepath` throws an error about the path argument being the wrong type, and changed from a ValueError to a TypeError. - Deprecated `encoding` parameter in OSFS. ## [2.0.3] - 2017-04-22 ### Added - New `copy_if_newer` functionality in `copy` module. ### Fixed - Improved `FTPFS` support for non-strict servers. ## [2.0.2] - 2017-03-12 ### Changed - Improved FTP support for non-compliant servers - Fix for `ZipFS` implied directories ## [2.0.1] - 2017-03-11 ### Added - `TarFS` contributed by Martin Larralde. ### Fixed - `FTPFS` bugs. ## [2.0.0] - 2016-12-07 New version of the PyFilesystem API.
Generated by dwww version 1.15 on Sat May 18 13:54:20 CEST 2024.