@@ -221,6 +221,7 @@ def cat_file(self, path, start=None, end=None, **kwargs):
221
221
part_or_url , start0 , end0 = self ._cat_common (path )
222
222
if isinstance (part_or_url , bytes ):
223
223
return part_or_url [start :end ]
224
+ # TODO: update start0, end0 if start/end given, instead of slicing
224
225
return self .fs .cat_file (part_or_url , start = start0 , end = end0 )[start :end ]
225
226
226
227
def pipe_file (self , path , value , ** _ ):
@@ -279,7 +280,6 @@ def _render_jinja(url):
279
280
280
281
if self .templates :
281
282
self .df ["url" ] = self .df ["url" ].map (_render_jinja )
282
- self ._dircache_from_items ()
283
283
284
284
def _process_references (self , references , template_overrides = None ):
285
285
if isinstance (references , (str , bytes )):
@@ -293,7 +293,6 @@ def _process_references(self, references, template_overrides=None):
293
293
raise ValueError (f"Unknown reference spec version: { vers } " )
294
294
# TODO: we make dircache by iterating over all entries, but for Spec >= 1,
295
295
# can replace with programmatic. Is it even needed for mapper interface?
296
- self ._dircache_from_items ()
297
296
298
297
def _process_references0 (self , references ):
299
298
"""Make reference dict for Spec Version 0"""
@@ -320,7 +319,7 @@ def _render_jinja(u):
320
319
if v .startswith ("base64:" ):
321
320
self .references [k ] = base64 .b64decode (v [7 :])
322
321
self .references [k ] = v
323
- else :
322
+ elif self . templates :
324
323
u = v [0 ]
325
324
if "{{" in u :
326
325
if self .simple_templates :
@@ -332,6 +331,8 @@ def _render_jinja(u):
332
331
else :
333
332
u = _render_jinja (u )
334
333
self .references [k ] = [u ] if len (v ) == 1 else [u , v [1 ], v [2 ]]
334
+ else :
335
+ self .references [k ] = v
335
336
self .references .update (self ._process_gen (references .get ("gen" , [])))
336
337
337
338
def _process_templates (self , tmp ):
@@ -422,6 +423,8 @@ def open(self, path, mode="rb", block_size=None, cache_options=None, **kwargs):
422
423
423
424
def ls (self , path , detail = True , ** kwargs ):
424
425
path = self ._strip_protocol (path )
426
+ if not self .dircache :
427
+ self ._dircache_from_items ()
425
428
out = self ._ls_from_cache (path )
426
429
if out is None :
427
430
raise FileNotFoundError
@@ -430,16 +433,13 @@ def ls(self, path, detail=True, **kwargs):
430
433
return [o ["name" ] for o in out ]
431
434
432
435
def exists (self , path , ** kwargs ): # overwrite auto-sync version
433
- try :
434
- return self ._ls_from_cache (path ) is not None
435
- except FileNotFoundError :
436
- return False
436
+ return self .isdir (path ) or self .isfile (path )
437
437
438
438
def isdir (self , path ): # overwrite auto-sync version
439
- return self . exists ( path ) and self .info ( path )[ "type" ] == "directory"
439
+ return path in self .dircache
440
440
441
441
def isfile (self , path ): # overwrite auto-sync version
442
- return self . exists ( path ) and self .info ( path )[ "type" ] == "file"
442
+ return path in self .references
443
443
444
444
async def _ls (self , path , detail = True , ** kwargs ): # calls fast sync code
445
445
return self .ls (path , detail , ** kwargs )
0 commit comments