fsspec 2024.5.0__py3-none-any.whl → 2024.6.0__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 (73) hide show
  1. fsspec/_version.py +2 -2
  2. fsspec/caching.py +3 -2
  3. fsspec/compression.py +1 -1
  4. fsspec/implementations/cached.py +1 -13
  5. fsspec/implementations/github.py +12 -0
  6. fsspec/implementations/reference.py +6 -0
  7. fsspec/implementations/smb.py +10 -0
  8. fsspec/json.py +81 -0
  9. fsspec/registry.py +24 -18
  10. fsspec/spec.py +76 -34
  11. fsspec/utils.py +1 -1
  12. {fsspec-2024.5.0.dist-info → fsspec-2024.6.0.dist-info}/METADATA +11 -5
  13. fsspec-2024.6.0.dist-info/RECORD +55 -0
  14. fsspec/implementations/tests/__init__.py +0 -0
  15. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_file_listing.yaml +0 -112
  16. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_mkdir.yaml +0 -582
  17. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_pyarrow_non_partitioned.yaml +0 -873
  18. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range.yaml +0 -458
  19. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range_chunked.yaml +0 -1355
  20. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_and_read.yaml +0 -795
  21. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_pyarrow_non_partitioned.yaml +0 -613
  22. fsspec/implementations/tests/conftest.py +0 -39
  23. fsspec/implementations/tests/local/__init__.py +0 -0
  24. fsspec/implementations/tests/local/local_fixtures.py +0 -18
  25. fsspec/implementations/tests/local/local_test.py +0 -14
  26. fsspec/implementations/tests/memory/__init__.py +0 -0
  27. fsspec/implementations/tests/memory/memory_fixtures.py +0 -27
  28. fsspec/implementations/tests/memory/memory_test.py +0 -14
  29. fsspec/implementations/tests/out.zip +0 -0
  30. fsspec/implementations/tests/test_archive.py +0 -382
  31. fsspec/implementations/tests/test_arrow.py +0 -259
  32. fsspec/implementations/tests/test_cached.py +0 -1306
  33. fsspec/implementations/tests/test_common.py +0 -35
  34. fsspec/implementations/tests/test_dask.py +0 -29
  35. fsspec/implementations/tests/test_data.py +0 -20
  36. fsspec/implementations/tests/test_dbfs.py +0 -268
  37. fsspec/implementations/tests/test_dirfs.py +0 -588
  38. fsspec/implementations/tests/test_ftp.py +0 -178
  39. fsspec/implementations/tests/test_git.py +0 -76
  40. fsspec/implementations/tests/test_http.py +0 -577
  41. fsspec/implementations/tests/test_jupyter.py +0 -57
  42. fsspec/implementations/tests/test_libarchive.py +0 -33
  43. fsspec/implementations/tests/test_local.py +0 -1285
  44. fsspec/implementations/tests/test_memory.py +0 -382
  45. fsspec/implementations/tests/test_reference.py +0 -720
  46. fsspec/implementations/tests/test_sftp.py +0 -233
  47. fsspec/implementations/tests/test_smb.py +0 -139
  48. fsspec/implementations/tests/test_tar.py +0 -243
  49. fsspec/implementations/tests/test_webhdfs.py +0 -197
  50. fsspec/implementations/tests/test_zip.py +0 -134
  51. fsspec/tests/__init__.py +0 -0
  52. fsspec/tests/conftest.py +0 -188
  53. fsspec/tests/data/listing.html +0 -1
  54. fsspec/tests/test_api.py +0 -498
  55. fsspec/tests/test_async.py +0 -230
  56. fsspec/tests/test_caches.py +0 -255
  57. fsspec/tests/test_callbacks.py +0 -89
  58. fsspec/tests/test_compression.py +0 -164
  59. fsspec/tests/test_config.py +0 -129
  60. fsspec/tests/test_core.py +0 -466
  61. fsspec/tests/test_downstream.py +0 -40
  62. fsspec/tests/test_file.py +0 -200
  63. fsspec/tests/test_fuse.py +0 -147
  64. fsspec/tests/test_generic.py +0 -90
  65. fsspec/tests/test_gui.py +0 -23
  66. fsspec/tests/test_mapping.py +0 -228
  67. fsspec/tests/test_parquet.py +0 -140
  68. fsspec/tests/test_registry.py +0 -134
  69. fsspec/tests/test_spec.py +0 -1167
  70. fsspec/tests/test_utils.py +0 -478
  71. fsspec-2024.5.0.dist-info/RECORD +0 -111
  72. {fsspec-2024.5.0.dist-info → fsspec-2024.6.0.dist-info}/WHEEL +0 -0
  73. {fsspec-2024.5.0.dist-info → fsspec-2024.6.0.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,,