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.
- fsspec/_version.py +2 -2
- fsspec/caching.py +3 -2
- fsspec/compression.py +1 -1
- fsspec/implementations/cached.py +1 -13
- fsspec/implementations/github.py +12 -0
- fsspec/implementations/reference.py +6 -0
- fsspec/implementations/smb.py +10 -0
- fsspec/json.py +81 -0
- fsspec/registry.py +24 -18
- fsspec/spec.py +76 -34
- fsspec/utils.py +1 -1
- {fsspec-2024.5.0.dist-info → fsspec-2024.6.0.dist-info}/METADATA +11 -5
- fsspec-2024.6.0.dist-info/RECORD +55 -0
- fsspec/implementations/tests/__init__.py +0 -0
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_file_listing.yaml +0 -112
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_mkdir.yaml +0 -582
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_pyarrow_non_partitioned.yaml +0 -873
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range.yaml +0 -458
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range_chunked.yaml +0 -1355
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_and_read.yaml +0 -795
- fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_pyarrow_non_partitioned.yaml +0 -613
- fsspec/implementations/tests/conftest.py +0 -39
- fsspec/implementations/tests/local/__init__.py +0 -0
- fsspec/implementations/tests/local/local_fixtures.py +0 -18
- fsspec/implementations/tests/local/local_test.py +0 -14
- fsspec/implementations/tests/memory/__init__.py +0 -0
- fsspec/implementations/tests/memory/memory_fixtures.py +0 -27
- fsspec/implementations/tests/memory/memory_test.py +0 -14
- fsspec/implementations/tests/out.zip +0 -0
- fsspec/implementations/tests/test_archive.py +0 -382
- fsspec/implementations/tests/test_arrow.py +0 -259
- fsspec/implementations/tests/test_cached.py +0 -1306
- fsspec/implementations/tests/test_common.py +0 -35
- fsspec/implementations/tests/test_dask.py +0 -29
- fsspec/implementations/tests/test_data.py +0 -20
- fsspec/implementations/tests/test_dbfs.py +0 -268
- fsspec/implementations/tests/test_dirfs.py +0 -588
- fsspec/implementations/tests/test_ftp.py +0 -178
- fsspec/implementations/tests/test_git.py +0 -76
- fsspec/implementations/tests/test_http.py +0 -577
- fsspec/implementations/tests/test_jupyter.py +0 -57
- fsspec/implementations/tests/test_libarchive.py +0 -33
- fsspec/implementations/tests/test_local.py +0 -1285
- fsspec/implementations/tests/test_memory.py +0 -382
- fsspec/implementations/tests/test_reference.py +0 -720
- fsspec/implementations/tests/test_sftp.py +0 -233
- fsspec/implementations/tests/test_smb.py +0 -139
- fsspec/implementations/tests/test_tar.py +0 -243
- fsspec/implementations/tests/test_webhdfs.py +0 -197
- fsspec/implementations/tests/test_zip.py +0 -134
- fsspec/tests/__init__.py +0 -0
- fsspec/tests/conftest.py +0 -188
- fsspec/tests/data/listing.html +0 -1
- fsspec/tests/test_api.py +0 -498
- fsspec/tests/test_async.py +0 -230
- fsspec/tests/test_caches.py +0 -255
- fsspec/tests/test_callbacks.py +0 -89
- fsspec/tests/test_compression.py +0 -164
- fsspec/tests/test_config.py +0 -129
- fsspec/tests/test_core.py +0 -466
- fsspec/tests/test_downstream.py +0 -40
- fsspec/tests/test_file.py +0 -200
- fsspec/tests/test_fuse.py +0 -147
- fsspec/tests/test_generic.py +0 -90
- fsspec/tests/test_gui.py +0 -23
- fsspec/tests/test_mapping.py +0 -228
- fsspec/tests/test_parquet.py +0 -140
- fsspec/tests/test_registry.py +0 -134
- fsspec/tests/test_spec.py +0 -1167
- fsspec/tests/test_utils.py +0 -478
- fsspec-2024.5.0.dist-info/RECORD +0 -111
- {fsspec-2024.5.0.dist-info → fsspec-2024.6.0.dist-info}/WHEEL +0 -0
- {fsspec-2024.5.0.dist-info → fsspec-2024.6.0.dist-info}/licenses/LICENSE +0 -0
fsspec/tests/test_utils.py
DELETED
|
@@ -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
|
fsspec-2024.5.0.dist-info/RECORD
DELETED
|
@@ -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,,
|
|
File without changes
|
|
File without changes
|