PyFilesystem2 v2.4.13 Release Notes

Release Date: 2021-03-27 // 7 months ago
  • ➕ Added

    • ➕ Added FTP over TLS (FTPS) support to FTPFS. Closes #437, #449.
    • 👻 PathError now supports wrapping an exception using the exc argument. Closes #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.
    • 🚚 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.
    • 👕 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 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.
    • 🚚 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 with FS.getinfo, and FS.getinfo is now explicitly expected to return the basic info namespace unconditionally. Closes #469.

    🛠 Fixed

    • 📄 Make FTPFile, MemoryFile and RawWrapper accept array.array arguments for the write and writelines methods, as expected by their base class io.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 a ResourceReadOnly when called. Closes #468.
    • WrapCachedDir.isdir and WrapCachedDir.isfile raising a ResourceNotFound 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 in OSFS.scandir, occasionally causing a ResourceWarning to be thrown. Closes #311.
    • Incomplete type annotations for the temp_fs parameter of WriteTarFS and WriteZipFS. Closes #410.

Previous changes from v2.4.12

  • ➕ Added

    • Missing mode attribute to _MemoryFile objects returned by MemoryFS.openbin.
    • Missing readinto method for MemoryFS and FTPFS 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.

    🔄 Changed

    • ✅ 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 is present, fixes #364.
    • Stop patching copy with Python 3.8+ because it already uses sendfile (#424). Closes #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.
    • 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 from openbin. Closes #406.