Skip to content

Commit fe09da6

Browse files
authored
Enable info on referenceFS with whole files (#919)
1 parent 0fe49f5 commit fe09da6

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

fsspec/implementations/reference.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,10 @@ def info(self, path, **kwargs):
526526
out0 = [o for o in out if o["name"] == path]
527527
if not out0:
528528
return {"name": path, "type": "directory", "size": 0}
529+
if out0[0]["size"] is None:
530+
# if this is a whole remote file, update size using remote FS
531+
prot, _ = split_protocol(self.references[path][0])
532+
out0[0]["size"] = self.fss[prot].size(self.references[path][0])
529533
return out0[0]
530534

531535
async def _info(self, path, **kwargs): # calls fast sync code

fsspec/implementations/tests/test_reference.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,21 @@ def test_ls(server): # noqa: F811
3737
assert fs.find("", withdirs=True) == ["a", "b", "c", "c/d"]
3838

3939

40+
def test_info(server): # noqa: F811
41+
refs = {
42+
"a": b"data",
43+
"b": (realfile, 0, 5),
44+
"c/d": (realfile, 1, 6),
45+
"e": (realfile,),
46+
}
47+
h = fsspec.filesystem("http", headers={"give_length": "true", "head_ok": "true"})
48+
fs = fsspec.filesystem("reference", fo=refs, fs=h)
49+
assert fs.size("a") == 4
50+
assert fs.size("b") == 5
51+
assert fs.size("c/d") == 6
52+
assert fs.info("e")["size"] == len(data)
53+
54+
4055
def test_defaults(server): # noqa: F811
4156
refs = {"a": b"data", "b": (None, 0, 5)}
4257
fs = fsspec.filesystem(

0 commit comments

Comments
 (0)