From e9a4a050e590dce739704e56a55a4764e538f7cf Mon Sep 17 00:00:00 2001 From: alyiwang Date: Mon, 16 Dec 2024 11:58:00 -0800 Subject: [PATCH] use relative path --- metaphor/looker/README.md | 6 +++--- metaphor/looker/lookml_parser.py | 9 ++++++--- tests/looker/test_lookml_parser.py | 12 +++++++++++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/metaphor/looker/README.md b/metaphor/looker/README.md index 0a41e1de..d225e492 100644 --- a/metaphor/looker/README.md +++ b/metaphor/looker/README.md @@ -102,12 +102,12 @@ alternative_base_url: // e.g. https://looker.my_company.com #### Ignored Model Files -You can also specify a list of model files to ignore by using the following config: +You can also specify a list of model files to ignore by using the following config. The pattern is matched against the relative path of the model file from the project base directory. ```yaml ignored_model_files: - - "/foo/bar/model1.model.lkml" - - "/abc/tmp*/*" + - "model1.model.lkml" + - "tmp/*" ``` #### SSL Verification diff --git a/metaphor/looker/lookml_parser.py b/metaphor/looker/lookml_parser.py index b0cb0bfa..fad3676f 100644 --- a/metaphor/looker/lookml_parser.py +++ b/metaphor/looker/lookml_parser.py @@ -612,10 +612,13 @@ def _load_model( return raw_model, entity_urls, connection -def _is_ignored_model_file(model_path: str, ignored_model_files: List[str]) -> bool: +def _is_ignored_model_file( + model_path: str, base_dir: str, ignored_model_files: List[str] +) -> bool: """Check if the model file is ignored by the config""" + relative_path = os.path.relpath(model_path, base_dir) for ignored_model_file in ignored_model_files: - if fnmatch(model_path, ignored_model_file): + if fnmatch(relative_path, ignored_model_file): return True return False @@ -636,7 +639,7 @@ def parse_project( virtual_views = [] for model_path in glob.glob(f"{base_dir}/**/*.model.lkml", recursive=True): - if _is_ignored_model_file(model_path, ignored_model_files): + if _is_ignored_model_file(model_path, base_dir, ignored_model_files): logger.info(f"Ignoring model file {model_path} by config") continue diff --git a/tests/looker/test_lookml_parser.py b/tests/looker/test_lookml_parser.py index 8e1cf612..b06282f0 100644 --- a/tests/looker/test_lookml_parser.py +++ b/tests/looker/test_lookml_parser.py @@ -55,7 +55,17 @@ def test_ignored_model(test_root_dir): f"{test_root_dir}/looker/empty_model", connection_map, VIEW_EXPLORE_FOLDER, - ignored_model_files=[f"{test_root_dir}/looker/empty_model/*.model.lkml"], + ignored_model_files=["model1.model.lkml"], + ) + + assert models_map == {} + assert virtual_views == [] + + models_map, virtual_views = parse_project( + f"{test_root_dir}/looker/empty_model", + connection_map, + VIEW_EXPLORE_FOLDER, + ignored_model_files=["model*"], ) assert models_map == {}