From 541ad0c7ec233ce8eca9fbbe8b10d267e27da120 Mon Sep 17 00:00:00 2001 From: daavoo Date: Thu, 15 Jun 2023 01:26:26 +0200 Subject: [PATCH 1/5] GDriveFileSystem: Raise `FIleNotFoundError` on `ls`. Per https://github.com/iterative/dvc/issues/9607 --- pydrive2/fs/spec.py | 2 +- pydrive2/test/test_fs.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pydrive2/fs/spec.py b/pydrive2/fs/spec.py index 88f16150..de1601c7 100644 --- a/pydrive2/fs/spec.py +++ b/pydrive2/fs/spec.py @@ -434,7 +434,7 @@ def ls(self, path, detail=False): dir_ids = self._path_to_item_ids(base) if not dir_ids: - return None + raise FileNotFoundError root_path = posixpath.join(bucket, base) contents = [] diff --git a/pydrive2/test/test_fs.py b/pydrive2/test/test_fs.py index cc1c4faa..227dcfd5 100644 --- a/pydrive2/test/test_fs.py +++ b/pydrive2/test/test_fs.py @@ -138,6 +138,11 @@ def by_name(details): assert dirs == expected +def test_ls_non_existing_dir(fs, remote_dir): + with pytest.raises(FileNotFoundError): + fs.ls(remote_dir + "dir/") + + def test_find(fs, remote_dir): fs.mkdir(remote_dir + "/dir") From e2ad296bd7ddfcd60830ea495c8f96b99f3be049 Mon Sep 17 00:00:00 2001 From: David de la Iglesia Castro Date: Thu, 15 Jun 2023 13:17:46 +0200 Subject: [PATCH 2/5] Update pydrive2/fs/spec.py Co-authored-by: Ruslan Kuprieiev --- pydrive2/fs/spec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydrive2/fs/spec.py b/pydrive2/fs/spec.py index de1601c7..a8e5b520 100644 --- a/pydrive2/fs/spec.py +++ b/pydrive2/fs/spec.py @@ -434,7 +434,7 @@ def ls(self, path, detail=False): dir_ids = self._path_to_item_ids(base) if not dir_ids: - raise FileNotFoundError + raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), path) root_path = posixpath.join(bucket, base) contents = [] From 6f68fd688d371b482376c4dedd7834b31c13e521 Mon Sep 17 00:00:00 2001 From: daavoo Date: Thu, 15 Jun 2023 01:37:55 +0200 Subject: [PATCH 3/5] black --- pydrive2/fs/spec.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pydrive2/fs/spec.py b/pydrive2/fs/spec.py index a8e5b520..997b0a5e 100644 --- a/pydrive2/fs/spec.py +++ b/pydrive2/fs/spec.py @@ -434,7 +434,9 @@ def ls(self, path, detail=False): dir_ids = self._path_to_item_ids(base) if not dir_ids: - raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), path) + raise FileNotFoundError( + errno.ENOENT, os.strerror(errno.ENOENT), path + ) root_path = posixpath.join(bucket, base) contents = [] From 5563128df3ae7bc5a6f7b21e7b4bfa83d5974c5c Mon Sep 17 00:00:00 2001 From: skshetry <18718008+skshetry@users.noreply.github.com> Date: Thu, 15 Jun 2023 18:12:40 +0545 Subject: [PATCH 4/5] Test for empty dir in ls (#284) --- pydrive2/test/test_fs.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pydrive2/test/test_fs.py b/pydrive2/test/test_fs.py index 227dcfd5..06fee43d 100644 --- a/pydrive2/test/test_fs.py +++ b/pydrive2/test/test_fs.py @@ -118,6 +118,7 @@ def test_rm(fs, remote_dir): def test_ls(fs, remote_dir): fs.mkdir(remote_dir + "dir/") + assert fs.ls(remote_dir + "dir/") == [] files = set() for no in range(8): file = remote_dir + f"dir/test_{no}" From 8181bc68f30e534812bba175a0e784cea8f6cd58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Saugat=20Pachhai=20=28=E0=A4=B8=E0=A5=8C=E0=A4=97=E0=A4=BE?= =?UTF-8?q?=E0=A4=A4=29?= Date: Fri, 16 Jun 2023 11:50:59 +0545 Subject: [PATCH 5/5] test_ls: create dir mkdir in GDriveFileSystem is a noop. --- pydrive2/test/test_fs.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pydrive2/test/test_fs.py b/pydrive2/test/test_fs.py index 06fee43d..c895846f 100644 --- a/pydrive2/test/test_fs.py +++ b/pydrive2/test/test_fs.py @@ -116,9 +116,11 @@ def test_rm(fs, remote_dir): assert not fs.exists(remote_dir + "/dir/c/a") -def test_ls(fs, remote_dir): - fs.mkdir(remote_dir + "dir/") +def test_ls(fs: GDriveFileSystem, remote_dir): + _, base = fs.split_path(remote_dir + "dir/") + fs._path_to_item_ids(base, create=True) assert fs.ls(remote_dir + "dir/") == [] + files = set() for no in range(8): file = remote_dir + f"dir/test_{no}"