diff --git a/fsspec/asyn.py b/fsspec/asyn.py index bd022f222..efdac868b 100644 --- a/fsspec/asyn.py +++ b/fsspec/asyn.py @@ -581,7 +581,7 @@ async def _find(self, path, maxdepth=None, withdirs=False, **kwargs): if withdirs: files.update(dirs) out.update({info["name"]: info for name, info in files.items()}) - if (await self._isfile(path)) and path not in out: + if not out and (await self._isfile(path)): # walk works on directories, but find should also return [path] # when path happens to be a file out[path] = {} diff --git a/fsspec/spec.py b/fsspec/spec.py index 02674867b..13a775799 100644 --- a/fsspec/spec.py +++ b/fsspec/spec.py @@ -445,7 +445,7 @@ def find(self, path, maxdepth=None, withdirs=False, **kwargs): if withdirs: files.update(dirs) out.update({info["name"]: info for name, info in files.items()}) - if self.isfile(path) and path not in out: + if not out and self.isfile(path): # walk works on directories, but find should also return [path] # when path happens to be a file out[path] = {} diff --git a/fsspec/tests/test_spec.py b/fsspec/tests/test_spec.py index 3e2af2f4d..74dac81dd 100644 --- a/fsspec/tests/test_spec.py +++ b/fsspec/tests/test_spec.py @@ -232,6 +232,14 @@ def test_find_details(): assert details[filename] == test_fs.info(filename) +def test_find_file(): + test_fs = DummyTestFS() + + filename = "misc/foo.txt" + assert test_fs.find(filename) == [filename] + assert test_fs.find(filename, detail=True) == {filename: {}} + + def test_cache(): fs = DummyTestFS() fs2 = DummyTestFS()