fsspec 2025.2.0__tar.gz → 2025.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. {fsspec-2025.2.0 → fsspec-2025.3.0}/PKG-INFO +1 -1
  2. fsspec-2025.3.0/correct_permissions.bin +1 -0
  3. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/changelog.rst +16 -0
  4. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/_version.py +9 -4
  5. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/core.py +1 -1
  6. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/asyn_wrapper.py +9 -5
  7. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/dirfs.py +8 -4
  8. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/http.py +24 -0
  9. fsspec-2025.3.0/fsspec/implementations/http_sync.py +932 -0
  10. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/local.py +8 -7
  11. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/reference.py +2 -3
  12. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/registry.py +3 -0
  13. {fsspec-2025.2.0 → fsspec-2025.3.0}/.codespellrc +0 -0
  14. {fsspec-2025.2.0 → fsspec-2025.3.0}/.coveragerc +0 -0
  15. {fsspec-2025.2.0 → fsspec-2025.3.0}/.gitattributes +0 -0
  16. {fsspec-2025.2.0 → fsspec-2025.3.0}/.github/workflows/main.yaml +0 -0
  17. {fsspec-2025.2.0 → fsspec-2025.3.0}/.github/workflows/pypipublish.yaml +0 -0
  18. {fsspec-2025.2.0 → fsspec-2025.3.0}/.gitignore +0 -0
  19. {fsspec-2025.2.0 → fsspec-2025.3.0}/.pre-commit-config.yaml +0 -0
  20. {fsspec-2025.2.0 → fsspec-2025.3.0}/LICENSE +0 -0
  21. {fsspec-2025.2.0 → fsspec-2025.3.0}/README.md +0 -0
  22. {fsspec-2025.2.0 → fsspec-2025.3.0}/ci/environment-downstream.yml +0 -0
  23. {fsspec-2025.2.0 → fsspec-2025.3.0}/ci/environment-friends.yml +0 -0
  24. {fsspec-2025.2.0 → fsspec-2025.3.0}/ci/environment-py38.yml +0 -0
  25. {fsspec-2025.2.0 → fsspec-2025.3.0}/ci/environment-typecheck.yml +0 -0
  26. {fsspec-2025.2.0 → fsspec-2025.3.0}/ci/environment-win.yml +0 -0
  27. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/Makefile +0 -0
  28. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/README.md +0 -0
  29. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/environment.yml +0 -0
  30. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/make.bat +0 -0
  31. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/_static/custom.css +0 -0
  32. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/api.rst +0 -0
  33. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/async.rst +0 -0
  34. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/conf.py +0 -0
  35. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/copying.rst +0 -0
  36. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/developer.rst +0 -0
  37. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/features.rst +0 -0
  38. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/img/gui.png +0 -0
  39. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/index.rst +0 -0
  40. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/intro.rst +0 -0
  41. {fsspec-2025.2.0 → fsspec-2025.3.0}/docs/source/usage.rst +0 -0
  42. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/__init__.py +0 -0
  43. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/archive.py +0 -0
  44. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/asyn.py +0 -0
  45. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/caching.py +0 -0
  46. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/callbacks.py +0 -0
  47. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/compression.py +0 -0
  48. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/config.py +0 -0
  49. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/conftest.py +0 -0
  50. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/dircache.py +0 -0
  51. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/exceptions.py +0 -0
  52. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/fuse.py +0 -0
  53. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/generic.py +0 -0
  54. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/gui.py +0 -0
  55. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/__init__.py +0 -0
  56. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/arrow.py +0 -0
  57. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/cache_mapper.py +0 -0
  58. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/cache_metadata.py +0 -0
  59. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/cached.py +0 -0
  60. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/dask.py +0 -0
  61. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/data.py +0 -0
  62. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/dbfs.py +0 -0
  63. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/ftp.py +0 -0
  64. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/git.py +0 -0
  65. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/github.py +0 -0
  66. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/jupyter.py +0 -0
  67. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/libarchive.py +0 -0
  68. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/memory.py +0 -0
  69. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/sftp.py +0 -0
  70. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/smb.py +0 -0
  71. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/tar.py +0 -0
  72. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/webhdfs.py +0 -0
  73. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/implementations/zip.py +0 -0
  74. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/json.py +0 -0
  75. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/mapping.py +0 -0
  76. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/parquet.py +0 -0
  77. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/spec.py +0 -0
  78. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/tests/abstract/__init__.py +0 -0
  79. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/tests/abstract/common.py +0 -0
  80. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/tests/abstract/copy.py +0 -0
  81. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/tests/abstract/get.py +0 -0
  82. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/tests/abstract/mv.py +0 -0
  83. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/tests/abstract/open.py +0 -0
  84. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/tests/abstract/pipe.py +0 -0
  85. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/tests/abstract/put.py +0 -0
  86. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/transaction.py +0 -0
  87. {fsspec-2025.2.0 → fsspec-2025.3.0}/fsspec/utils.py +0 -0
  88. {fsspec-2025.2.0 → fsspec-2025.3.0}/install_s3fs.sh +0 -0
  89. {fsspec-2025.2.0 → fsspec-2025.3.0}/pyproject.toml +0 -0
  90. {fsspec-2025.2.0 → fsspec-2025.3.0}/readthedocs.yml +0 -0
  91. {fsspec-2025.2.0 → fsspec-2025.3.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fsspec
3
- Version: 2025.2.0
3
+ Version: 2025.3.0
4
4
  Summary: File-system specification
5
5
  Project-URL: Changelog, https://filesystem-spec.readthedocs.io/en/latest/changelog.html
6
6
  Project-URL: Documentation, https://filesystem-spec.readthedocs.io/en/latest/
@@ -0,0 +1 @@
1
+ hello
@@ -1,6 +1,22 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ 2025.3.0
5
+ --------
6
+
7
+ Enhancements
8
+
9
+ - add pipe_file to HTTP (#1799, 1801)
10
+ - add sync http for pyodide (#1177)
11
+ - ls performance for local and detail=False (#1789)
12
+
13
+ Fixes
14
+
15
+ - dir/info consistency in dirfs (#1798)
16
+ - referenceFS async consistency (#1794, 1795)
17
+ - CI (#1793)
18
+
19
+
4
20
  2025.2.0
5
21
  --------
6
22
 
@@ -1,8 +1,13 @@
1
- # file generated by setuptools_scm
1
+ # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
+
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5
+
3
6
  TYPE_CHECKING = False
4
7
  if TYPE_CHECKING:
5
- from typing import Tuple, Union
8
+ from typing import Tuple
9
+ from typing import Union
10
+
6
11
  VERSION_TUPLE = Tuple[Union[int, str], ...]
7
12
  else:
8
13
  VERSION_TUPLE = object
@@ -12,5 +17,5 @@ __version__: str
12
17
  __version_tuple__: VERSION_TUPLE
13
18
  version_tuple: VERSION_TUPLE
14
19
 
15
- __version__ = version = '2025.2.0'
16
- __version_tuple__ = version_tuple = (2025, 2, 0)
20
+ __version__ = version = '2025.3.0'
21
+ __version_tuple__ = version_tuple = (2025, 3, 0)
@@ -452,7 +452,7 @@ def open(
452
452
  newline: bytes or None
453
453
  Used for line terminator in text mode. If None, uses system default;
454
454
  if blank, uses no translation.
455
- expand: bool or Nonw
455
+ expand: bool or None
456
456
  Whether to regard file paths containing special glob characters as needing
457
457
  expansion (finding the first match) or absolute. Setting False allows using
458
458
  paths which do embed such characters. If None (default), this argument
@@ -2,7 +2,7 @@ import asyncio
2
2
  import functools
3
3
  import inspect
4
4
 
5
- from fsspec.asyn import AsyncFileSystem
5
+ from fsspec.asyn import AsyncFileSystem, running_async
6
6
 
7
7
 
8
8
  def async_wrapper(func, obj=None):
@@ -42,10 +42,14 @@ class AsyncFileSystemWrapper(AsyncFileSystem):
42
42
  The synchronous filesystem instance to wrap.
43
43
  """
44
44
 
45
- def __init__(self, sync_fs, *args, **kwargs):
46
- super().__init__(*args, **kwargs)
47
- self.asynchronous = True
48
- self.sync_fs = sync_fs
45
+ protocol = "async_wrapper"
46
+ cachable = False
47
+
48
+ def __init__(self, fs, *args, asynchronous=None, **kwargs):
49
+ if asynchronous is None:
50
+ asynchronous = running_async()
51
+ super().__init__(*args, asynchronous=asynchronous, **kwargs)
52
+ self.sync_fs = fs
49
53
  self.protocol = self.sync_fs.protocol
50
54
  self._wrap_all_sync_methods()
51
55
 
@@ -36,8 +36,6 @@ class DirFileSystem(AsyncFileSystem):
36
36
  super().__init__(**storage_options)
37
37
  if fs is None:
38
38
  fs = filesystem(protocol=target_protocol, **(target_options or {}))
39
- if (path is not None) ^ (fo is not None) is False:
40
- raise ValueError("Provide path or fo, not both")
41
39
  path = path or fo
42
40
 
43
41
  if self.asynchronous and not fs.async_impl:
@@ -233,10 +231,16 @@ class DirFileSystem(AsyncFileSystem):
233
231
  return self.fs.exists(self._join(path))
234
232
 
235
233
  async def _info(self, path, **kwargs):
236
- return await self.fs._info(self._join(path), **kwargs)
234
+ info = await self.fs._info(self._join(path), **kwargs)
235
+ info = info.copy()
236
+ info["name"] = self._relpath(info["name"])
237
+ return info
237
238
 
238
239
  def info(self, path, **kwargs):
239
- return self.fs.info(self._join(path), **kwargs)
240
+ info = self.fs.info(self._join(path), **kwargs)
241
+ info = info.copy()
242
+ info["name"] = self._relpath(info["name"])
243
+ return info
240
244
 
241
245
  async def _ls(self, path, detail=True, **kwargs):
242
246
  ret = (await self.fs._ls(self._join(path), detail=detail, **kwargs)).copy()
@@ -522,6 +522,30 @@ class HTTPFileSystem(AsyncFileSystem):
522
522
  except (FileNotFoundError, ValueError):
523
523
  return False
524
524
 
525
+ async def _pipe_file(self, path, value, mode="overwrite", **kwargs):
526
+ """
527
+ Write bytes to a remote file over HTTP.
528
+
529
+ Parameters
530
+ ----------
531
+ path : str
532
+ Target URL where the data should be written
533
+ value : bytes
534
+ Data to be written
535
+ mode : str
536
+ How to write to the file - 'overwrite' or 'append'
537
+ **kwargs : dict
538
+ Additional parameters to pass to the HTTP request
539
+ """
540
+ url = self._strip_protocol(path)
541
+ headers = kwargs.pop("headers", {})
542
+ headers["Content-Length"] = str(len(value))
543
+
544
+ session = await self.set_session()
545
+
546
+ async with session.put(url, data=value, headers=headers, **kwargs) as r:
547
+ r.raise_for_status()
548
+
525
549
 
526
550
  class HTTPFile(AbstractBufferedFile):
527
551
  """