From 76c288060fb2f874facbb09f0780b13f22e796e8 Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Tue, 17 Nov 2020 19:04:46 +0900 Subject: [PATCH 01/10] Add 'package_filter' arg to package iteration utils --- allzpark/_rezapi.py | 43 ++++++++++++++++++++++++++++++++++++++----- allzpark/control.py | 7 ++++--- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/allzpark/_rezapi.py b/allzpark/_rezapi.py index 20b6e71..b0fd6d2 100644 --- a/allzpark/_rezapi.py +++ b/allzpark/_rezapi.py @@ -30,12 +30,45 @@ def clear_caches(): repo.clear_caches() -def find_one(name, range_=None, paths=None): - return next(find(name, range_, paths)) +def find_one(name, range_=None, paths=None, package_filter=None): + ''' + Find latest package version + + Args: + name (str): Name of the rez package + range_ (VersionRange or str, optional): Limits versions to range + paths (list of str, optional): Paths to search for packages + package_filter (PackageFilter, optional): Limits versions to those + that match package filter + + Returns: + Package + ''' + if package_filter: + return next(package_filter.iter_packages(name, range_, paths)) + else: + return next(find(name, range_, paths)) + + +def find_latest(name, range_=None, paths=None, package_filter=None): + ''' + Find latest package version + + Args: + name (str): Name of the rez package + range_ (VersionRange or str, optional): Limits versions to range + paths (list of str, optional): Paths to search for packages + package_filter (PackageFilter, optional): Limits versions to those + that match package filter + + Returns: + Package + ''' + if package_filter: + it = package_filter.iter_packages(name, range_, paths) + else: + it = find(name, range_, paths) - -def find_latest(name, range_=None, paths=None): - it = find(name, range_) it = sorted(it, key=lambda pkg: pkg.version) try: diff --git a/allzpark/control.py b/allzpark/control.py index 56c8f58..3049df7 100644 --- a/allzpark/control.py +++ b/allzpark/control.py @@ -1091,8 +1091,11 @@ def _list_apps(self, profile): def _try_finding_latest_app(req_str): req_str = req_str.strip("~") req = rez.PackageRequest(req_str) + package_filter = self._package_filter() try: - return rez.find_latest(req.name, range_=req.range) + return rez.find_latest(req.name, + range_=req.range, + package_filter=package_filter) except _missing as e_: self.error(str(e_)) return model.BrokenPackage(req_str) @@ -1115,8 +1118,6 @@ def _try_resolve_context(req, pkg_name, mode): for app_request in apps: app_package = _try_finding_latest_app(app_request) - if package_filter.excludes(app_package): - continue app_request = "%s==%s" % (app_package.name, app_package.version) From e4cb44e05fa8d8be1f717531823e423fac67547d Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Tue, 17 Nov 2020 19:09:59 +0900 Subject: [PATCH 02/10] Docstring --- allzpark/_rezapi.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/allzpark/_rezapi.py b/allzpark/_rezapi.py index b0fd6d2..ff427a8 100644 --- a/allzpark/_rezapi.py +++ b/allzpark/_rezapi.py @@ -32,7 +32,7 @@ def clear_caches(): def find_one(name, range_=None, paths=None, package_filter=None): ''' - Find latest package version + Find next package version Args: name (str): Name of the rez package @@ -42,7 +42,7 @@ def find_one(name, range_=None, paths=None, package_filter=None): that match package filter Returns: - Package + rez.packages_.Package ''' if package_filter: return next(package_filter.iter_packages(name, range_, paths)) @@ -62,7 +62,7 @@ def find_latest(name, range_=None, paths=None, package_filter=None): that match package filter Returns: - Package + rez.packages_.Package ''' if package_filter: it = package_filter.iter_packages(name, range_, paths) From 2d6c3c28cb0f3b3961ef460c5fe3ec4dd659a143 Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Tue, 17 Nov 2020 19:09:59 +0900 Subject: [PATCH 03/10] Docstring, reference issue #131 --- allzpark/_rezapi.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/allzpark/_rezapi.py b/allzpark/_rezapi.py index b0fd6d2..ff427a8 100644 --- a/allzpark/_rezapi.py +++ b/allzpark/_rezapi.py @@ -32,7 +32,7 @@ def clear_caches(): def find_one(name, range_=None, paths=None, package_filter=None): ''' - Find latest package version + Find next package version Args: name (str): Name of the rez package @@ -42,7 +42,7 @@ def find_one(name, range_=None, paths=None, package_filter=None): that match package filter Returns: - Package + rez.packages_.Package ''' if package_filter: return next(package_filter.iter_packages(name, range_, paths)) @@ -62,7 +62,7 @@ def find_latest(name, range_=None, paths=None, package_filter=None): that match package filter Returns: - Package + rez.packages_.Package ''' if package_filter: it = package_filter.iter_packages(name, range_, paths) From 525964cb219df8de66dadce445c4523d4a882a2c Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Wed, 18 Nov 2020 18:59:03 +0900 Subject: [PATCH 04/10] Cleanup --- allzpark/_rezapi.py | 8 ++++---- allzpark/control.py | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/allzpark/_rezapi.py b/allzpark/_rezapi.py index ff427a8..557f048 100644 --- a/allzpark/_rezapi.py +++ b/allzpark/_rezapi.py @@ -31,7 +31,7 @@ def clear_caches(): def find_one(name, range_=None, paths=None, package_filter=None): - ''' + """ Find next package version Args: @@ -43,7 +43,7 @@ def find_one(name, range_=None, paths=None, package_filter=None): Returns: rez.packages_.Package - ''' + """ if package_filter: return next(package_filter.iter_packages(name, range_, paths)) else: @@ -51,7 +51,7 @@ def find_one(name, range_=None, paths=None, package_filter=None): def find_latest(name, range_=None, paths=None, package_filter=None): - ''' + """ Find latest package version Args: @@ -63,7 +63,7 @@ def find_latest(name, range_=None, paths=None, package_filter=None): Returns: rez.packages_.Package - ''' + """ if package_filter: it = package_filter.iter_packages(name, range_, paths) else: diff --git a/allzpark/control.py b/allzpark/control.py index 3049df7..6e78095 100644 --- a/allzpark/control.py +++ b/allzpark/control.py @@ -1091,7 +1091,6 @@ def _list_apps(self, profile): def _try_finding_latest_app(req_str): req_str = req_str.strip("~") req = rez.PackageRequest(req_str) - package_filter = self._package_filter() try: return rez.find_latest(req.name, range_=req.range, From 02779e3de8b3734d148feedad0de96fb8f58d6c6 Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Wed, 18 Nov 2020 19:02:33 +0900 Subject: [PATCH 05/10] Add unittest for #131 --- tests/test_apps.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tests/test_apps.py b/tests/test_apps.py index 6fba619..9ae4e28 100644 --- a/tests/test_apps.py +++ b/tests/test_apps.py @@ -230,3 +230,47 @@ def test_app_failed_independently_4(self): self.assertFalse(context_a.success) self.assertTrue(context_b.success) + + def test_app_exclusion_filter(self): + """Test app is available when latest version matches rez + exclusion filter + """ + from allzpark import allzparkconfig + + self.assertEqual(allzparkconfig.exclude_filter, "*.beta") + + utils.memory_repository({ + "foo": { + "1.0.0": { + "name": "foo": + "version": "1.0.0", + "requires": [ + "~app-1" # latest app_A version matches exclusion filter + ] + } + } + "app_A": { + "1.0.0": { + "name": "app_A", + "version": "1.0.0" + }, + "1.0.0.beta": { + "name": "app_A", + "version": "1.0.0.beta" + } + } + }) + with self.wait_signal(self.ctrl.resetted): + self.ctrl.reset(["foo"]) + self.wait(timeout=200) + self.assertEqual(self.ctrl.state.state, "ready") + + # App was added + self.assertIn("appA-1", self.ctrl.state["rezContexts"]) + context_a = self.ctrl.state["rezContexts"]["appA-1"] + self.assertTrue(context_a.success) + + # Latest non-beta version was chosen + resolved_pkgs = [p for p in context_a.resolved_packages + if "appA" == p.name and "1.0.0" == str(p.version)] + assert(resolved_pkgs) From 986230f7572745dd60ba9d91a4b9986a2acd2358 Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Wed, 18 Nov 2020 19:06:11 +0900 Subject: [PATCH 06/10] Dict syntax error --- tests/test_apps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_apps.py b/tests/test_apps.py index 9ae4e28..f289a70 100644 --- a/tests/test_apps.py +++ b/tests/test_apps.py @@ -248,7 +248,7 @@ def test_app_exclusion_filter(self): "~app-1" # latest app_A version matches exclusion filter ] } - } + }, "app_A": { "1.0.0": { "name": "app_A", From 11519768a5c5ecd6b3b54c89a1911eb73c13a694 Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Wed, 18 Nov 2020 19:07:25 +0900 Subject: [PATCH 07/10] Dict syntax error --- tests/test_apps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_apps.py b/tests/test_apps.py index f289a70..adab7ad 100644 --- a/tests/test_apps.py +++ b/tests/test_apps.py @@ -242,7 +242,7 @@ def test_app_exclusion_filter(self): utils.memory_repository({ "foo": { "1.0.0": { - "name": "foo": + "name": "foo", "version": "1.0.0", "requires": [ "~app-1" # latest app_A version matches exclusion filter From be169e430f7ac41e09372d579cb7724797d64f45 Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Wed, 18 Nov 2020 19:17:08 +0900 Subject: [PATCH 08/10] Fix util reference --- tests/test_apps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_apps.py b/tests/test_apps.py index adab7ad..549fc4c 100644 --- a/tests/test_apps.py +++ b/tests/test_apps.py @@ -239,7 +239,7 @@ def test_app_exclusion_filter(self): self.assertEqual(allzparkconfig.exclude_filter, "*.beta") - utils.memory_repository({ + util.memory_repository({ "foo": { "1.0.0": { "name": "foo", From ce82c0892f51dc294a71c2e91898d13764e0c764 Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Wed, 18 Nov 2020 19:26:39 +0900 Subject: [PATCH 09/10] Syntax error app name --- tests/test_apps.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_apps.py b/tests/test_apps.py index 549fc4c..4785e4c 100644 --- a/tests/test_apps.py +++ b/tests/test_apps.py @@ -245,7 +245,7 @@ def test_app_exclusion_filter(self): "name": "foo", "version": "1.0.0", "requires": [ - "~app-1" # latest app_A version matches exclusion filter + "~app_A-1" # latest app_A version matches exclusion filter ] } }, @@ -266,11 +266,11 @@ def test_app_exclusion_filter(self): self.assertEqual(self.ctrl.state.state, "ready") # App was added - self.assertIn("appA-1", self.ctrl.state["rezContexts"]) - context_a = self.ctrl.state["rezContexts"]["appA-1"] + self.assertIn("app_A-1", self.ctrl.state["rezContexts"]) + context_a = self.ctrl.state["rezContexts"]["app_A-1"] self.assertTrue(context_a.success) # Latest non-beta version was chosen resolved_pkgs = [p for p in context_a.resolved_packages - if "appA" == p.name and "1.0.0" == str(p.version)] + if "app_A" == p.name and "1.0.0" == str(p.version)] assert(resolved_pkgs) From f401a116b39484eb68cd495eb55595a0c3fabd43 Mon Sep 17 00:00:00 2001 From: Villar Gabriella Date: Wed, 18 Nov 2020 19:31:38 +0900 Subject: [PATCH 10/10] Test - update app request check --- tests/test_apps.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_apps.py b/tests/test_apps.py index 4785e4c..40d6372 100644 --- a/tests/test_apps.py +++ b/tests/test_apps.py @@ -266,8 +266,8 @@ def test_app_exclusion_filter(self): self.assertEqual(self.ctrl.state.state, "ready") # App was added - self.assertIn("app_A-1", self.ctrl.state["rezContexts"]) - context_a = self.ctrl.state["rezContexts"]["app_A-1"] + self.assertIn("app_A==1.0.0", self.ctrl.state["rezContexts"]) + context_a = self.ctrl.state["rezContexts"]["app_A==1.0.0"] self.assertTrue(context_a.success) # Latest non-beta version was chosen