v0.25.0
What's Changed
Added
Store.list_folders(pattern=…): glob filter on folder basenames viafnmatch. Mirrorslist_files(pattern=…), composes withmax_depth=. Async sibling included. (ID-178)SFTPUtilspreflight helpers:scan_host_keys,scan_host_algorithms,enable_ssh_rsa_compatfor paramiko 5+ legacy-server compatibility.HostKeyPolicyaccepts enum-name aliases. (BK-197/198/199/200)- Azure HNS account setup guide: step-by-step
azCLI recipe for provisioning an ADLS Gen2 account suitable for the live HNS test suite.
Fixed
Azure HNS correctness on real ADLS Gen2. Twelve fixes surfaced by the new Stage 3 live test suite. Azurite forgave each of these; real HNS rejected or silently corrupted state.
- File-API data loss (data-loss fix):
read/read_bytes/read_seekable/deleteon a directory path now raiseInvalidPathinstead of returningb""or destroying the directory marker. (BUG-197) write_atomicstreaming: drives the DataLake DFS append protocol directly. ClosesMissingRequiredQueryParameter. (BUG-194, BUG-202)- Directory-vs-file error fidelity:
get_file_info,is_folder,get_folder_info,delete_folder,move/copy,open_atomic,write/write_atomicall raise the canonicalInvalidPathinstead of wrong-type errors. (BUG-190/192/195/198/199/200/203) get_folder_info("")root: no longer fails with"Please specify a file system name and file path". (BUG-213)move(p, p)/copy(p, p)self-op: now a no-op (wasAlreadyExists). (BUG-201)Store.move/copyself-op error type:NotFound→InvalidPathwhen source is a directory. (BK-227)- Async
write_atomicpost-rename quirk: toleratesget_file_properties()failure on HNS. (BUG-196)
Other:
SFTPBackenderror swallowing: connect-timePermissionErrorsurfaces asPermissionDenied/BackendUnavailableinstead ofFalse. (BUG-211)SFTPBackendinlineknown_host_keyson Windows: STRICT verification no longer silently bypassed. (BUG-209)S3Backend.check_health(): fixed silent no-op from unawaited coroutine. (BUG-208)AsyncMemoryBackenderror fidelity: type-mismatched paths now raiseInvalidPathmatching sync sibling. (BUG-189)MemoryBackend/AsyncMemoryBackend.copy(): metadata preserved on the destination (was silently dropped). (BK-192)AsyncMemoryBackendmetadata round-tripping throughget_file_info/list_files/iter_children. (BK-176)- Docs fixes: benchmark SVGs, EthicalAds floating, iOS Safari graph viz. (BUG-186/187/188)
Changed
[sftp]extra requiresparamiko>=3.0for thechannel_timeout=kwarg. paramiko 2.x floor lifted. Migration required. (BUG-204)pyarrow<25cap lifted: all extras now allow pyarrow 24.x. (BK-168, BK-172)hatch run test-covno longer enforces 95% floor: strict gate moved tohatch run test-cov-strict.
Documentation
aio.mdleads withAsyncStore: full per-category method sections. The fourmembers: falsestubs now render their full member surface. (ID-192)- Async docstring ripple completed:
Raises:clauses on nine I/O methods onSyncBackendAdapter.InvalidPathdocumented on async write paths. (BK-173, BK-174) SFTPUtilsrendering: helpers documented as true@staticmethod. (BK-202)- Migration guide:
v0.24.1 → v0.25.0section with full HNS error-type table.
Internal
- Stage 3 live cloud test infrastructure:
azure_live/azure_live_async/s3_livefixtures,BackendFixture.aclose, HTTP cassette/replay layer, live HNS integration test classes. (BK-179/180/181/184/204; BUG-182/191/193/210/212) - Physical fixture/backend registry SSoT: per-fixture flat-namespace and self-op flags replace identity-keyed sets. (BK-185, BK-186)
tests/root cleanup: placement checks wired into CI; six BK-191 slices reshape per-backend test layout. (BK-188/189/190/215-222)- End-to-end S3 control-path coverage:
test_s3_moto.pylifecycle in default suite catches BUG-178/185-class regressions. (BK-166) - Documentation framework tooling: ADR-0027 + Spec 047; universal on-disk link rule via
LinkResolver. (BK-167/167a/167b/169/170/171/205; ID-175)
Links: