fsspec 2024.12.0__tar.gz → 2025.2.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 (90) hide show
  1. {fsspec-2024.12.0 → fsspec-2025.2.0}/.pre-commit-config.yaml +5 -1
  2. {fsspec-2024.12.0 → fsspec-2025.2.0}/PKG-INFO +1 -2
  3. {fsspec-2024.12.0 → fsspec-2025.2.0}/ci/environment-downstream.yml +0 -1
  4. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/changelog.rst +19 -0
  5. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/_version.py +2 -2
  6. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/archive.py +3 -1
  7. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/asyn_wrapper.py +2 -1
  8. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/dbfs.py +3 -3
  9. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/reference.py +99 -9
  10. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/registry.py +3 -3
  11. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/spec.py +3 -3
  12. {fsspec-2024.12.0 → fsspec-2025.2.0}/pyproject.toml +0 -5
  13. fsspec-2024.12.0/.github/workflows/codespell.yml +0 -19
  14. {fsspec-2024.12.0 → fsspec-2025.2.0}/.codespellrc +0 -0
  15. {fsspec-2024.12.0 → fsspec-2025.2.0}/.coveragerc +0 -0
  16. {fsspec-2024.12.0 → fsspec-2025.2.0}/.gitattributes +0 -0
  17. {fsspec-2024.12.0 → fsspec-2025.2.0}/.github/workflows/main.yaml +0 -0
  18. {fsspec-2024.12.0 → fsspec-2025.2.0}/.github/workflows/pypipublish.yaml +0 -0
  19. {fsspec-2024.12.0 → fsspec-2025.2.0}/.gitignore +0 -0
  20. {fsspec-2024.12.0 → fsspec-2025.2.0}/LICENSE +0 -0
  21. {fsspec-2024.12.0 → fsspec-2025.2.0}/README.md +0 -0
  22. {fsspec-2024.12.0 → fsspec-2025.2.0}/ci/environment-friends.yml +0 -0
  23. {fsspec-2024.12.0 → fsspec-2025.2.0}/ci/environment-py38.yml +0 -0
  24. {fsspec-2024.12.0 → fsspec-2025.2.0}/ci/environment-typecheck.yml +0 -0
  25. {fsspec-2024.12.0 → fsspec-2025.2.0}/ci/environment-win.yml +0 -0
  26. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/Makefile +0 -0
  27. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/README.md +0 -0
  28. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/environment.yml +0 -0
  29. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/make.bat +0 -0
  30. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/_static/custom.css +0 -0
  31. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/api.rst +0 -0
  32. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/async.rst +0 -0
  33. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/conf.py +0 -0
  34. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/copying.rst +0 -0
  35. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/developer.rst +0 -0
  36. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/features.rst +0 -0
  37. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/img/gui.png +0 -0
  38. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/index.rst +0 -0
  39. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/intro.rst +0 -0
  40. {fsspec-2024.12.0 → fsspec-2025.2.0}/docs/source/usage.rst +0 -0
  41. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/__init__.py +0 -0
  42. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/asyn.py +0 -0
  43. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/caching.py +0 -0
  44. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/callbacks.py +0 -0
  45. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/compression.py +0 -0
  46. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/config.py +0 -0
  47. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/conftest.py +0 -0
  48. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/core.py +0 -0
  49. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/dircache.py +0 -0
  50. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/exceptions.py +0 -0
  51. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/fuse.py +0 -0
  52. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/generic.py +0 -0
  53. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/gui.py +0 -0
  54. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/__init__.py +0 -0
  55. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/arrow.py +0 -0
  56. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/cache_mapper.py +0 -0
  57. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/cache_metadata.py +0 -0
  58. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/cached.py +0 -0
  59. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/dask.py +0 -0
  60. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/data.py +0 -0
  61. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/dirfs.py +0 -0
  62. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/ftp.py +0 -0
  63. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/git.py +0 -0
  64. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/github.py +0 -0
  65. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/http.py +0 -0
  66. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/jupyter.py +0 -0
  67. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/libarchive.py +0 -0
  68. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/local.py +0 -0
  69. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/memory.py +0 -0
  70. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/sftp.py +0 -0
  71. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/smb.py +0 -0
  72. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/tar.py +0 -0
  73. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/webhdfs.py +0 -0
  74. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/implementations/zip.py +0 -0
  75. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/json.py +0 -0
  76. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/mapping.py +0 -0
  77. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/parquet.py +0 -0
  78. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/tests/abstract/__init__.py +0 -0
  79. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/tests/abstract/common.py +0 -0
  80. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/tests/abstract/copy.py +0 -0
  81. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/tests/abstract/get.py +0 -0
  82. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/tests/abstract/mv.py +0 -0
  83. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/tests/abstract/open.py +0 -0
  84. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/tests/abstract/pipe.py +0 -0
  85. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/tests/abstract/put.py +0 -0
  86. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/transaction.py +0 -0
  87. {fsspec-2024.12.0 → fsspec-2025.2.0}/fsspec/utils.py +0 -0
  88. {fsspec-2024.12.0 → fsspec-2025.2.0}/install_s3fs.sh +0 -0
  89. {fsspec-2024.12.0 → fsspec-2025.2.0}/readthedocs.yml +0 -0
  90. {fsspec-2024.12.0 → fsspec-2025.2.0}/setup.cfg +0 -0
@@ -14,10 +14,14 @@ repos:
14
14
  - id: check-yaml
15
15
  - repo: https://github.com/astral-sh/ruff-pre-commit
16
16
  # Ruff version.
17
- rev: v0.6.9
17
+ rev: v0.9.2
18
18
  hooks:
19
19
  # Run the linter.
20
20
  - id: ruff
21
21
  args: [ --fix, "--show-fixes"]
22
22
  - id: ruff-format
23
23
  types_or: [python]
24
+ - repo: https://github.com/codespell-project/codespell
25
+ rev: v2.4.0
26
+ hooks:
27
+ - id: codespell
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fsspec
3
- Version: 2024.12.0
3
+ Version: 2025.2.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/
@@ -131,7 +131,6 @@ Requires-Dist: pytest-rerunfailures; extra == 'test'
131
131
  Requires-Dist: requests; extra == 'test'
132
132
  Provides-Extra: test-downstream
133
133
  Requires-Dist: aiobotocore<3.0.0,>=2.5.4; extra == 'test-downstream'
134
- Requires-Dist: dask-expr; extra == 'test-downstream'
135
134
  Requires-Dist: dask[dataframe,test]; extra == 'test-downstream'
136
135
  Requires-Dist: moto[server]<5,>4; extra == 'test-downstream'
137
136
  Requires-Dist: pytest-timeout; extra == 'test-downstream'
@@ -5,4 +5,3 @@ dependencies:
5
5
  - python=3.11
6
6
  - pip:
7
7
  - git+https://github.com/dask/dask
8
- - git+https://github.com/dask/dask-expr
@@ -1,6 +1,25 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ 2025.2.0
5
+ --------
6
+
7
+ Enhancements
8
+
9
+ - add open() to referenceFS (#1778)
10
+
11
+ Fixes
12
+
13
+ - don't make async open() in async-wrapper (#1769)
14
+ - fix CI following dask-expr upstream change (#1781)
15
+ - cope with zarr3 "Buffer" objects in referenceFS (#1784)
16
+
17
+ Other
18
+
19
+ - use itemgetter in archiveFS (#1764)
20
+ - document that newline is included in readline(s) (#1770)
21
+ - format/spelling (#1774, 1779, 1780)
22
+
4
23
  2024.12.0
5
24
  ---------
6
25
 
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2024.12.0'
16
- __version_tuple__ = version_tuple = (2024, 12, 0)
15
+ __version__ = version = '2025.2.0'
16
+ __version_tuple__ = version_tuple = (2025, 2, 0)
@@ -1,3 +1,5 @@
1
+ import operator
2
+
1
3
  from fsspec import AbstractFileSystem
2
4
  from fsspec.utils import tokenize
3
5
 
@@ -67,7 +69,7 @@ class AbstractArchiveFileSystem(AbstractFileSystem):
67
69
  out = {"name": ppath, "size": 0, "type": "directory"}
68
70
  paths[ppath] = out
69
71
  if detail:
70
- out = sorted(paths.values(), key=lambda _: _["name"])
72
+ out = sorted(paths.values(), key=operator.itemgetter("name"))
71
73
  return out
72
74
  else:
73
75
  return sorted(paths)
@@ -57,8 +57,9 @@ class AsyncFileSystemWrapper(AsyncFileSystem):
57
57
  """
58
58
  Wrap all synchronous methods of the underlying filesystem with asynchronous versions.
59
59
  """
60
+ excluded_methods = {"open"}
60
61
  for method_name in dir(self.sync_fs):
61
- if method_name.startswith("_"):
62
+ if method_name.startswith("_") or method_name in excluded_methods:
62
63
  continue
63
64
 
64
65
  attr = inspect.getattr_static(self.sync_fs, method_name)
@@ -412,9 +412,9 @@ class DatabricksFile(AbstractBufferedFile):
412
412
  if block_size is None or block_size == "default":
413
413
  block_size = self.DEFAULT_BLOCK_SIZE
414
414
 
415
- assert (
416
- block_size == self.DEFAULT_BLOCK_SIZE
417
- ), f"Only the default block size is allowed, not {block_size}"
415
+ assert block_size == self.DEFAULT_BLOCK_SIZE, (
416
+ f"Only the default block size is allowed, not {block_size}"
417
+ )
418
418
 
419
419
  super().__init__(
420
420
  fs,
@@ -10,6 +10,7 @@ from itertools import chain
10
10
  from typing import TYPE_CHECKING, Literal
11
11
 
12
12
  import fsspec.core
13
+ from fsspec.spec import AbstractBufferedFile
13
14
 
14
15
  try:
15
16
  import ujson as json
@@ -394,10 +395,14 @@ class LazyReferenceMapper(collections.abc.MutableMapping):
394
395
  self.write(field, record)
395
396
  else:
396
397
  # metadata or top-level
397
- self._items[key] = value
398
- new_value = json.loads(
399
- value.decode() if isinstance(value, bytes) else value
400
- )
398
+ if hasattr(value, "to_bytes"):
399
+ val = value.to_bytes().decode()
400
+ elif isinstance(value, bytes):
401
+ val = value.decode()
402
+ else:
403
+ val = value
404
+ self._items[key] = val
405
+ new_value = json.loads(val)
401
406
  self.zmetadata[key] = {**self.zmetadata.get(key, {}), **new_value}
402
407
 
403
408
  @staticmethod
@@ -595,8 +600,7 @@ class ReferenceFileSystem(AsyncFileSystem):
595
600
  async, and must allow start and end args in _cat_file. Later versions
596
601
  may allow multiple arbitrary URLs for the targets.
597
602
  This FileSystem is read-only. It is designed to be used with async
598
- targets (for now). This FileSystem only allows whole-file access, no
599
- ``open``. We do not get original file details from the target FS.
603
+ targets (for now). We do not get original file details from the target FS.
600
604
  Configuration is by passing a dict of references at init, or a URL to
601
605
  a JSON file containing the same; this dict
602
606
  can also contain concrete data for some set of paths.
@@ -606,6 +610,7 @@ class ReferenceFileSystem(AsyncFileSystem):
606
610
  """
607
611
 
608
612
  protocol = "reference"
613
+ cachable = False
609
614
 
610
615
  def __init__(
611
616
  self,
@@ -762,6 +767,11 @@ class ReferenceFileSystem(AsyncFileSystem):
762
767
  for k, f in self.fss.items():
763
768
  if not f.async_impl:
764
769
  self.fss[k] = AsyncFileSystemWrapper(f)
770
+ elif self.asynchronous ^ f.asynchronous:
771
+ raise ValueError(
772
+ "Reference-FS's target filesystem must have same value"
773
+ "of asynchronous"
774
+ )
765
775
 
766
776
  def _cat_common(self, path, start=None, end=None):
767
777
  path = self._strip_protocol(path)
@@ -772,6 +782,8 @@ class ReferenceFileSystem(AsyncFileSystem):
772
782
  raise FileNotFoundError(path) from exc
773
783
  if isinstance(part, str):
774
784
  part = part.encode()
785
+ if hasattr(part, "to_bytes"):
786
+ part = part.to_bytes()
775
787
  if isinstance(part, bytes):
776
788
  logger.debug(f"Reference: {path}, type bytes")
777
789
  if part.startswith(b"base64:"):
@@ -1073,7 +1085,7 @@ class ReferenceFileSystem(AsyncFileSystem):
1073
1085
  self.dircache = {"": []}
1074
1086
  it = self.references.items()
1075
1087
  for path, part in it:
1076
- if isinstance(part, (bytes, str)):
1088
+ if isinstance(part, (bytes, str)) or hasattr(part, "to_bytes"):
1077
1089
  size = len(part)
1078
1090
  elif len(part) == 1:
1079
1091
  size = None
@@ -1100,10 +1112,33 @@ class ReferenceFileSystem(AsyncFileSystem):
1100
1112
  self.dircache[par].append({"name": path, "type": "file", "size": size})
1101
1113
 
1102
1114
  def _open(self, path, mode="rb", block_size=None, cache_options=None, **kwargs):
1103
- data = self.cat_file(path) # load whole chunk into memory
1104
- return io.BytesIO(data)
1115
+ part_or_url, start0, end0 = self._cat_common(path)
1116
+ # This logic is kept outside `ReferenceFile` to avoid unnecessary redirection.
1117
+ # That does mean `_cat_common` gets called twice if it eventually reaches `ReferenceFile`.
1118
+ if isinstance(part_or_url, bytes):
1119
+ return io.BytesIO(part_or_url[start0:end0])
1120
+
1121
+ protocol, _ = split_protocol(part_or_url)
1122
+ if start0 is None and end0 is None:
1123
+ return self.fss[protocol]._open(
1124
+ part_or_url,
1125
+ mode,
1126
+ block_size=block_size,
1127
+ cache_options=cache_options,
1128
+ **kwargs,
1129
+ )
1130
+
1131
+ return ReferenceFile(
1132
+ self,
1133
+ path,
1134
+ mode,
1135
+ block_size=block_size,
1136
+ cache_options=cache_options,
1137
+ **kwargs,
1138
+ )
1105
1139
 
1106
1140
  def ls(self, path, detail=True, **kwargs):
1141
+ logger.debug("list %s", path)
1107
1142
  path = self._strip_protocol(path)
1108
1143
  if isinstance(self.references, LazyReferenceMapper):
1109
1144
  try:
@@ -1214,3 +1249,58 @@ class ReferenceFileSystem(AsyncFileSystem):
1214
1249
  out[k] = v
1215
1250
  with fsspec.open(url, "wb", **storage_options) as f:
1216
1251
  f.write(json.dumps({"version": 1, "refs": out}).encode())
1252
+
1253
+
1254
+ class ReferenceFile(AbstractBufferedFile):
1255
+ def __init__(
1256
+ self,
1257
+ fs,
1258
+ path,
1259
+ mode="rb",
1260
+ block_size="default",
1261
+ autocommit=True,
1262
+ cache_type="readahead",
1263
+ cache_options=None,
1264
+ size=None,
1265
+ **kwargs,
1266
+ ):
1267
+ super().__init__(
1268
+ fs,
1269
+ path,
1270
+ mode=mode,
1271
+ block_size=block_size,
1272
+ autocommit=autocommit,
1273
+ size=size,
1274
+ cache_type=cache_type,
1275
+ cache_options=cache_options,
1276
+ **kwargs,
1277
+ )
1278
+ part_or_url, self.start, self.end = self.fs._cat_common(self.path)
1279
+ protocol, _ = split_protocol(part_or_url)
1280
+ self.src_fs = self.fs.fss[protocol]
1281
+ self.src_path = part_or_url
1282
+ self._f = None
1283
+
1284
+ @property
1285
+ def f(self):
1286
+ if self._f is None or self._f.closed:
1287
+ self._f = self.src_fs._open(
1288
+ self.src_path,
1289
+ mode=self.mode,
1290
+ block_size=self.blocksize,
1291
+ autocommit=self.autocommit,
1292
+ cache_type="none",
1293
+ **self.kwargs,
1294
+ )
1295
+ return self._f
1296
+
1297
+ def close(self):
1298
+ if self._f is not None:
1299
+ self._f.close()
1300
+ return super().close()
1301
+
1302
+ def _fetch_range(self, start, end):
1303
+ start = start + self.start
1304
+ end = min(end + self.start, self.end)
1305
+ self.f.seek(start)
1306
+ return self.f.read(end - start)
@@ -218,9 +218,9 @@ known_implementations = {
218
218
  "zip": {"class": "fsspec.implementations.zip.ZipFileSystem"},
219
219
  }
220
220
 
221
- assert list(known_implementations) == sorted(
222
- known_implementations
223
- ), "Not in alphabetical order"
221
+ assert list(known_implementations) == sorted(known_implementations), (
222
+ "Not in alphabetical order"
223
+ )
224
224
 
225
225
 
226
226
  def get_filesystem_class(protocol):
@@ -382,7 +382,7 @@ class AbstractFileSystem(metaclass=_Cached):
382
382
  pass
383
383
 
384
384
  def walk(self, path, maxdepth=None, topdown=True, on_error="omit", **kwargs):
385
- """Return all files belows path
385
+ """Return all files under the given path.
386
386
 
387
387
  List all files, recursing into subdirectories; output is iterator-style,
388
388
  like ``os.walk()``. For a simple list of files, ``find()`` is available.
@@ -2131,7 +2131,7 @@ class AbstractBufferedFile(io.IOBase):
2131
2131
  return b"".join(out)
2132
2132
 
2133
2133
  def readline(self):
2134
- """Read until first occurrence of newline character
2134
+ """Read until and including the first occurrence of newline character
2135
2135
 
2136
2136
  Note that, because of character encoding, this is not necessarily a
2137
2137
  true line ending.
@@ -2148,7 +2148,7 @@ class AbstractBufferedFile(io.IOBase):
2148
2148
  return self
2149
2149
 
2150
2150
  def readlines(self):
2151
- """Return all data, split by the newline character"""
2151
+ """Return all data, split by the newline character, including the newline character"""
2152
2152
  data = self.read()
2153
2153
  lines = data.split(b"\n")
2154
2154
  out = [l + b"\n" for l in lines[:-1]]
@@ -122,7 +122,6 @@ test_full = [
122
122
  ]
123
123
  test_downstream = [
124
124
  "dask[dataframe,test]",
125
- "dask-expr",
126
125
  "moto[server]>4,<5",
127
126
  "pytest-timeout",
128
127
  "xarray",
@@ -215,8 +214,6 @@ ignore = [
215
214
  "UP011",
216
215
  "UP015",
217
216
  "UP018",
218
- # deprecated
219
- "UP027",
220
217
  "SIM102",
221
218
  "SIM105",
222
219
  "SIM108",
@@ -238,8 +235,6 @@ ignore = [
238
235
  "Q003",
239
236
  "COM812",
240
237
  "COM819",
241
- "ISC001",
242
- "ISC002",
243
238
  ]
244
239
 
245
240
  [tool.pytest.ini_options]
@@ -1,19 +0,0 @@
1
- ---
2
- name: Codespell
3
-
4
- on:
5
- push:
6
- branches: [master]
7
- pull_request:
8
- branches: [master]
9
-
10
- jobs:
11
- codespell:
12
- name: Check for spelling errors
13
- runs-on: ubuntu-latest
14
-
15
- steps:
16
- - name: Checkout
17
- uses: actions/checkout@v4
18
- - name: Codespell
19
- uses: codespell-project/actions-codespell@v1
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes