Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

LocalStore.head() fails for existing local folders in Windows - making FsspecStore.exists(), FsspecStore.rm() fail too #555

Open
@keen85

Description

Hi,
I noticed the following bug when working with local Windows URL-style paths:

✅ works fine

import fsspec
fs_fsspec = fsspec.filesystem("file")
fs_fsspec.exists("C:/dev/some.txt") # ✅ file does actually exist
fs_fsspec.exists("C:/dev/foo.txt") # ✅ file does not actually exist
fs_fsspec.exists("C:/dev/tmp") # ✅ folder does not actually exist
fs_fsspec.exists("C:/dev") # ✅ folder does actually exist

❌ fails

from obstore.fsspec import FsspecStore
fs_fsspecstore = FsspecStore("file")
fs_fsspecstore.exists("C:/dev/some.txt") # ✅ file does actually exist
fs_fsspecstore.exists("C:/dev/foo.txt") # ✅ file does not actually exist
fs_fsspecstore.exists("C:/dev/tmp") # ✅ folder does not actually exist
fs_fsspecstore.exists("C:/dev") # ❌ folder does actually exist
---------------------------------------------------------------------------
GenericError Traceback (most recent call last)
Cell In[28], line 5
 3 fs_fsspecstore.exists("C:/dev/foo.txt") # file does not actually exist
 4 fs_fsspecstore.exists("C:/dev/tmp") # folder does nor actually exist
----> 5 fs_fsspecstore.exists("C:/dev") # folder does actually exist
File c:\Users\...\.venv\lib\site-packages\fsspec\asyn.py:118, in sync_wrapper.<locals>.wrapper(*args, **kwargs)
 115 @functools.wraps(func)
 116 def wrapper(*args, **kwargs):
 117 self = obj or args[0]
--> 118 return sync(self.loop, func, *args, **kwargs)
File c:\Users\...\.venv\lib\site-packages\fsspec\asyn.py:103, in sync(loop, func, timeout, *args, **kwargs)
 101 raise FSTimeoutError from return_result
 102 elif isinstance(return_result, BaseException):
--> 103 raise return_result
 104 else:
 105 return return_result
File c:\Users\...\.venv\lib\site-packages\fsspec\asyn.py:56, in _runner(event, coro, result, timeout)
 54 coro = asyncio.wait_for(coro, timeout=timeout)
 55 try:
---> 56 result[0] = await coro
 57 except Exception as ex:
 58 result[0] = ex
File c:\Users\...\.venv\lib\site-packages\fsspec\asyn.py:695, in AsyncFileSystem._exists(self, path, **kwargs)
 693 async def _exists(self, path, **kwargs):
 694 try:
--> 695 await self._info(path, **kwargs)
 696 return True
 697 except FileNotFoundError:
File c:\Users\...\.venv\lib\site-packages\obstore\fsspec.py:503, in FsspecStore._info(self, path, **_kwargs)
 500 store = self._construct_store(bucket)
 502 try:
--> 503 head = await obs.head_async(store, path_no_bucket)
 504 return {
 505 # Required of `info`: (?)
 506 "name": head["path"],
 (...)
 512 "version": head["version"],
 513 }
 514 except FileNotFoundError:
GenericError: Generic LocalFileSystem error: Unable to open file C:\dev: Zugriff verweigert (os error 5)
Debug source:
Generic {
 store: "LocalFileSystem",
 source: UnableToOpenFile {
 source: Os {
 code: 5,
 kind: PermissionDenied,
 message: "Zugriff verweigert",
 },
 path: "C:\\dev",
 },
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /