Skip to content

Commit 5d68d27

Browse files
authored
Fix zip-glob for files made by CLI (#1454)
1 parent 51027de commit 5d68d27

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

fsspec/archive.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ def ls(self, path, detail=True, **kwargs):
6666
if ppath not in paths:
6767
out = {"name": ppath, "size": 0, "type": "directory"}
6868
paths[ppath] = out
69-
out = sorted(paths.values(), key=lambda _: _["name"])
7069
if detail:
70+
out = sorted(paths.values(), key=lambda _: _["name"])
7171
return out
7272
else:
73-
return [f["name"] for f in out]
73+
return sorted(paths)

fsspec/implementations/tests/out.zip

313 Bytes
Binary file not shown.

fsspec/implementations/tests/test_zip.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import collections.abc
2+
import os.path
23

34
import pytest
45

@@ -95,6 +96,17 @@ def test_zip_glob_star(m):
9596
outfiles = fs.glob("*")
9697
assert len(outfiles) == 1
9798

99+
fs = fsspec.filesystem("zip", fo="memory://out.zip", mode="w")
100+
fs.mkdir("adir")
101+
fs.pipe("adir/afile", b"data")
102+
outfiles = fs.glob("*")
103+
assert len(outfiles) == 1
104+
105+
fn = f"{os.path.dirname(os.path.abspath((__file__)))}/out.zip"
106+
fs = fsspec.filesystem("zip", fo=fn, mode="r")
107+
outfiles = fs.glob("*")
108+
assert len(outfiles) == 1
109+
98110

99111
def test_append(m, tmpdir):
100112
fs = fsspec.filesystem("zip", fo="memory://out.zip", mode="w")

fsspec/implementations/zip.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,18 @@ def _get_dirs(self):
8787
# not read from the file.
8888
files = self.zip.infolist()
8989
self.dir_cache = {
90-
dirname: {"name": dirname, "size": 0, "type": "directory"}
90+
dirname.rstrip("/"): {
91+
"name": dirname.rstrip("/"),
92+
"size": 0,
93+
"type": "directory",
94+
}
9195
for dirname in self._all_dirnames(self.zip.namelist())
9296
}
9397
for z in files:
9498
f = {s: getattr(z, s, None) for s in zipfile.ZipInfo.__slots__}
9599
f.update(
96100
{
97-
"name": z.filename,
101+
"name": z.filename.rstrip("/"),
98102
"size": z.file_size,
99103
"type": ("directory" if z.is_dir() else "file"),
100104
}

0 commit comments

Comments
 (0)