From ad328123c9a1b7b9cc882c2383383c9b1a1dd309 Mon Sep 17 00:00:00 2001 From: James Schadt Date: Thu, 24 Aug 2023 14:34:38 -0400 Subject: [PATCH] added refresh flag to ls (#556) --------- Co-authored-by: Martin Durant Co-authored-by: Martin Durant --- gcsfs/core.py | 6 +++++- gcsfs/tests/test_core.py | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcsfs/core.py b/gcsfs/core.py index a9754196..4fc20fae 100644 --- a/gcsfs/core.py +++ b/gcsfs/core.py @@ -1001,10 +1001,14 @@ async def _glob(self, path, prefix="", **kwargs): prefix = path[:ind].split("/")[-1] return await super()._glob(path, prefix=prefix, **kwargs) - async def _ls(self, path, detail=False, prefix="", versions=False, **kwargs): + async def _ls( + self, path, detail=False, prefix="", versions=False, refresh=False, **kwargs + ): """List objects under the given '/{bucket}/{prefix} path.""" path = self._strip_protocol(path).rstrip("/") + if refresh: + self.invalidate_cache(path) if path in ["/", ""]: out = await self._list_buckets() else: diff --git a/gcsfs/tests/test_core.py b/gcsfs/tests/test_core.py index 69ff0e30..aa643340 100644 --- a/gcsfs/tests/test_core.py +++ b/gcsfs/tests/test_core.py @@ -270,6 +270,13 @@ def test_ls_detail(gcs): assert all(isinstance(item, dict) for item in L) +@pytest.mark.parametrize("refresh", (False, True)) +def test_ls_refresh(gcs, refresh): + with mock.patch.object(gcs, "invalidate_cache") as mock_invalidate_cache: + gcs.ls(TEST_BUCKET, refresh=refresh) + assert mock_invalidate_cache.called is refresh + + def test_gcs_glob(gcs): fn = TEST_BUCKET + "/nested/file1" assert fn not in gcs.glob(TEST_BUCKET + "/")