fsspec 2024.5.0__py3-none-any.whl → 2024.6.1__py3-none-any.whl

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 (76) hide show
  1. fsspec/_version.py +2 -2
  2. fsspec/caching.py +3 -2
  3. fsspec/compression.py +1 -1
  4. fsspec/generic.py +3 -0
  5. fsspec/implementations/cached.py +6 -16
  6. fsspec/implementations/dirfs.py +2 -0
  7. fsspec/implementations/github.py +12 -0
  8. fsspec/implementations/http.py +2 -1
  9. fsspec/implementations/reference.py +9 -0
  10. fsspec/implementations/smb.py +10 -0
  11. fsspec/json.py +121 -0
  12. fsspec/registry.py +24 -18
  13. fsspec/spec.py +119 -33
  14. fsspec/utils.py +1 -1
  15. {fsspec-2024.5.0.dist-info → fsspec-2024.6.1.dist-info}/METADATA +10 -5
  16. fsspec-2024.6.1.dist-info/RECORD +55 -0
  17. {fsspec-2024.5.0.dist-info → fsspec-2024.6.1.dist-info}/WHEEL +1 -1
  18. fsspec/implementations/tests/__init__.py +0 -0
  19. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_file_listing.yaml +0 -112
  20. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_mkdir.yaml +0 -582
  21. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_pyarrow_non_partitioned.yaml +0 -873
  22. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range.yaml +0 -458
  23. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range_chunked.yaml +0 -1355
  24. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_and_read.yaml +0 -795
  25. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_pyarrow_non_partitioned.yaml +0 -613
  26. fsspec/implementations/tests/conftest.py +0 -39
  27. fsspec/implementations/tests/local/__init__.py +0 -0
  28. fsspec/implementations/tests/local/local_fixtures.py +0 -18
  29. fsspec/implementations/tests/local/local_test.py +0 -14
  30. fsspec/implementations/tests/memory/__init__.py +0 -0
  31. fsspec/implementations/tests/memory/memory_fixtures.py +0 -27
  32. fsspec/implementations/tests/memory/memory_test.py +0 -14
  33. fsspec/implementations/tests/out.zip +0 -0
  34. fsspec/implementations/tests/test_archive.py +0 -382
  35. fsspec/implementations/tests/test_arrow.py +0 -259
  36. fsspec/implementations/tests/test_cached.py +0 -1306
  37. fsspec/implementations/tests/test_common.py +0 -35
  38. fsspec/implementations/tests/test_dask.py +0 -29
  39. fsspec/implementations/tests/test_data.py +0 -20
  40. fsspec/implementations/tests/test_dbfs.py +0 -268
  41. fsspec/implementations/tests/test_dirfs.py +0 -588
  42. fsspec/implementations/tests/test_ftp.py +0 -178
  43. fsspec/implementations/tests/test_git.py +0 -76
  44. fsspec/implementations/tests/test_http.py +0 -577
  45. fsspec/implementations/tests/test_jupyter.py +0 -57
  46. fsspec/implementations/tests/test_libarchive.py +0 -33
  47. fsspec/implementations/tests/test_local.py +0 -1285
  48. fsspec/implementations/tests/test_memory.py +0 -382
  49. fsspec/implementations/tests/test_reference.py +0 -720
  50. fsspec/implementations/tests/test_sftp.py +0 -233
  51. fsspec/implementations/tests/test_smb.py +0 -139
  52. fsspec/implementations/tests/test_tar.py +0 -243
  53. fsspec/implementations/tests/test_webhdfs.py +0 -197
  54. fsspec/implementations/tests/test_zip.py +0 -134
  55. fsspec/tests/__init__.py +0 -0
  56. fsspec/tests/conftest.py +0 -188
  57. fsspec/tests/data/listing.html +0 -1
  58. fsspec/tests/test_api.py +0 -498
  59. fsspec/tests/test_async.py +0 -230
  60. fsspec/tests/test_caches.py +0 -255
  61. fsspec/tests/test_callbacks.py +0 -89
  62. fsspec/tests/test_compression.py +0 -164
  63. fsspec/tests/test_config.py +0 -129
  64. fsspec/tests/test_core.py +0 -466
  65. fsspec/tests/test_downstream.py +0 -40
  66. fsspec/tests/test_file.py +0 -200
  67. fsspec/tests/test_fuse.py +0 -147
  68. fsspec/tests/test_generic.py +0 -90
  69. fsspec/tests/test_gui.py +0 -23
  70. fsspec/tests/test_mapping.py +0 -228
  71. fsspec/tests/test_parquet.py +0 -140
  72. fsspec/tests/test_registry.py +0 -134
  73. fsspec/tests/test_spec.py +0 -1167
  74. fsspec/tests/test_utils.py +0 -478
  75. fsspec-2024.5.0.dist-info/RECORD +0 -111
  76. {fsspec-2024.5.0.dist-info → fsspec-2024.6.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,478 +0,0 @@
1
- import io
2
- import sys
3
- from pathlib import Path, PurePath
4
- from unittest.mock import Mock
5
-
6
- import pytest
7
-
8
- import fsspec.utils
9
- from fsspec.utils import (
10
- can_be_local,
11
- common_prefix,
12
- get_protocol,
13
- infer_storage_options,
14
- merge_offset_ranges,
15
- mirror_from,
16
- other_paths,
17
- read_block,
18
- seek_delimiter,
19
- setup_logging,
20
- )
21
-
22
- WIN = sys.platform.startswith("win")
23
-
24
-
25
- def test_read_block():
26
- delimiter = b"\n"
27
- data = delimiter.join([b"123", b"456", b"789"])
28
- f = io.BytesIO(data)
29
-
30
- assert read_block(f, 1, 2) == b"23"
31
- assert read_block(f, 0, 1, delimiter=b"\n") == b"123\n"
32
- assert read_block(f, 0, 2, delimiter=b"\n") == b"123\n"
33
- assert read_block(f, 0, 3, delimiter=b"\n") == b"123\n"
34
- assert read_block(f, 0, 5, delimiter=b"\n") == b"123\n456\n"
35
- assert read_block(f, 0, 8, delimiter=b"\n") == b"123\n456\n789"
36
- assert read_block(f, 0, 100, delimiter=b"\n") == b"123\n456\n789"
37
- assert read_block(f, 1, 1, delimiter=b"\n") == b""
38
- assert read_block(f, 1, 5, delimiter=b"\n") == b"456\n"
39
- assert read_block(f, 1, 8, delimiter=b"\n") == b"456\n789"
40
-
41
- for ols in [[(0, 3), (3, 3), (6, 3), (9, 2)], [(0, 4), (4, 4), (8, 4)]]:
42
- out = [read_block(f, o, l, b"\n") for o, l in ols]
43
- assert b"".join(filter(None, out)) == data
44
-
45
-
46
- def test_read_block_split_before():
47
- """Test start/middle/end cases of split_before.""" # noqa: I
48
- d = (
49
- "#header" + "".join(">foo{i}\nFOOBAR{i}\n".format(i=i) for i in range(100000))
50
- ).encode()
51
-
52
- # Read single record at beginning.
53
- # All reads include beginning of file and read through termination of
54
- # delimited record.
55
- assert read_block(io.BytesIO(d), 0, 10, delimiter=b"\n") == b"#header>foo0\n"
56
- assert (
57
- read_block(io.BytesIO(d), 0, 10, delimiter=b"\n", split_before=True)
58
- == b"#header>foo0"
59
- )
60
- assert (
61
- read_block(io.BytesIO(d), 0, 10, delimiter=b">") == b"#header>foo0\nFOOBAR0\n>"
62
- )
63
- assert (
64
- read_block(io.BytesIO(d), 0, 10, delimiter=b">", split_before=True)
65
- == b"#header>foo0\nFOOBAR0\n"
66
- )
67
-
68
- # Read multiple records at beginning.
69
- # All reads include beginning of file and read through termination of
70
- # delimited record.
71
- assert (
72
- read_block(io.BytesIO(d), 0, 27, delimiter=b"\n")
73
- == b"#header>foo0\nFOOBAR0\n>foo1\nFOOBAR1\n"
74
- )
75
- assert (
76
- read_block(io.BytesIO(d), 0, 27, delimiter=b"\n", split_before=True)
77
- == b"#header>foo0\nFOOBAR0\n>foo1\nFOOBAR1"
78
- )
79
- assert (
80
- read_block(io.BytesIO(d), 0, 27, delimiter=b">")
81
- == b"#header>foo0\nFOOBAR0\n>foo1\nFOOBAR1\n>"
82
- )
83
- assert (
84
- read_block(io.BytesIO(d), 0, 27, delimiter=b">", split_before=True)
85
- == b"#header>foo0\nFOOBAR0\n>foo1\nFOOBAR1\n"
86
- )
87
-
88
- # Read with offset spanning into next record, splits on either side of delimiter.
89
- # Read not spanning the full record returns nothing.
90
- assert read_block(io.BytesIO(d), 10, 3, delimiter=b"\n") == b"FOOBAR0\n"
91
- assert (
92
- read_block(io.BytesIO(d), 10, 3, delimiter=b"\n", split_before=True)
93
- == b"\nFOOBAR0"
94
- )
95
- assert read_block(io.BytesIO(d), 10, 3, delimiter=b">") == b""
96
- assert read_block(io.BytesIO(d), 10, 3, delimiter=b">", split_before=True) == b""
97
-
98
- # Read with offset spanning multiple records, splits on either side of delimiter
99
- assert (
100
- read_block(io.BytesIO(d), 10, 20, delimiter=b"\n")
101
- == b"FOOBAR0\n>foo1\nFOOBAR1\n"
102
- )
103
- assert (
104
- read_block(io.BytesIO(d), 10, 20, delimiter=b"\n", split_before=True)
105
- == b"\nFOOBAR0\n>foo1\nFOOBAR1"
106
- )
107
- assert read_block(io.BytesIO(d), 10, 20, delimiter=b">") == b"foo1\nFOOBAR1\n>"
108
- assert (
109
- read_block(io.BytesIO(d), 10, 20, delimiter=b">", split_before=True)
110
- == b">foo1\nFOOBAR1\n"
111
- )
112
-
113
- # Read record at end, all records read to end
114
-
115
- tlen = len(d)
116
-
117
- assert (
118
- read_block(io.BytesIO(d), tlen - 30, 35, delimiter=b"\n")
119
- == b">foo99999\nFOOBAR99999\n"
120
- )
121
-
122
- assert (
123
- read_block(io.BytesIO(d), tlen - 30, 35, delimiter=b"\n", split_before=True)
124
- == b"\n>foo99999\nFOOBAR99999\n"
125
- )
126
-
127
- assert (
128
- read_block(io.BytesIO(d), tlen - 30, 35, delimiter=b">")
129
- == b"foo99999\nFOOBAR99999\n"
130
- )
131
-
132
- assert (
133
- read_block(io.BytesIO(d), tlen - 30, 35, delimiter=b">", split_before=True)
134
- == b">foo99999\nFOOBAR99999\n"
135
- )
136
-
137
-
138
- def test_seek_delimiter_endline():
139
- f = io.BytesIO(b"123\n456\n789")
140
-
141
- # if at zero, stay at zero
142
- seek_delimiter(f, b"\n", 5)
143
- assert f.tell() == 0
144
-
145
- # choose the first block
146
- for bs in [1, 5, 100]:
147
- f.seek(1)
148
- seek_delimiter(f, b"\n", blocksize=bs)
149
- assert f.tell() == 4
150
-
151
- # handle long delimiters well, even with short blocksizes
152
- f = io.BytesIO(b"123abc456abc789")
153
- for bs in [1, 2, 3, 4, 5, 6, 10]:
154
- f.seek(1)
155
- seek_delimiter(f, b"abc", blocksize=bs)
156
- assert f.tell() == 6
157
-
158
- # End at the end
159
- f = io.BytesIO(b"123\n456")
160
- f.seek(5)
161
- seek_delimiter(f, b"\n", 5)
162
- assert f.tell() == 7
163
-
164
-
165
- def test_infer_options():
166
- so = infer_storage_options("/mnt/datasets/test.csv")
167
- assert so.pop("protocol") == "file"
168
- assert so.pop("path") == "/mnt/datasets/test.csv"
169
- assert not so
170
-
171
- assert infer_storage_options("./test.csv")["path"] == "./test.csv"
172
- assert infer_storage_options("../test.csv")["path"] == "../test.csv"
173
-
174
- so = infer_storage_options("C:\\test.csv")
175
- assert so.pop("protocol") == "file"
176
- assert so.pop("path") == "C:\\test.csv"
177
- assert not so
178
-
179
- assert infer_storage_options("d:\\test.csv")["path"] == "d:\\test.csv"
180
- assert infer_storage_options("\\test.csv")["path"] == "\\test.csv"
181
- assert infer_storage_options(".\\test.csv")["path"] == ".\\test.csv"
182
- assert infer_storage_options("test.csv")["path"] == "test.csv"
183
-
184
- so = infer_storage_options(
185
- "hdfs://username:pwd@Node:123/mnt/datasets/test.csv?q=1#fragm",
186
- inherit_storage_options={"extra": "value"},
187
- )
188
- assert so.pop("protocol") == "hdfs"
189
- assert so.pop("username") == "username"
190
- assert so.pop("password") == "pwd"
191
- assert so.pop("host") == "Node"
192
- assert so.pop("port") == 123
193
- assert so.pop("path") == "/mnt/datasets/test.csv#fragm"
194
- assert so.pop("url_query") == "q=1"
195
- assert so.pop("url_fragment") == "fragm"
196
- assert so.pop("extra") == "value"
197
- assert not so
198
-
199
- so = infer_storage_options("hdfs://User-name@Node-name.com/mnt/datasets/test.csv")
200
- assert so.pop("username") == "User-name"
201
- assert so.pop("host") == "Node-name.com"
202
-
203
- u = "http://127.0.0.1:8080/test.csv"
204
- assert infer_storage_options(u) == {"protocol": "http", "path": u}
205
-
206
- # For s3 and gcs the netloc is actually the bucket name, so we want to
207
- # include it in the path. Test that:
208
- # - Parsing doesn't lowercase the bucket
209
- # - The bucket is included in path
210
- for protocol in ["s3", "s3a", "gcs", "gs"]:
211
- options = infer_storage_options(f"{protocol}://Bucket-name.com/test.csv")
212
- assert options["path"] == "Bucket-name.com/test.csv"
213
-
214
- with pytest.raises(KeyError):
215
- infer_storage_options("file:///bucket/file.csv", {"path": "collide"})
216
- with pytest.raises(KeyError):
217
- infer_storage_options("hdfs:///bucket/file.csv", {"protocol": "collide"})
218
-
219
-
220
- def test_infer_simple():
221
- out = infer_storage_options("//mnt/datasets/test.csv")
222
- assert out["protocol"] == "file"
223
- assert out["path"] == "//mnt/datasets/test.csv"
224
- assert out.get("host", None) is None
225
-
226
-
227
- @pytest.mark.parametrize(
228
- "urlpath, expected_path",
229
- (
230
- (r"c:\foo\bar", r"c:\foo\bar"),
231
- (r"C:\\foo\bar", r"C:\\foo\bar"),
232
- (r"c:/foo/bar", r"c:/foo/bar"),
233
- (r"file:///c|\foo\bar", r"c:\foo\bar"),
234
- (r"file:///C|/foo/bar", r"C:/foo/bar"),
235
- (r"file:///C:/foo/bar", r"C:/foo/bar"),
236
- ),
237
- )
238
- def test_infer_storage_options_c(urlpath, expected_path):
239
- so = infer_storage_options(urlpath)
240
- assert so["protocol"] == "file"
241
- assert so["path"] == expected_path
242
-
243
-
244
- @pytest.mark.parametrize(
245
- "paths, out",
246
- (
247
- (["/more/dir/", "/more/dir/two", "/more/one", "/more/three"], "/more"),
248
- (["/", "", "/"], ""),
249
- (["/", "/"], "/"),
250
- (["/more/", "/"], ""),
251
- (["/more/", "/more"], "/more"),
252
- (["more/dir/", "more/dir/two", "more/one", "more/three"], "more"),
253
- ),
254
- )
255
- def test_common_prefix(paths, out):
256
- assert common_prefix(paths) == out
257
-
258
-
259
- @pytest.mark.parametrize(
260
- "paths, other, exists, expected",
261
- (
262
- (["/path1"], "/path2", False, ["/path2"]),
263
- (["/path1"], "/path2", True, ["/path2/path1"]),
264
- (["/path1"], "/path2", False, ["/path2"]),
265
- (["/path1"], "/path2/", True, ["/path2/path1"]),
266
- (["/path1"], ["/path2"], False, ["/path2"]),
267
- (["/path1"], ["/path2"], True, ["/path2"]),
268
- (["/path1", "/path2"], "/path2", False, ["/path2/path1", "/path2/path2"]),
269
- (["/path1", "/path2"], "/path2", True, ["/path2/path1", "/path2/path2"]),
270
- (
271
- ["/more/path1", "/more/path2"],
272
- "/path2",
273
- False,
274
- ["/path2/path1", "/path2/path2"],
275
- ),
276
- (
277
- ["/more/path1", "/more/path2"],
278
- "/path2",
279
- True,
280
- ["/path2/more/path1", "/path2/more/path2"],
281
- ),
282
- (
283
- ["/more/path1", "/more/path2"],
284
- "/path2",
285
- False,
286
- ["/path2/path1", "/path2/path2"],
287
- ),
288
- (
289
- ["/more/path1", "/more/path2"],
290
- "/path2",
291
- True,
292
- ["/path2/more/path1", "/path2/more/path2"],
293
- ),
294
- (
295
- ["/more/path1", "/more/path2"],
296
- "/path2/",
297
- False,
298
- ["/path2/path1", "/path2/path2"],
299
- ),
300
- (
301
- ["/more/path1", "/more/path2"],
302
- "/path2/",
303
- True,
304
- ["/path2/more/path1", "/path2/more/path2"],
305
- ),
306
- (
307
- ["/more/path1", "/diff/path2"],
308
- "/path2/",
309
- False,
310
- ["/path2/more/path1", "/path2/diff/path2"],
311
- ),
312
- (
313
- ["/more/path1", "/diff/path2"],
314
- "/path2/",
315
- True,
316
- ["/path2/more/path1", "/path2/diff/path2"],
317
- ),
318
- (["a", "b/", "b/c"], "dest/", False, ["dest/a", "dest/b/", "dest/b/c"]),
319
- (
320
- ["/a", "/b/", "/b/c"],
321
- "dest/",
322
- False,
323
- ["dest/a", "dest/b/", "dest/b/c"],
324
- ),
325
- ),
326
- )
327
- def test_other_paths(paths, other, exists, expected):
328
- assert other_paths(paths, other, exists) == expected
329
-
330
-
331
- def test_log():
332
- import logging
333
-
334
- logger = setup_logging(logger_name="fsspec.test")
335
- assert logger.level == logging.DEBUG
336
-
337
-
338
- @pytest.mark.parametrize(
339
- "par",
340
- [
341
- ("afile", "file"),
342
- ("file://afile", "file"),
343
- ("noproto://afile", "noproto"),
344
- ("noproto::stuff", "noproto"),
345
- ("simplecache::stuff", "simplecache"),
346
- ("simplecache://stuff", "simplecache"),
347
- ("s3://afile", "s3"),
348
- (Path("afile"), "file"),
349
- ],
350
- )
351
- def test_get_protocol(par):
352
- url, outcome = par
353
- assert get_protocol(url) == outcome
354
-
355
-
356
- @pytest.mark.parametrize(
357
- "par",
358
- [
359
- ("afile", True),
360
- ("file://afile", True),
361
- ("noproto://afile", False),
362
- ("noproto::stuff", False),
363
- ("simplecache::stuff", True),
364
- ("simplecache://stuff", True),
365
- (Path("afile"), True),
366
- ],
367
- )
368
- def test_can_local(par):
369
- url, outcome = par
370
- assert can_be_local(url) == outcome
371
-
372
-
373
- def test_mirror_from():
374
- mock = Mock()
375
- mock.attr = 1
376
-
377
- @mirror_from("client", ["attr", "func_1", "func_2"])
378
- class Real:
379
- @property
380
- def client(self):
381
- return mock
382
-
383
- def func_2(self):
384
- assert False, "have to overwrite this"
385
-
386
- def func_3(self):
387
- return "should succeed"
388
-
389
- obj = Real()
390
- assert obj.attr == mock.attr
391
-
392
- obj.func_1()
393
- mock.func_1.assert_called()
394
-
395
- obj.func_2(1, 2)
396
- mock.func_2.assert_called_with(1, 2)
397
-
398
- assert obj.func_3() == "should succeed"
399
- mock.func_3.assert_not_called()
400
-
401
-
402
- @pytest.mark.parametrize("max_gap", [0, 32])
403
- @pytest.mark.parametrize("max_block", [None, 128])
404
- def test_merge_offset_ranges(max_gap, max_block):
405
- # Input ranges
406
- # (Using out-of-order ranges for full coverage)
407
- paths = ["foo", "bar", "bar", "bar", "foo"]
408
- starts = [0, 0, 512, 64, 32]
409
- ends = [32, 32, 1024, 256, 64]
410
-
411
- # Call merge_offset_ranges
412
- (
413
- result_paths,
414
- result_starts,
415
- result_ends,
416
- ) = merge_offset_ranges(
417
- paths,
418
- starts,
419
- ends,
420
- max_gap=max_gap,
421
- max_block=max_block,
422
- )
423
-
424
- # Check result
425
- if max_block is None and max_gap == 32:
426
- expect_paths = ["bar", "bar", "foo"]
427
- expect_starts = [0, 512, 0]
428
- expect_ends = [256, 1024, 64]
429
- else:
430
- expect_paths = ["bar", "bar", "bar", "foo"]
431
- expect_starts = [0, 64, 512, 0]
432
- expect_ends = [32, 256, 1024, 64]
433
-
434
- assert expect_paths == result_paths
435
- assert expect_starts == result_starts
436
- assert expect_ends == result_ends
437
-
438
-
439
- def test_size():
440
- f = io.BytesIO(b"hello")
441
- assert fsspec.utils.file_size(f) == 5
442
- assert f.tell() == 0
443
-
444
-
445
- class _HasFspath:
446
- def __fspath__(self):
447
- return "foo"
448
-
449
-
450
- class _HasPathAttr:
451
- def __init__(self):
452
- self.path = "foo"
453
-
454
-
455
- @pytest.mark.parametrize(
456
- "path,expected",
457
- [
458
- # coerce to string
459
- ("foo", "foo"),
460
- (Path("foo"), "foo"),
461
- (PurePath("foo"), "foo"),
462
- (_HasFspath(), "foo"),
463
- (_HasPathAttr(), "foo"),
464
- # passthrough
465
- (b"bytes", b"bytes"),
466
- (None, None),
467
- (1, 1),
468
- (True, True),
469
- (o := object(), o),
470
- ([], []),
471
- ((), ()),
472
- (set(), set()),
473
- ],
474
- )
475
- def test_stringify_path(path, expected):
476
- path = fsspec.utils.stringify_path(path)
477
-
478
- assert path == expected
@@ -1,111 +0,0 @@
1
- fsspec/__init__.py,sha256=l9MJaNNV2d4wKpCtMvXDr55n92DkdrAayGy3F9ICjzk,1998
2
- fsspec/_version.py,sha256=2pJh6qTjZ57pXQ4LXvxc8FwirydggDedF6HpXczhFxs,417
3
- fsspec/archive.py,sha256=S__DzfZj-urAN3tp2W6jJ6YDiXG1fAl7FjvWUN73qIE,2386
4
- fsspec/asyn.py,sha256=AOd2SXH2YPCaQL5jA6IegYevdMFkAnGD7Seh9DC2gSE,36404
5
- fsspec/caching.py,sha256=FYBC7hYRmuuOyrlx1Jxm-9jwHX1MXg4aw7gTVqNsfCE,31576
6
- fsspec/callbacks.py,sha256=BDIwLzK6rr_0V5ch557fSzsivCElpdqhXr5dZ9Te-EE,9210
7
- fsspec/compression.py,sha256=RaO-LT02c3TgIgGQ6jQJOkdNC4xYPRQf6wTD1JboyUg,4860
8
- fsspec/config.py,sha256=LF4Zmu1vhJW7Je9Q-cwkRc3xP7Rhyy7Xnwj26Z6sv2g,4279
9
- fsspec/conftest.py,sha256=fVfx-NLrH_OZS1TIpYNoPzM7efEcMoL62reHOdYeFCA,1245
10
- fsspec/core.py,sha256=Iln37fNZqjjk5vaDGU_0WWuwOxN1iVsQ6sDmCmuEvrs,23681
11
- fsspec/dircache.py,sha256=YzogWJrhEastHU7vWz-cJiJ7sdtLXFXhEpInGKd4EcM,2717
12
- fsspec/exceptions.py,sha256=pauSLDMxzTJMOjvX1WEUK0cMyFkrFxpWJsyFywav7A8,331
13
- fsspec/fuse.py,sha256=66amOa6wdIbS0DMhhfAPUoOB37HPorfXD1izV0prmTY,10145
14
- fsspec/generic.py,sha256=lg7kRrxRG0qTJH349TVhBdRl-7nRH6xYe7LVOIqfcfA,13589
15
- fsspec/gui.py,sha256=k46F11VGBLlrliPj3XbxHKlVGByWoX67Ofmu9ijaPBQ,13929
16
- fsspec/mapping.py,sha256=hSsiRo-dgAOj6oHf67bF3i11U4xREglXToHGUX4GhRY,8261
17
- fsspec/parquet.py,sha256=ONG29Enesp0ToCH2bQ7zkpimnVIsZ2S4xCLj35-fY78,19455
18
- fsspec/registry.py,sha256=Y5BrunGt1dHXi178Xr1bPIpyGgJrFbpjM4cfbRtIFkw,11277
19
- fsspec/spec.py,sha256=kr1nzYa-5DoSXHbqvtGcs8_AX3v6AA9azbj7sqRMLms,66595
20
- fsspec/transaction.py,sha256=xliRG6U2Zf3khG4xcw9WiB-yAoqJSHEGK_VjHOdtgo0,2398
21
- fsspec/utils.py,sha256=YB6OYqbtMEsL1idePoGbmzzBxbU57KYEwyvzq9gj3xo,22978
22
- fsspec/implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- fsspec/implementations/arrow.py,sha256=Y4F_IwWXuJI1mRO_c0_PI5o-Wp58RLmoiH_s-x88w4M,8631
24
- fsspec/implementations/cache_mapper.py,sha256=W4wlxyPxZbSp9ItJ0pYRVBMh6bw9eFypgP6kUYuuiI4,2421
25
- fsspec/implementations/cache_metadata.py,sha256=pcOJYcBQY5OaC7Yhw0F3wjg08QLYApGmoISCrbs59ks,8511
26
- fsspec/implementations/cached.py,sha256=CuxQXQ6f-MRnLvsRzvauEhpmXEgicZZCfViKjIu1kn4,33029
27
- fsspec/implementations/dask.py,sha256=CXZbJzIVOhKV8ILcxuy3bTvcacCueAbyQxmvAkbPkrk,4466
28
- fsspec/implementations/data.py,sha256=LDLczxRh8h7x39Zjrd-GgzdQHr78yYxDlrv2C9Uxb5E,1658
29
- fsspec/implementations/dbfs.py,sha256=cix9OYUveuSOx5UO5uRUwNUkYqjzyY0fkKnca1kTgZ0,15014
30
- fsspec/implementations/dirfs.py,sha256=qrGXraUBsXUUGneLuhVddC6EfMaPBPA4iAb8M965yRA,11374
31
- fsspec/implementations/ftp.py,sha256=rp6cTog8xqjDPlKdSLKcsyP7K593_ByMabxGbNSEpTo,11655
32
- fsspec/implementations/git.py,sha256=vKGI-Vd5q4H2RrvhebkPc9NwlfkZ980OUGhebeCw-M0,4034
33
- fsspec/implementations/github.py,sha256=0kIiKkeAaROuHgdWBHVQFrzJ2ZfoDgymCehL_kJXHYA,7565
34
- fsspec/implementations/http.py,sha256=uRmhzPzmLV6yCLJtc9XvK-aiTX48k67ZakCmh4msCzE,29637
35
- fsspec/implementations/jupyter.py,sha256=B2uj7OEm7yIk-vRSsO37_ND0t0EBvn4B-Su43ibN4Pg,3811
36
- fsspec/implementations/libarchive.py,sha256=5_I2DiLXwQ1JC8x-K7jXu-tBwhO9dj7tFLnb0bTnVMQ,7102
37
- fsspec/implementations/local.py,sha256=qc68w69-I7zqVO8njv_s-THVImwICOqxyt-_2EK1VLg,15042
38
- fsspec/implementations/memory.py,sha256=-BpOVwaWyW2rDvxWIIcrZTNFAhvuG66VWeIM6vLwhkc,10134
39
- fsspec/implementations/reference.py,sha256=3dPi55riD_cROCafpeoUm2Xbb1vpXpyQijl09f5jTsE,43871
40
- fsspec/implementations/sftp.py,sha256=fMY9XZcmpjszQ2tCqO_TPaJesaeD_Dv7ptYzgUPGoO0,5631
41
- fsspec/implementations/smb.py,sha256=IHuzqwbvwYNRmflTsawNL49QXn8GTzj10_bLpjQmtvs,10933
42
- fsspec/implementations/tar.py,sha256=dam78Tp_CozybNqCY2JYgGBS3Uc9FuJUAT9oB0lolOs,4111
43
- fsspec/implementations/webhdfs.py,sha256=Wm7zr0iX3SZx5LtWfJIo-5rkIaoEoWq_Ev87NWbUgug,16721
44
- fsspec/implementations/zip.py,sha256=vc1fNz-yO8uWQ9bQUqBFYpTcgsfZQq9vDwwg4Aufs9Y,4417
45
- fsspec/implementations/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- fsspec/implementations/tests/conftest.py,sha256=1p3yF1BPCy8lj8Vwvg5zAHGAJACD2Dx51cviJubdEB0,941
47
- fsspec/implementations/tests/out.zip,sha256=K7nI_KEovxQcQLwhOSHb83HKIQ2Ab7CWMEt4OiFnFsc,313
48
- fsspec/implementations/tests/test_archive.py,sha256=9pWhgBga42Z1S27aHxr22PaDAb5NqlaXB-gq3fYZ-EI,13135
49
- fsspec/implementations/tests/test_arrow.py,sha256=xoNkq5dtNNPl0vGWboTuXerib8zGgCUMZdbwc5S91-4,7389
50
- fsspec/implementations/tests/test_cached.py,sha256=ya5EZv_1MEO9IulzYQbBjLDzsBK7c7jRj8TZmeEMRU8,41286
51
- fsspec/implementations/tests/test_common.py,sha256=utlYdFeCpqMUTgDkpcSRXidi6P2DTyBEIa67ZzxhrNE,1070
52
- fsspec/implementations/tests/test_dask.py,sha256=k3DQdnrkj4h7j_yrGHKcZas_PDCy1rGDuWhcuDKvX8k,573
53
- fsspec/implementations/tests/test_data.py,sha256=X__H0YXcjvfkzhk6eOSgC-8AC7Tw4hAJQk5I65YNJA0,541
54
- fsspec/implementations/tests/test_dbfs.py,sha256=ApIfNFXMc9s5d9jKC7Feqvkn-PwBJ_HDtZ01Qp3mYtc,9230
55
- fsspec/implementations/tests/test_dirfs.py,sha256=5cxkdmRQKj-OfuzyPjowQ1NKHIKqXiPg3H2GPwkK5zQ,18151
56
- fsspec/implementations/tests/test_ftp.py,sha256=80SAo2CUkiZzeKoRdOrB1ASkdCaF92TkBc4wweRaMJY,4877
57
- fsspec/implementations/tests/test_git.py,sha256=z0yHEFKOs9drVEW6p7oNW8JiYT547LK-waScXHRk9hc,2805
58
- fsspec/implementations/tests/test_http.py,sha256=qdCQm2lYhJUEDucbVxxrNT5blGhMT75zZToLjxcLob0,17584
59
- fsspec/implementations/tests/test_jupyter.py,sha256=J9PtxmvP6k1XEjf3jSb2H4plAR_-KkM6OeMa6OREhv8,1467
60
- fsspec/implementations/tests/test_libarchive.py,sha256=mrDGim7iEbeHLAwWqBCCQ-dFAh69tIsZgdw6bt6W8kM,1009
61
- fsspec/implementations/tests/test_local.py,sha256=U6a22-60PWY-zzmpoWHHZjpyjxIM-dRDSVKVoJ75chA,37887
62
- fsspec/implementations/tests/test_memory.py,sha256=3ynT7VvXnADAiYIg25jodkdmw15D01AR6cI9bt_3Np8,9994
63
- fsspec/implementations/tests/test_reference.py,sha256=6xyzvpUALerMoq2i40TIc1At0P5NvdJJ50QCP78s_I4,20354
64
- fsspec/implementations/tests/test_sftp.py,sha256=ge-8AbdC0Uh-jXKNb-95oejQ0yHDu7J4dvUvZ_gAMjE,6888
65
- fsspec/implementations/tests/test_smb.py,sha256=UdXAhvXhgfOTFCZix4fXL61z_41iX2xOyG0yt_BDa9M,4244
66
- fsspec/implementations/tests/test_tar.py,sha256=y1SCEcikX4IqGnvXxf5jO9dqQaEJuEXEdWUMCyHEAyg,8180
67
- fsspec/implementations/tests/test_webhdfs.py,sha256=ejepo2AenzjkhUN8RhIzVKomcJCKY70RUOqonVataw4,5547
68
- fsspec/implementations/tests/test_zip.py,sha256=DqPSG3pz9N9SqR_eacdjf7MZBbp__kUZmIi0BpxDA0Y,3889
69
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_file_listing.yaml,sha256=yfZ-v2I4kDt0TdkJH5gadGuipIp2KA_uyI_5Ne00CRo,2917
70
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_mkdir.yaml,sha256=7T8gDSWxyxK8wZZWYYISMtQ7FOc6sPbqO6zh8bJzdgQ,14795
71
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_pyarrow_non_partitioned.yaml,sha256=KGhUstli2rU5TLLicYU-EJl1fnbeIX_P0rkHSieq3Ns,34473
72
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range.yaml,sha256=Be-U9u0kll6UGewb1C6L4TRzzt_jZmgwjIBvWiGvmwo,11385
73
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range_chunked.yaml,sha256=9Hz7ZM5vQugl7rnMsH4DG3rvKHM0CwXirOn98otBiMs,5312412
74
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_and_read.yaml,sha256=vJ7jt4z0nVC2RdV6Mf6YuPIpqRTf0-lt8rcW-XIdoUE,2033937
75
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_pyarrow_non_partitioned.yaml,sha256=kgsDrsEp37W_UmfxB0xAqtzVhVMPsx_FK7ZbFrtZ4fc,22071
76
- fsspec/implementations/tests/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- fsspec/implementations/tests/local/local_fixtures.py,sha256=S3b43BWTG9XdJEvVsGMrY5yz2FxAZl98ibYutvhvQ9Q,445
78
- fsspec/implementations/tests/local/local_test.py,sha256=EH2K7je3hX9Zjfw0O3vZsIsBzz8jCjK-DXmVZeQdMxw,338
79
- fsspec/implementations/tests/memory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- fsspec/implementations/tests/memory/memory_fixtures.py,sha256=aguF4Ys0WpS9a_7Pr6oerKop-vYdVGs46D90pBMTzQ0,610
81
- fsspec/implementations/tests/memory/memory_test.py,sha256=SHOtU7VXrAvU9S-7xs3TQPYP0GCPiEtwpGwPFUG51CI,347
82
- fsspec/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
- fsspec/tests/conftest.py,sha256=2NuVnYXXTtnSjIOj2ldmMt4e7OMU9ipeurXUzyP2vFU,6332
84
- fsspec/tests/test_api.py,sha256=-BKN7SqnKg1mqqoygTiBzo5WJxh0WwqBu6maXCGXz2c,14595
85
- fsspec/tests/test_async.py,sha256=FkB-gTa9MG11l_VqJf76ozx5XYNdDNv0CvM8ucdHoGI,6789
86
- fsspec/tests/test_caches.py,sha256=J87WinPHtD2T0gxng7xj8NZWopF0C90aizpkH6oz_8U,8364
87
- fsspec/tests/test_callbacks.py,sha256=hsA4Zu8W2KmxyyMHLDYBDvWoeum60HlQtaFMQndpZZs,2600
88
- fsspec/tests/test_compression.py,sha256=uk4ufTZWeOa6OmwvPKb4DooEEwhKOwrWhnpqMUDdfTg,5218
89
- fsspec/tests/test_config.py,sha256=30I5zD0YB1-C5XaVGanluOqrNmdJ1CMriYq1dNwPJOg,3476
90
- fsspec/tests/test_core.py,sha256=IneIHjTCHXaQq_qwckHukLNghV6QLCyod_C3mNcgaIY,13725
91
- fsspec/tests/test_downstream.py,sha256=6szA8FLQNQicRN2V04Yre0kUCQfBfwCYuZQtWsoSbeI,1026
92
- fsspec/tests/test_file.py,sha256=FjQ-RNPZPh5Xqc_K2WVjMT0wcFOs9QxZjbDe4IXcuJQ,5426
93
- fsspec/tests/test_fuse.py,sha256=lnhdCnIMqHx2pTKtPmVNHTRdV66J-6-16hzWohBoThs,3792
94
- fsspec/tests/test_generic.py,sha256=00g4SJX_PnQjQ5QEiIMWEJyV8KcX5UEIv9ZO3lU5PjU,2824
95
- fsspec/tests/test_gui.py,sha256=Edc4nF6uYd9eVArY8e1SmGWfxMx7sQBgJIInvRl-7RA,508
96
- fsspec/tests/test_mapping.py,sha256=PbY0yIfbMc2kSP4WMTmhdGwG4Wn5tyuaPmaFhpdi13Y,6510
97
- fsspec/tests/test_parquet.py,sha256=EJxpkCwSVbQqsAyGAkuT5TNNFmyLmjTiwT76E8MZTMw,4465
98
- fsspec/tests/test_registry.py,sha256=ZGiGHTdRAV969xp8tqNgiyqz3tJZb5EDdlwEnGI8D-A,4200
99
- fsspec/tests/test_spec.py,sha256=6Px_9qHY4o59ImyOxE8VleSkholPVo3V0F-04flfqTY,37341
100
- fsspec/tests/test_utils.py,sha256=K1cPcMLS_o2NKcOuvNbPaYXCL5mecTFAyVOBgaXN5H8,14064
101
- fsspec/tests/abstract/__init__.py,sha256=i1wcFixV6QhOwdoB24c8oXjzobISNqiKVz9kl2DvAY8,10028
102
- fsspec/tests/abstract/common.py,sha256=1GQwNo5AONzAnzZj0fWgn8NJPLXALehbsuGxS3FzWVU,4973
103
- fsspec/tests/abstract/copy.py,sha256=gU5-d97U3RSde35Vp4RxPY4rWwL744HiSrJ8IBOp9-8,19967
104
- fsspec/tests/abstract/get.py,sha256=vNR4HztvTR7Cj56AMo7_tx7TeYz1Jgr_2Wb8Lv-UiBY,20755
105
- fsspec/tests/abstract/mv.py,sha256=k8eUEBIrRrGMsBY5OOaDXdGnQUKGwDIfQyduB6YD3Ns,1982
106
- fsspec/tests/abstract/put.py,sha256=7aih17OKB_IZZh1Mkq1eBDIjobhtMQmI8x-Pw-S_aZk,21201
107
- fsspec/tests/data/listing.html,sha256=sktoHpvjpAkM9poKlcuO-nIb4ZFlGScTK1IG8Oe79v4,1592
108
- fsspec-2024.5.0.dist-info/METADATA,sha256=J-1w8H3GdQqiQcHSukMpyQIN2gnFl7pDzHG7OrCQ1gY,11626
109
- fsspec-2024.5.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
110
- fsspec-2024.5.0.dist-info/licenses/LICENSE,sha256=LcNUls5TpzB5FcAIqESq1T53K0mzTN0ARFBnaRQH7JQ,1513
111
- fsspec-2024.5.0.dist-info/RECORD,,