@@ -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