fsspec 2024.3.1__py3-none-any.whl → 2024.5.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 (86) hide show
  1. fsspec/__init__.py +2 -3
  2. fsspec/_version.py +14 -19
  3. fsspec/caching.py +83 -14
  4. fsspec/compression.py +1 -0
  5. fsspec/core.py +32 -8
  6. fsspec/exceptions.py +1 -0
  7. fsspec/generic.py +1 -1
  8. fsspec/gui.py +1 -1
  9. fsspec/implementations/arrow.py +0 -2
  10. fsspec/implementations/cache_mapper.py +1 -2
  11. fsspec/implementations/cache_metadata.py +7 -7
  12. fsspec/implementations/dirfs.py +2 -2
  13. fsspec/implementations/http.py +9 -9
  14. fsspec/implementations/local.py +78 -45
  15. fsspec/implementations/memory.py +9 -0
  16. fsspec/implementations/smb.py +3 -1
  17. fsspec/implementations/tests/__init__.py +0 -0
  18. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_file_listing.yaml +112 -0
  19. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_mkdir.yaml +582 -0
  20. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_pyarrow_non_partitioned.yaml +873 -0
  21. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range.yaml +458 -0
  22. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_read_range_chunked.yaml +1355 -0
  23. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_and_read.yaml +795 -0
  24. fsspec/implementations/tests/cassettes/test_dbfs/test_dbfs_write_pyarrow_non_partitioned.yaml +613 -0
  25. fsspec/implementations/tests/conftest.py +39 -0
  26. fsspec/implementations/tests/local/__init__.py +0 -0
  27. fsspec/implementations/tests/local/local_fixtures.py +18 -0
  28. fsspec/implementations/tests/local/local_test.py +14 -0
  29. fsspec/implementations/tests/memory/__init__.py +0 -0
  30. fsspec/implementations/tests/memory/memory_fixtures.py +27 -0
  31. fsspec/implementations/tests/memory/memory_test.py +14 -0
  32. fsspec/implementations/tests/out.zip +0 -0
  33. fsspec/implementations/tests/test_archive.py +382 -0
  34. fsspec/implementations/tests/test_arrow.py +259 -0
  35. fsspec/implementations/tests/test_cached.py +1306 -0
  36. fsspec/implementations/tests/test_common.py +35 -0
  37. fsspec/implementations/tests/test_dask.py +29 -0
  38. fsspec/implementations/tests/test_data.py +20 -0
  39. fsspec/implementations/tests/test_dbfs.py +268 -0
  40. fsspec/implementations/tests/test_dirfs.py +588 -0
  41. fsspec/implementations/tests/test_ftp.py +178 -0
  42. fsspec/implementations/tests/test_git.py +76 -0
  43. fsspec/implementations/tests/test_http.py +577 -0
  44. fsspec/implementations/tests/test_jupyter.py +57 -0
  45. fsspec/implementations/tests/test_libarchive.py +33 -0
  46. fsspec/implementations/tests/test_local.py +1285 -0
  47. fsspec/implementations/tests/test_memory.py +382 -0
  48. fsspec/implementations/tests/test_reference.py +720 -0
  49. fsspec/implementations/tests/test_sftp.py +233 -0
  50. fsspec/implementations/tests/test_smb.py +139 -0
  51. fsspec/implementations/tests/test_tar.py +243 -0
  52. fsspec/implementations/tests/test_webhdfs.py +197 -0
  53. fsspec/implementations/tests/test_zip.py +134 -0
  54. fsspec/implementations/webhdfs.py +1 -3
  55. fsspec/parquet.py +0 -8
  56. fsspec/registry.py +4 -0
  57. fsspec/spec.py +21 -4
  58. fsspec/tests/__init__.py +0 -0
  59. fsspec/tests/abstract/mv.py +57 -0
  60. fsspec/tests/conftest.py +188 -0
  61. fsspec/tests/data/listing.html +1 -0
  62. fsspec/tests/test_api.py +498 -0
  63. fsspec/tests/test_async.py +230 -0
  64. fsspec/tests/test_caches.py +255 -0
  65. fsspec/tests/test_callbacks.py +89 -0
  66. fsspec/tests/test_compression.py +164 -0
  67. fsspec/tests/test_config.py +129 -0
  68. fsspec/tests/test_core.py +466 -0
  69. fsspec/tests/test_downstream.py +40 -0
  70. fsspec/tests/test_file.py +200 -0
  71. fsspec/tests/test_fuse.py +147 -0
  72. fsspec/tests/test_generic.py +90 -0
  73. fsspec/tests/test_gui.py +23 -0
  74. fsspec/tests/test_mapping.py +228 -0
  75. fsspec/tests/test_parquet.py +140 -0
  76. fsspec/tests/test_registry.py +134 -0
  77. fsspec/tests/test_spec.py +1167 -0
  78. fsspec/tests/test_utils.py +478 -0
  79. fsspec/utils.py +0 -2
  80. fsspec-2024.5.0.dist-info/METADATA +273 -0
  81. fsspec-2024.5.0.dist-info/RECORD +111 -0
  82. {fsspec-2024.3.1.dist-info → fsspec-2024.5.0.dist-info}/WHEEL +1 -2
  83. fsspec-2024.3.1.dist-info/METADATA +0 -167
  84. fsspec-2024.3.1.dist-info/RECORD +0 -54
  85. fsspec-2024.3.1.dist-info/top_level.txt +0 -1
  86. {fsspec-2024.3.1.dist-info → fsspec-2024.5.0.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,613 @@
1
+ interactions:
2
+ - request:
3
+ body: '{"path": "/FileStore/pyarrow", "recursive": true}'
4
+ headers:
5
+ Accept:
6
+ - '*/*'
7
+ Accept-Encoding:
8
+ - gzip, deflate
9
+ Connection:
10
+ - keep-alive
11
+ Content-Length:
12
+ - '49'
13
+ Content-Type:
14
+ - application/json
15
+ User-Agent:
16
+ - python-requests/2.31.0
17
+ authorization:
18
+ - DUMMY
19
+ method: POST
20
+ uri: https://my_instance.com/api/2.0/dbfs/delete
21
+ response:
22
+ body:
23
+ string: '{}'
24
+ headers:
25
+ access-control-allow-headers:
26
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
27
+ Content-Type
28
+ access-control-allow-origin:
29
+ - '*'
30
+ cache-control:
31
+ - no-cache, no-store, must-revalidate
32
+ content-length:
33
+ - '2'
34
+ content-type:
35
+ - application/json
36
+ expires:
37
+ - '0'
38
+ pragma:
39
+ - no-cache
40
+ server:
41
+ - databricks
42
+ strict-transport-security:
43
+ - max-age=31536000; includeSubDomains; preload
44
+ x-content-type-options:
45
+ - nosniff
46
+ status:
47
+ code: 200
48
+ message: OK
49
+ - request:
50
+ body: '{"path": "/FileStore/"}'
51
+ headers:
52
+ Accept:
53
+ - '*/*'
54
+ Accept-Encoding:
55
+ - gzip, deflate
56
+ Connection:
57
+ - keep-alive
58
+ Content-Length:
59
+ - '23'
60
+ Content-Type:
61
+ - application/json
62
+ User-Agent:
63
+ - python-requests/2.31.0
64
+ authorization:
65
+ - DUMMY
66
+ method: GET
67
+ uri: https://my_instance.com/api/2.0/dbfs/list
68
+ response:
69
+ body:
70
+ string: !!binary |
71
+ H4sIAAAAAAAEA5ySQW7DIBBF7zJrV4FgBuwD9AJZRpU1DaShtYsFk02j3L3E3saVCsuReO8z/Buc
72
+ w+gz9McbzMQX6GH3WiYHjsnvHDGN9OWhgZAHFxL0nK6+WS4NOfx46EUDU3ThHE7EIX4PHKYylUa0
73
+ ClEs5948g4dpjolfMtNHjQClUKi1aoviueCTUq5IrjvUSlo0m+DyXj/WoNEohZ1Eu4mex8hVZGG1
74
+ bm1ZytY28oWSd8O1GMjVKYzVe/xDwfT+6NL/y7L+pem206+xS/61rlUKKXAvlrq83X8BAAD//wMA
75
+ J0kadvgCAAA=
76
+ headers:
77
+ access-control-allow-headers:
78
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
79
+ Content-Type
80
+ access-control-allow-origin:
81
+ - '*'
82
+ cache-control:
83
+ - no-cache, no-store, must-revalidate
84
+ content-encoding:
85
+ - gzip
86
+ content-type:
87
+ - application/json
88
+ expires:
89
+ - '0'
90
+ pragma:
91
+ - no-cache
92
+ server:
93
+ - databricks
94
+ strict-transport-security:
95
+ - max-age=31536000; includeSubDomains; preload
96
+ transfer-encoding:
97
+ - chunked
98
+ vary:
99
+ - Accept-Encoding
100
+ x-content-type-options:
101
+ - nosniff
102
+ status:
103
+ code: 200
104
+ message: OK
105
+ - request:
106
+ body: '{"path": "/FileStore/pyarrow"}'
107
+ headers:
108
+ Accept:
109
+ - '*/*'
110
+ Accept-Encoding:
111
+ - gzip, deflate
112
+ Connection:
113
+ - keep-alive
114
+ Content-Length:
115
+ - '30'
116
+ Content-Type:
117
+ - application/json
118
+ User-Agent:
119
+ - python-requests/2.31.0
120
+ authorization:
121
+ - DUMMY
122
+ method: GET
123
+ uri: https://my_instance.com/api/2.0/dbfs/list
124
+ response:
125
+ body:
126
+ string: !!binary |
127
+ H4sIAAAAAAAEAxTNsQqDMBCA4Vc5bi66u9YILgaMglsIetqA7ckloCJ9d+P8f/BfSCIsduSJsMBW
128
+ Gd23b2VLrYxtdGfVUJsOX/ilENzymIZh9isBC0xeaIwsJ9DhQwzAP9hc/EBeJWFSoXw7XTrsGf5v
129
+ AAAA//8DANKWfDNsAAAA
130
+ headers:
131
+ access-control-allow-headers:
132
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
133
+ Content-Type
134
+ access-control-allow-origin:
135
+ - '*'
136
+ cache-control:
137
+ - no-cache, no-store, must-revalidate
138
+ content-encoding:
139
+ - gzip
140
+ content-type:
141
+ - application/json
142
+ expires:
143
+ - '0'
144
+ pragma:
145
+ - no-cache
146
+ server:
147
+ - databricks
148
+ strict-transport-security:
149
+ - max-age=31536000; includeSubDomains; preload
150
+ transfer-encoding:
151
+ - chunked
152
+ vary:
153
+ - Accept-Encoding
154
+ x-content-type-options:
155
+ - nosniff
156
+ status:
157
+ code: 404
158
+ message: Not Found
159
+ - request:
160
+ body: '{"path": "/FileStore/pyarrow"}'
161
+ headers:
162
+ Accept:
163
+ - '*/*'
164
+ Accept-Encoding:
165
+ - gzip, deflate
166
+ Connection:
167
+ - keep-alive
168
+ Content-Length:
169
+ - '30'
170
+ Content-Type:
171
+ - application/json
172
+ User-Agent:
173
+ - python-requests/2.31.0
174
+ authorization:
175
+ - DUMMY
176
+ method: GET
177
+ uri: https://my_instance.com/api/2.0/dbfs/list
178
+ response:
179
+ body:
180
+ string: !!binary |
181
+ H4sIAAAAAAAEAxTNsQqDMBCA4Vc5bi66u9YILgaMglsIetqA7ckloCJ9d+P8f/BfSCIsduSJsMBW
182
+ Gd23b2VLrYxtdGfVUJsOX/ilENzymIZh9isBC0xeaIwsJ9DhQwzAP9hc/EBeJWFSoXw7XTrsGf5v
183
+ AAAA//8DANKWfDNsAAAA
184
+ headers:
185
+ access-control-allow-headers:
186
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
187
+ Content-Type
188
+ access-control-allow-origin:
189
+ - '*'
190
+ cache-control:
191
+ - no-cache, no-store, must-revalidate
192
+ content-encoding:
193
+ - gzip
194
+ content-type:
195
+ - application/json
196
+ expires:
197
+ - '0'
198
+ pragma:
199
+ - no-cache
200
+ server:
201
+ - databricks
202
+ strict-transport-security:
203
+ - max-age=31536000; includeSubDomains; preload
204
+ transfer-encoding:
205
+ - chunked
206
+ vary:
207
+ - Accept-Encoding
208
+ x-content-type-options:
209
+ - nosniff
210
+ status:
211
+ code: 404
212
+ message: Not Found
213
+ - request:
214
+ body: '{"path": "/FileStore/pyarrow/diabetes"}'
215
+ headers:
216
+ Accept:
217
+ - '*/*'
218
+ Accept-Encoding:
219
+ - gzip, deflate
220
+ Connection:
221
+ - keep-alive
222
+ Content-Length:
223
+ - '39'
224
+ Content-Type:
225
+ - application/json
226
+ User-Agent:
227
+ - python-requests/2.31.0
228
+ authorization:
229
+ - DUMMY
230
+ method: GET
231
+ uri: https://my_instance.com/api/2.0/dbfs/get-status
232
+ response:
233
+ body:
234
+ string: !!binary |
235
+ H4sIAAAAAAAEAxTNwQrCMAyA4VcJOct696od7LLCOsFbqWumBTUjKeiQvbvd+f/g/yGJsISJE+ER
236
+ B+vdZTjZcHbWh96NwV47P+IBX6Qa77vpGeb8JGCBlIWmwrICfbMWBX7DEssDTFuFr4XMssZ6+JiU
237
+ 440KaYPbHwAA//8DANp4ShR1AAAA
238
+ headers:
239
+ access-control-allow-headers:
240
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
241
+ Content-Type
242
+ access-control-allow-origin:
243
+ - '*'
244
+ cache-control:
245
+ - no-cache, no-store, must-revalidate
246
+ content-encoding:
247
+ - gzip
248
+ content-type:
249
+ - application/json
250
+ expires:
251
+ - '0'
252
+ pragma:
253
+ - no-cache
254
+ server:
255
+ - databricks
256
+ strict-transport-security:
257
+ - max-age=31536000; includeSubDomains; preload
258
+ transfer-encoding:
259
+ - chunked
260
+ vary:
261
+ - Accept-Encoding
262
+ x-content-type-options:
263
+ - nosniff
264
+ status:
265
+ code: 404
266
+ message: Not Found
267
+ - request:
268
+ body: '{"path": "/FileStore/pyarrow/diabetes"}'
269
+ headers:
270
+ Accept:
271
+ - '*/*'
272
+ Accept-Encoding:
273
+ - gzip, deflate
274
+ Connection:
275
+ - keep-alive
276
+ Content-Length:
277
+ - '39'
278
+ Content-Type:
279
+ - application/json
280
+ User-Agent:
281
+ - python-requests/2.31.0
282
+ authorization:
283
+ - DUMMY
284
+ method: POST
285
+ uri: https://my_instance.com/api/2.0/dbfs/mkdirs
286
+ response:
287
+ body:
288
+ string: '{}'
289
+ headers:
290
+ access-control-allow-headers:
291
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
292
+ Content-Type
293
+ access-control-allow-origin:
294
+ - '*'
295
+ cache-control:
296
+ - no-cache, no-store, must-revalidate
297
+ content-length:
298
+ - '2'
299
+ content-type:
300
+ - application/json
301
+ expires:
302
+ - '0'
303
+ pragma:
304
+ - no-cache
305
+ server:
306
+ - databricks
307
+ strict-transport-security:
308
+ - max-age=31536000; includeSubDomains; preload
309
+ x-content-type-options:
310
+ - nosniff
311
+ status:
312
+ code: 200
313
+ message: OK
314
+ - request:
315
+ body: '{"path": "/FileStore/pyarrow/diabetes/eb4363f0872047958f0aee6de36e7e45-0.parquet",
316
+ "overwrite": true}'
317
+ headers:
318
+ Accept:
319
+ - '*/*'
320
+ Accept-Encoding:
321
+ - gzip, deflate
322
+ Connection:
323
+ - keep-alive
324
+ Content-Length:
325
+ - '101'
326
+ Content-Type:
327
+ - application/json
328
+ User-Agent:
329
+ - python-requests/2.31.0
330
+ authorization:
331
+ - DUMMY
332
+ method: POST
333
+ uri: https://my_instance.com/api/2.0/dbfs/create
334
+ response:
335
+ body:
336
+ string: '{"handle":6658121037672594}'
337
+ headers:
338
+ access-control-allow-headers:
339
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
340
+ Content-Type
341
+ access-control-allow-origin:
342
+ - '*'
343
+ cache-control:
344
+ - no-cache, no-store, must-revalidate
345
+ content-length:
346
+ - '27'
347
+ content-type:
348
+ - application/json
349
+ expires:
350
+ - '0'
351
+ pragma:
352
+ - no-cache
353
+ server:
354
+ - databricks
355
+ strict-transport-security:
356
+ - max-age=31536000; includeSubDomains; preload
357
+ x-content-type-options:
358
+ - nosniff
359
+ status:
360
+ code: 200
361
+ message: OK
362
+ - request:
363
+ body: '{"handle": 6658121037672594, "data": "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QWhBQUFBQVlBQUFBQkFBQUFBQUFBQUFIQUFBQVQzVjBZMjl0WlFCUS92Ly9BQUFBQVVBQUFBQ1Uvdi8vQUFBQkFoQUFBQUFVQUFBQUJBQUFBQUFBQUFBREFBQUFRV2RsQUh6Ky8vOEFBQUFCUUFBQUFNRCsvLzhBQUFFREVBQUFBQ3dBQUFBRUFBQUFBQUFBQUJnQUFBQkVhV0ZpWlhSbGMxQmxaR2xuY21WbFJuVnVZM1JwYjI0QUFBQUExdi8vL3dBQUFnQUEvLy8vQUFBQkF4QUFBQUFjQUFBQUJBQUFBQUFBQUFBREFBQUFRazFKQUFBQUJnQUlBQVlBQmdBQUFBQUFBZ0F3Ly8vL0FBQUJBaEFBQUFBWUFBQUFCQUFBQUFBQUFBQUhBQUFBU1c1emRXeHBiZ0FjLy8vL0FBQUFBVUFBQUFCZy8vLy9BQUFCQWhBQUFBQWdBQUFBQkFBQUFBQUFBQUFOQUFBQVUydHBibFJvYVdOcmJtVnpjd0FBQUZULy8vOEFBQUFCUUFBQUFKai8vLzhBQUFFQ0VBQUFBQ0FBQUFBRUFBQUFBQUFBQUEwQUFBQkNiRzl2WkZCeVpYTnpkWEpsQUFBQWpQLy8vd0FBQUFGQUFBQUEwUC8vL3dBQUFRSVFBQUFBR0FBQUFBUUFBQUFBQUFBQUJ3QUFBRWRzZFdOdmMyVUF2UC8vL3dBQUFBRkFBQUFBRUFBVUFBZ0FCZ0FIQUF3QUFBQVFBQkFBQUFBQUFBRUNFQUFBQUNRQUFBQUVBQUFBQUFBQUFBc0FBQUJRY21WbmJtRnVZMmxsY3dBSUFBd0FDQUFIQUFnQUFBQUFBQUFCUUFBQUFBQUFBQUE9ABggcGFycXVldC1jcHAtYXJyb3cgdmVyc2lvbiAxNC4wLjIZnBwAABwAABwAABwAABwAABwAABwAABwAABwAAACuBwAAUEFSMQ=="}'
364
+ headers:
365
+ Accept:
366
+ - '*/*'
367
+ Accept-Encoding:
368
+ - gzip, deflate
369
+ Connection:
370
+ - keep-alive
371
+ Content-Length:
372
+ - '7004'
373
+ Content-Type:
374
+ - application/json
375
+ User-Agent:
376
+ - python-requests/2.31.0
377
+ authorization:
378
+ - DUMMY
379
+ method: POST
380
+ uri: https://my_instance.com/api/2.0/dbfs/add-block
381
+ response:
382
+ body:
383
+ string: '{}'
384
+ headers:
385
+ access-control-allow-headers:
386
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
387
+ Content-Type
388
+ access-control-allow-origin:
389
+ - '*'
390
+ cache-control:
391
+ - no-cache, no-store, must-revalidate
392
+ content-length:
393
+ - '2'
394
+ content-type:
395
+ - application/json
396
+ expires:
397
+ - '0'
398
+ pragma:
399
+ - no-cache
400
+ server:
401
+ - databricks
402
+ strict-transport-security:
403
+ - max-age=31536000; includeSubDomains; preload
404
+ x-content-type-options:
405
+ - nosniff
406
+ status:
407
+ code: 200
408
+ message: OK
409
+ - request:
410
+ body: '{"handle": 6658121037672594}'
411
+ headers:
412
+ Accept:
413
+ - '*/*'
414
+ Accept-Encoding:
415
+ - gzip, deflate
416
+ Connection:
417
+ - keep-alive
418
+ Content-Length:
419
+ - '28'
420
+ Content-Type:
421
+ - application/json
422
+ User-Agent:
423
+ - python-requests/2.31.0
424
+ authorization:
425
+ - DUMMY
426
+ method: POST
427
+ uri: https://my_instance.com/api/2.0/dbfs/close
428
+ response:
429
+ body:
430
+ string: '{}'
431
+ headers:
432
+ access-control-allow-headers:
433
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
434
+ Content-Type
435
+ access-control-allow-origin:
436
+ - '*'
437
+ cache-control:
438
+ - no-cache, no-store, must-revalidate
439
+ content-length:
440
+ - '2'
441
+ content-type:
442
+ - application/json
443
+ expires:
444
+ - '0'
445
+ pragma:
446
+ - no-cache
447
+ server:
448
+ - databricks
449
+ strict-transport-security:
450
+ - max-age=31536000; includeSubDomains; preload
451
+ x-content-type-options:
452
+ - nosniff
453
+ status:
454
+ code: 200
455
+ message: OK
456
+ - request:
457
+ body: '{"path": "/FileStore/pyarrow/diabetes"}'
458
+ headers:
459
+ Accept:
460
+ - '*/*'
461
+ Accept-Encoding:
462
+ - gzip, deflate
463
+ Connection:
464
+ - keep-alive
465
+ Content-Length:
466
+ - '39'
467
+ Content-Type:
468
+ - application/json
469
+ User-Agent:
470
+ - python-requests/2.31.0
471
+ authorization:
472
+ - DUMMY
473
+ method: GET
474
+ uri: https://my_instance.com/api/2.0/dbfs/list
475
+ response:
476
+ body:
477
+ string: !!binary |
478
+ H4sIAAAAAAAEAxzNQQ6CMBBA0bvMGu1AW4o9gBdwaQwpdhonAYptjVHC3SVu/1v8FQKPlMFeV1hc
479
+ eYAFcd7LpcREYvm4lOJbeHYDFcqCBiVbGbAzDSpz0l1AR9R6ki0ZUvqAx8Wl54sKVMC595zABjdm
480
+ qv6jPvOXwOqmqSuYoufAd1c4zn3haYfaoFZdLaVBxO22/QAAAP//AwCy0c1GnwAAAA==
481
+ headers:
482
+ access-control-allow-headers:
483
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
484
+ Content-Type
485
+ access-control-allow-origin:
486
+ - '*'
487
+ cache-control:
488
+ - no-cache, no-store, must-revalidate
489
+ content-encoding:
490
+ - gzip
491
+ content-type:
492
+ - application/json
493
+ expires:
494
+ - '0'
495
+ pragma:
496
+ - no-cache
497
+ server:
498
+ - databricks
499
+ strict-transport-security:
500
+ - max-age=31536000; includeSubDomains; preload
501
+ transfer-encoding:
502
+ - chunked
503
+ vary:
504
+ - Accept-Encoding
505
+ x-content-type-options:
506
+ - nosniff
507
+ status:
508
+ code: 200
509
+ message: OK
510
+ - request:
511
+ body: '{"path": "/FileStore/pyarrow", "recursive": true}'
512
+ headers:
513
+ Accept:
514
+ - '*/*'
515
+ Accept-Encoding:
516
+ - gzip, deflate
517
+ Connection:
518
+ - keep-alive
519
+ Content-Length:
520
+ - '49'
521
+ Content-Type:
522
+ - application/json
523
+ User-Agent:
524
+ - python-requests/2.31.0
525
+ authorization:
526
+ - DUMMY
527
+ method: POST
528
+ uri: https://my_instance.com/api/2.0/dbfs/delete
529
+ response:
530
+ body:
531
+ string: '{}'
532
+ headers:
533
+ access-control-allow-headers:
534
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
535
+ Content-Type
536
+ access-control-allow-origin:
537
+ - '*'
538
+ cache-control:
539
+ - no-cache, no-store, must-revalidate
540
+ content-length:
541
+ - '2'
542
+ content-type:
543
+ - application/json
544
+ expires:
545
+ - '0'
546
+ pragma:
547
+ - no-cache
548
+ server:
549
+ - databricks
550
+ strict-transport-security:
551
+ - max-age=31536000; includeSubDomains; preload
552
+ x-content-type-options:
553
+ - nosniff
554
+ status:
555
+ code: 200
556
+ message: OK
557
+ - request:
558
+ body: '{"path": "/FileStore/"}'
559
+ headers:
560
+ Accept:
561
+ - '*/*'
562
+ Accept-Encoding:
563
+ - gzip, deflate
564
+ Connection:
565
+ - keep-alive
566
+ Content-Length:
567
+ - '23'
568
+ Content-Type:
569
+ - application/json
570
+ User-Agent:
571
+ - python-requests/2.31.0
572
+ authorization:
573
+ - DUMMY
574
+ method: GET
575
+ uri: https://my_instance.com/api/2.0/dbfs/list
576
+ response:
577
+ body:
578
+ string: !!binary |
579
+ H4sIAAAAAAAEA5ySQW7DIBBF7zJrV4FgBuwD9AJZRpU1DaShtYsFk02j3L3E3saVCsuReO8z/Buc
580
+ w+gz9McbzMQX6GH3WiYHjsnvHDGN9OWhgZAHFxL0nK6+WS4NOfx46EUDU3ThHE7EIX4PHKYylUa0
581
+ ClEs5948g4dpjolfMtNHjQClUKi1aoviueCTUq5IrjvUSlo0m+DyXj/WoNEohZ1Eu4mex8hVZGG1
582
+ bm1ZytY28oWSd8O1GMjVKYzVe/xDwfT+6NL/y7L+pem206+xS/61rlUKKXAvlrq83X8BAAD//wMA
583
+ J0kadvgCAAA=
584
+ headers:
585
+ access-control-allow-headers:
586
+ - Authorization, X-Databricks-Azure-Workspace-Resource-Id, X-Databricks-Org-Id,
587
+ Content-Type
588
+ access-control-allow-origin:
589
+ - '*'
590
+ cache-control:
591
+ - no-cache, no-store, must-revalidate
592
+ content-encoding:
593
+ - gzip
594
+ content-type:
595
+ - application/json
596
+ expires:
597
+ - '0'
598
+ pragma:
599
+ - no-cache
600
+ server:
601
+ - databricks
602
+ strict-transport-security:
603
+ - max-age=31536000; includeSubDomains; preload
604
+ transfer-encoding:
605
+ - chunked
606
+ vary:
607
+ - Accept-Encoding
608
+ x-content-type-options:
609
+ - nosniff
610
+ status:
611
+ code: 200
612
+ message: OK
613
+ version: 1
@@ -0,0 +1,39 @@
1
+ import tempfile
2
+
3
+ import pytest
4
+
5
+ from fsspec.implementations.arrow import ArrowFSWrapper
6
+ from fsspec.implementations.local import LocalFileSystem
7
+ from fsspec.implementations.memory import MemoryFileSystem
8
+
9
+ # A dummy filesystem that has a list of protocols
10
+
11
+
12
+ class MultiProtocolFileSystem(LocalFileSystem):
13
+ protocol = ["file", "other"]
14
+
15
+
16
+ FILESYSTEMS = {
17
+ "local": LocalFileSystem,
18
+ "multi": MultiProtocolFileSystem,
19
+ "memory": MemoryFileSystem,
20
+ }
21
+
22
+ READ_ONLY_FILESYSTEMS = []
23
+
24
+
25
+ @pytest.fixture(scope="function")
26
+ def fs(request):
27
+ pyarrow_fs = pytest.importorskip("pyarrow.fs")
28
+ FileSystem = pyarrow_fs.FileSystem
29
+ if request.param == "arrow":
30
+ fs = ArrowFSWrapper(FileSystem.from_uri("file:///")[0])
31
+ return fs
32
+ cls = FILESYSTEMS[request.param]
33
+ return cls()
34
+
35
+
36
+ @pytest.fixture(scope="function")
37
+ def temp_file():
38
+ with tempfile.TemporaryDirectory() as temp_dir:
39
+ return temp_dir + "test-file"
File without changes
@@ -0,0 +1,18 @@
1
+ import pytest
2
+
3
+ from fsspec.implementations.local import LocalFileSystem, make_path_posix
4
+ from fsspec.tests.abstract import AbstractFixtures
5
+
6
+
7
+ class LocalFixtures(AbstractFixtures):
8
+ @pytest.fixture(scope="class")
9
+ def fs(self):
10
+ return LocalFileSystem(auto_mkdir=True)
11
+
12
+ @pytest.fixture
13
+ def fs_path(self, tmpdir):
14
+ return str(tmpdir)
15
+
16
+ @pytest.fixture
17
+ def fs_sanitize_path(self):
18
+ return make_path_posix
@@ -0,0 +1,14 @@
1
+ import fsspec.tests.abstract as abstract
2
+ from fsspec.implementations.tests.local.local_fixtures import LocalFixtures
3
+
4
+
5
+ class TestLocalCopy(abstract.AbstractCopyTests, LocalFixtures):
6
+ pass
7
+
8
+
9
+ class TestLocalGet(abstract.AbstractGetTests, LocalFixtures):
10
+ pass
11
+
12
+
13
+ class TestLocalPut(abstract.AbstractPutTests, LocalFixtures):
14
+ pass
File without changes