diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index 528acfa77..7f4e84f13 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -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 -------- diff --git a/fsspec/__init__.py b/fsspec/__init__.py index 452c78a05..5de87eda1 100644 --- a/fsspec/__init__.py +++ b/fsspec/__init__.py @@ -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 @@ -14,6 +13,11 @@ ) from .spec import AbstractFileSystem +try: + from ._version import __version__ # noqa: F401 +except ImportError: + __version__ = "unknown" + __all__ = [ "AbstractFileSystem", "FSTimeoutError", diff --git a/fsspec/tests/test_downstream.py b/fsspec/tests/test_downstream.py index 1f0a0bc0e..b24d7e4c2 100644 --- a/fsspec/tests/test_downstream.py +++ b/fsspec/tests/test_downstream.py @@ -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}} diff --git a/fsspec/tests/test_parquet.py b/fsspec/tests/test_parquet.py index 20929cd1c..3df83f48e 100644 --- a/fsspec/tests/test_parquet.py +++ b/fsspec/tests/test_parquet.py @@ -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: @@ -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: