All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Added
filter_glob
andexclude_glob
parameters tofs.walk.Walker
. Closes #459.
- Elaborated documentation of
filter_dirs
andexclude_dirs
infs.walk.Walker
. Closes #371. - Fixes a backward incompatibility where
fs.move.move_file
raisesDestinationExists
(#535). - Fixed a bug where files could be truncated or deleted when moved / copied onto itself. Closes #546
- Make
fs.zipfs._ZipExtFile
use the seeking mechanism implemented in the Python standard library in Python version 3.7 and later (#527). - Mark
fs.zipfs.ReadZipFS
as a case-sensitive filesystem (#527). - Optimized moving files between filesystems with syspaths. (#523).
- Fixed
fs.move.move_file
to clean up the copy on the destination in case of errors. fs.opener.manage_fs
withwriteable=True
will now raise aResourceReadOnly
exception if the managed filesystem is not writeable.- Marked filesystems wrapped with
fs.wrap.WrapReadOnly
as read-only.
- Support more lenient usernames and group names in FTP servers (#507). Closes #506.
- Removed dependency on pytz (#518). Closes #516.
- Fixed
MemoryFS.move
andMemoryFS.movedir
not updating the name of moved resources, causingMemoryFS.scandir
to use the old name. (#510). Closes #509. - Make
WrapFS.move
andWrapFS.movedir
use the delegate FS methods instead offs.move
functions, which was causing optimized implementation ofmovedir
to be always skipped. (#511).
- Added
fs.copy.copy_file_if
,fs.copy.copy_dir_if
, andfs.copy.copy_fs_if
. Closes #458. - Added
fs.base.FS.getmodified
.
- 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.
- 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
.
- Added FTP over TLS (FTPS) support to FTPFS. Closes #437, #449.
PathError
now supports wrapping an exception using theexc
argument. Closes #453.- Better documentation of the
writable
parameter offs.open_fs
, and hint about usingfs.wrap.read_only
when a read-only filesystem is required. Closes #441. - Copy and move operations now provide a parameter
preserve_time
that, when passed asTrue
, makes sure the "mtime" of the destination file will be the same as that of the source file.
- Make
FS.upload
explicit about the expected error when the parent directory of the destination does not exist. Closes #445. - Migrate continuous integration from Travis-CI to GitHub Actions and introduce several linters again in the build steps (#448). Closes #446.
- Stop requiring
pytest
to run tests, allowing any test runner supportingunittest
-style test suites. FSTestCases
now builds the large data required forupload
anddownload
tests only once in order to reduce the total testing time.MemoryFS.move
andMemoryFS.movedir
will now avoid copying data. Closes #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.FS.getbasic
is now deprecated, as it is redundant withFS.getinfo
, andFS.getinfo
is now explicitly expected to return the basic info namespace unconditionally. Closes #469.
- Make
FTPFile
,MemoryFile
andRawWrapper
acceptarray.array
arguments for thewrite
andwritelines
methods, as expected by their base classio.RawIOBase
. - Various documentation issues, including
MemoryFS
docstring not rendering properly. - Avoid creating a new connection on every call of
FTPFS.upload
. Closes #455. WrapReadOnly.removetree
not raising aResourceReadOnly
when called. Closes #468.WrapCachedDir.isdir
andWrapCachedDir.isfile
raising aResourceNotFound
error on non-existing path (#470).FTPFS
not listing certain entries with sticky/SUID/SGID permissions set by Linux server (#473). Closes #451.scandir
iterator not being closed explicitly inOSFS.scandir
, occasionally causing aResourceWarning
to be thrown. Closes #311.- Incomplete type annotations for the
temp_fs
parameter ofWriteTarFS
andWriteZipFS
. Closes #410.
- Missing
mode
attribute to_MemoryFile
objects returned byMemoryFS.openbin
. - Missing
readinto
method forMemoryFS
andFTPFS
file objects. Closes #380. - Added compatibility if a Windows FTP server returns file information to the
LIST
command with 24-hour times. Closes #438. - Added Python 3.9 support. Closes #443.
- Start testing on PyPy. Due to #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. - Stop patching copy with Python 3.8+ because it already uses
sendfile
(#424). Closes #421.
- 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.
- Fixed documentation of
Mode.to_platform_bin
. Closes #382. - Fixed the code example in the "Testing Filesystems" section of the "Implementing Filesystems" guide. Closes #407.
- Fixed
FTPFS.openbin
not implicitly opening files in binary mode like expected fromopenbin
. Closes #406.
- Added geturl for TarFS and ZipFS for 'fs' purpose. NoURL for 'download' purpose.
- Added helpful root path in CreateFailed exception. Closes #340.
- Added Python 3.8 support.
- Fixed tests leaving tmp files
- Fixed typing issues
- Fixed link namespace returning bytes
- Fixed broken FSURL in windows #329
- Fixed hidden exception at fs.close() when opening an absent zip/tar file URL #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.
- Fixed missing
errno.ENOTSUP
on PyPy. Closes #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.
- Entire test suite has been migrated to pytest. Closes #327.
- Style checking is now enforced using
flake8
; this involved some code cleanup such as removing unused imports.
- Fixed broken WrapFS.movedir #322.
- Restored fs.path import
- Fixed potential race condition in makedirs. Fixes #310
- Added missing methods to WrapFS. Fixed #294
MemFS
now immediately releases all memory it holds whenclose()
is called, rather than when it gets garbage collected. Closes issue #308.FTPFS
now translatesEOFError
intoRemoteConnectionError
. Closes #292- Added automatic close for filesystems that go out of scope. Fixes #298
geturl
will return URL with user/password if needed @zmej-serow
- Flag to OSFS to disable env var expansion
- Implemented
geturl
in FTPFS @zmej-serow
- Fixed FTP test suite when time is not UTC-0 @mrg0029
- Fixed issues with paths in tarfs #284
- Dropped Python3.3 support
- Restored deprecated
setfile
method with deprecation warning to change towritefile
- Fixed exception when a tarfile contains a path called '.' #275
- Made TarFS directory loading lazy
- Detect case insensitivity using by writing temp file
- OSFS fail in nfs mounts
- Fixed broken "case_insensitive" check
- Fixed Windows test fails
- Fixed exception when Python runs with -OO
- Fixed hash method missing from WrapFS
- Added
exclude
andfilter_dirs
arguments to walk - Micro-optimizations to walk
- Add encoding check in OSFS.validatepath
- IllegalBackReference had mangled error message
- FS.hash method
Registry.install
returns its argument.
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 default chunk size in
copy_file_data
to 1MB - Added
chunk_size
andoptions
toFS.upload
- Incomplete FTPFile.write when using
workers
@geoffjukes - Fixed AppFS not creating directory
- Added load_extern switch to opener, fixes #228 @althanos
- Support for Windows NT FTP servers @sspross
- Root dir of MemoryFS accesible as a file
- Packaging issues @televi
- Deprecation warning re collections.Mapping
- Added PEP 561 py.typed files
- Use sendfile for faster copies @althonos
- Atomic exclusive mode in Py2.7 @sqwishy
- Fixed lstat @kamomil
- fs.glob support
- Fixed for Winows paths #152
- Fixed ftp dir parsing (@dhirschfeld)
- 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)
- workers parameter to fs.copy, fs.move, and fs.mirror for concurrent copies
- timeout to FTP opener
- Fix for Markdown on PyPi, no code changes
- Handling of broken unicode on Python2.7
- Added fs.getospath
- Typing information
- Added Info.suffix, Info.suffixes, Info.stem attributes
- Fixed issue with implied directories in TarFS
- Changed path.splitext so that 'leading periods on the basename are ignored', which is the behaviour of os.path.splitext
- MultiFS.listdir now correctly filters out duplicates
- encoding issue with TarFS
- CreateFailed now contains the original exception in
exc
attribute
- fs.getfile function
- Modified walk to use iterators internally (for more efficient walking)
- Modified fs.copy to use getfile
- Issue with ZipFS files missing a byte
- fs.parts
- Walk now yields Step named tuples as advertised
- Added max_depth parameter to fs.walk
- ZipFS files are now seekable (Martin Larralde)
No changes, pushed wrong branch to PyPi.
- Fixed ignore_errors in walk.py
- 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)
- fs.mirror
- Added params support to FS URLs
- Many fixes to FTPFS contributed by Martin Larralde.
- MountFS and MultiFS now accept FS URLS
- Add openers for AppFS
- Lstat info namespace
- Link info namespace
- FS.islink method
- Info.is_link method
- Fixed entry point breaking pip
- Opener refinements
- Fixed potential for deadlock in MemoryFS
- Added factory parameter to opendir.
- ClosingSubFS.
- File objects are all derived from io.IOBase.
- Fix closing for FTP opener.
- Opener extension mechanism contributed by Martin Larralde.
- Support for pathlike objects.
- Stat information was missing from info.
- 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.
- New
copy_if_newer
functionality incopy
module.
- Improved
FTPFS
support for non-strict servers.
- Improved FTP support for non-compliant servers
- Fix for
ZipFS
implied directories
TarFS
contributed by Martin Larralde.
FTPFS
bugs.
New version of the PyFilesystem API.