From 5706f690e7d1b25ecb916112cfbc8f7c6c61b40c Mon Sep 17 00:00:00 2001 From: Dima Gerasimov Date: Sun, 3 May 2020 16:52:09 +0100 Subject: [PATCH] support implicit globs! --- my/common.py | 11 ++++++++--- tests/common.py | 34 +++++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/my/common.py b/my/common.py index 24dd0ce..a2c85cc 100644 --- a/my/common.py +++ b/my/common.py @@ -1,3 +1,4 @@ +from glob import glob as do_glob from pathlib import Path import functools import types @@ -126,9 +127,13 @@ def get_files(pp: Paths, glob: str='*', sort: bool=True) -> Tuple[Path, ...]: gp: Iterable[Path] = src.glob(glob) paths.extend(gp) else: - assert src.is_file(), src - # TODO FIXME assert matches glob?? - paths.append(src) + ss = str(src) + if '*' in ss: + paths.extend(map(Path, do_glob(ss))) + else: + assert src.is_file(), src + # todo assert matches glob?? + paths.append(src) if sort: paths = list(sorted(paths)) diff --git a/tests/common.py b/tests/common.py index 4daa0fb..2d4abcf 100644 --- a/tests/common.py +++ b/tests/common.py @@ -51,9 +51,9 @@ def test_multiple_files(): ) -def test_glob(): +def test_explicit_glob(): ''' - You can pass a blog to restrict the extensions + You can pass a glob to restrict the extensions ''' create('/tmp/hpi_test/file_3.zip') @@ -61,15 +61,39 @@ def test_glob(): create('/tmp/hpi_test/ignoreme') create('/tmp/hpi_test/file.zip') - assert get_files('/tmp/hpi_test', 'file_*.zip') == ( + # todo walrus operator would be great here... + expected = ( Path('/tmp/hpi_test/file_2.zip'), Path('/tmp/hpi_test/file_3.zip'), ) + assert get_files('/tmp/hpi_test', 'file_*.zip') == expected - # named argument should work too - assert len(get_files('/tmp/hpi_test', glob='file_*.zip')) > 0 + "named argument should work too" + assert get_files('/tmp/hpi_test', glob='file_*.zip') == expected +def test_implicit_blog(): + ''' + Asterisc in the path results in globing too. + ''' + # todo hopefully that makes sense? dunno why would anyone actually rely on asteriscs in names.. + # this is very convenient in configs, so people don't have to use some special types + + create('/tmp/hpi_test/123/') + create('/tmp/hpi_test/123/dummy') + create('/tmp/hpi_test/123/file.zip') + create('/tmp/hpi_test/456/') + create('/tmp/hpi_test/456/dummy') + create('/tmp/hpi_test/456/file.zip') + + assert get_files(['/tmp/hpi_test/*/*.zip']) == ( + Path('/tmp/hpi_test/123/file.zip'), + Path('/tmp/hpi_test/456/file.zip'), + ) + +# TODO not sure if should uniquify if the filenames end up same? +# TODO not sure about the symlinks? and hidden files? + test_path = Path('/tmp/hpi_test') def setup(): teardown()