From ddaed8a57675d6aaeba55a622994c1939fdf3fda Mon Sep 17 00:00:00 2001 From: Adam Radomski Date: Tue, 9 Oct 2018 11:03:34 +0200 Subject: [PATCH] Fixed ls with asterisk calls --- gsutilwrap/__init__.py | 15 ++++++++++++++- tests/live_test.py | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/gsutilwrap/__init__.py b/gsutilwrap/__init__.py index 1539218..69294cd 100644 --- a/gsutilwrap/__init__.py +++ b/gsutilwrap/__init__.py @@ -36,7 +36,20 @@ def ls(pattern: str, dont_recurse: bool = False) -> List[str]: # pylint: disabl return [] if proc.returncode == 0: - return [line.strip() for line in out.split('\n') if line.strip() != ''] + lines = [] # type: List[str] + for line in out.split('\n'): + line = line.strip() + + # empty line + if line == '': + continue + + # subdirectory matching resolved wildcard * + if line.endswith('/:'): + continue + + lines.append(line) + return lines raise RuntimeError("gsutil failed: command was: {!r}\n, stderr:\n{}".format(" ".join( [shlex.quote(part) for part in cmd]), err)) diff --git a/tests/live_test.py b/tests/live_test.py index b0ad0e4..b223c5b 100755 --- a/tests/live_test.py +++ b/tests/live_test.py @@ -101,6 +101,24 @@ def test_long_ls(self) -> None: if len(gsutilwrap.ls(pattern=base_url)) > 0: gsutilwrap.remove(pattern=base_url, quiet=True, multithreaded=True, recursive=True) + def test_ls_with_asterisk(self) -> None: + quiet = False + + base_url = "{}/{}".format(TEST_GSUTILWRAP_URL_PREFIX, uuid.uuid4()) + + urls = ['{}/d1/one.txt'.format(base_url), '{}/d2/two.txt'.format(base_url)] + try: + for url in urls: + gsutilwrap.write_text(url=url, text="some dummy content", quiet=quiet) + + self.assertEqual(2, len(gsutilwrap.ls(pattern='{}/d*'.format(base_url)))) + + listed_urls = gsutilwrap.ls(pattern='{}/d*'.format(base_url)) + self.assertListEqual(urls, listed_urls) + finally: + if len(gsutilwrap.ls(pattern=base_url)) > 0: + gsutilwrap.remove(pattern=base_url, quiet=True, multithreaded=True, recursive=True) + def test_write_read_text(self) -> None: quiet = True