Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 31 additions & 3 deletions docs/source/changelog.rst
Original file line number Diff line number Diff line change
@@ -1,12 +1,40 @@
Changelog
=========

Dev
---
2026.7.0
--------

Enhancements

- Single-pass ``MemoryFileSystem.find()`` to avoid O(n_dirs * n_entries) listing; ``ls()`` previously scanned the whole store once per directory, now one pass over the flat store suffices (#2055)
- Single-pass ``MemoryFileSystem.find()`` to avoid O(n_dirs * n_entries) listing (#2055)
- Permit composite URL protocol schemes in infer_storage_options (#2085)
- Implement topdown in async walk() (#2052)

Fixes

- Fix incorrect glob docstring for '[!]' (#2084)
- Propagate storage_options to all backends resolved by GenericFileSystem (#2083)
- Handle end=None in FirstChunkCache._fetch like the other caches (#2082)
- Clamp read end to file size in BlockCache and BackgroundBlockCache(#2081)
- Create the parent dir for "x" and "a" modes under auto_mkdir (#2079)
- Expand paths for mode="x" when urlpath is a list (#2078)
- fix: correctly pass 'start' and 'end' parameters to super().cat_file() (#2077)
- Fix LocalFileSystem directory symlink removal (#2074)
- Fix ArrowFSWrapper parent paths for S3 (#2072)
- Fix get_file_extension when a parent directory name contains a dot (#2071)
- tar: make members with duplicate slashes reachable via ls/find/glob (#2063)
- MemoryFileSystem: create the file when appending to a missing path (#2062)

Other

- fixes for pytest deprecation (#2076)
- Shut down background cache workers on file close (#2069)
- Forward ls kwargs from cached filesystems (#2068)
- Fix bare except: use except Exception in upload cleanup handler (#2067)
- fix: Make Cached metaclass instance instantiation thread-safe and fork-safe (#2064)
- ci: fix test collection in fsspec_friends job (#2061)
- ftp: Make deprecated TLS versions optional (#2056)
- restrict cache storage directory permissions to owner (#2048)

2026.6.0
--------
Expand Down
6 changes: 5 additions & 1 deletion fsspec/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from . import caching
from ._version import __version__ # noqa: F401
from .callbacks import Callback
from .compression import available_compressions
from .core import get_fs_token_paths, open, open_files, open_local, url_to_fs
Expand All @@ -14,6 +13,11 @@
)
from .spec import AbstractFileSystem

try:
from ._version import __version__ # noqa: F401
except ImportError:
__version__ = "unknown"

__all__ = [
"AbstractFileSystem",
"FSTimeoutError",
Expand Down
2 changes: 1 addition & 1 deletion fsspec/tests/test_downstream.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
test_bucket_name,
)
except ImportError:
pytest.skip("s3 tests not available.")
pytest.skip("s3 tests not available.", allow_module_level=True)

so = {"anon": False, "client_kwargs": {"endpoint_url": endpoint_uri}}

Expand Down
4 changes: 2 additions & 2 deletions fsspec/tests/test_parquet.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ def test_nested(n, tmpdir, engine):
pa = pytest.importorskip("pyarrow")
flat = pa.array([random.random() for _ in range(n)])
nested = pa.array([{"a": random.random(), "b": random.random()} for _ in range(n)])
data = [float(_[0]) for _ in nested]
data = [float(_[0].as_py()) for _ in nested]
table = pa.table({"flat": flat, "nested": nested})
pq.write_table(table, path)
with open_parquet_file(path, columns=["nested.a"], engine=engine) as fh:
Expand All @@ -229,7 +229,7 @@ def test_nested_arrow_nodict(tmpdir):
path = os.path.join(str(tmpdir), "test.parquet")
flat = pa.array([random.random() for _ in range(n)])
nested = pa.array([{"a": random.random(), "b": random.random()} for _ in range(n)])
data = [float(_[0]) for _ in nested]
data = [float(_[0].as_py()) for _ in nested]
table = pa.table({"flat": flat, "nested": nested})
pq.write_table(table, path, use_dictionary=False)
with open_parquet_file(path, columns=["nested"], engine="pyarrow") as fh:
Expand Down
Loading