Skip to content

Commit 2273516

Browse files
committed
zip fix
1 parent 7aa51be commit 2273516

1 file changed

Lines changed: 39 additions & 27 deletions

File tree

fs/zipfs.py

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -224,33 +224,45 @@ def getinfo(self, path, namespaces=None):
224224
else:
225225
basic_info = self._directory.getinfo(_path)
226226
zip_name = self._path_to_zip_name(path)
227-
zip_info = self._zip.getinfo(zip_name)
228-
modified_epoch = datetime_to_epoch(
229-
datetime(*zip_info.date_time)
230-
)
231-
raw_zip_info = {
232-
k: getattr(zip_info, k)
233-
for k in dir(zip_info)
234-
if not k.startswith('_') and not callable(getattr(zip_info, k))
235-
}
236-
raw_info = {
237-
"basic":
238-
{
239-
"name": basic_info.name,
240-
"is_dir": basic_info.is_dir,
241-
},
242-
"details":
243-
{
244-
"size": zip_info.file_size,
245-
"type": int(
246-
ResourceType.directory
247-
if basic_info.is_dir else
248-
ResourceType.file
249-
),
250-
"modified": modified_epoch
251-
},
252-
"zip": raw_zip_info
253-
}
227+
try:
228+
zip_info = self._zip.getinfo(zip_name)
229+
except KeyError:
230+
# Can occur if there is an implied directory in the zip
231+
raw_info = {
232+
"basic":
233+
{
234+
"name": basic_info.name,
235+
"is_dir": basic_info.is_dir
236+
}
237+
}
238+
else:
239+
modified_epoch = datetime_to_epoch(
240+
datetime(*zip_info.date_time)
241+
)
242+
raw_zip_info = {
243+
k: getattr(zip_info, k)
244+
for k in dir(zip_info)
245+
if (not k.startswith('_') and
246+
not callable(getattr(zip_info, k)))
247+
}
248+
raw_info = {
249+
"basic":
250+
{
251+
"name": basic_info.name,
252+
"is_dir": basic_info.is_dir,
253+
},
254+
"details":
255+
{
256+
"size": zip_info.file_size,
257+
"type": int(
258+
ResourceType.directory
259+
if basic_info.is_dir else
260+
ResourceType.file
261+
),
262+
"modified": modified_epoch
263+
},
264+
"zip": raw_zip_info
265+
}
254266

255267
return Info(raw_info)
256268

0 commit comments

Comments
 (0)