From 7ac3ee4b2173f8fb179573b4dbfe3e2024b52253 Mon Sep 17 00:00:00 2001 From: Eirini Koutsaniti Date: Fri, 13 Nov 2020 15:43:29 +0100 Subject: [PATCH 1/5] List inherited pipeline hooks with the `-L` option --- reframe/frontend/cli.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/reframe/frontend/cli.py b/reframe/frontend/cli.py index 7eb7e26b6c..df395a9b31 100644 --- a/reframe/frontend/cli.py +++ b/reframe/frontend/cli.py @@ -63,6 +63,13 @@ def fmt_deps(): else: node_alloc_scheme = f'flexible (minimum {-check.num_tasks} task(s))' + hooks = {} + for c in inspect.getmro(type(check)): + if hasattr(c, '_rfm_pipeline_hooks'): + for k, v in c._rfm_pipeline_hooks.items(): + hooks.setdefault(k, []) + hooks[k].extend(v) + check_info = { 'Description': check.descr, 'Environment modules': fmt_list(check.modules), @@ -71,7 +78,7 @@ def fmt_deps(): 'Node allocation': node_alloc_scheme, 'Pipeline hooks': { k: fmt_list(fn.__name__ for fn in v) - for k, v in type(check)._rfm_pipeline_hooks.items() + for k, v in hooks.items() }, 'Tags': fmt_list(check.tags), 'Valid environments': fmt_list(check.valid_prog_environs), From aa09d4edaacea3ff99bc245a7cf9c136b879849b Mon Sep 17 00:00:00 2001 From: Eirini Koutsaniti Date: Mon, 16 Nov 2020 10:05:21 +0100 Subject: [PATCH 2/5] Add function that returns all hooks in RegressionTest --- reframe/core/pipeline.py | 11 +++++++++++ reframe/frontend/cli.py | 9 +-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/reframe/core/pipeline.py b/reframe/core/pipeline.py index d873797ba8..d6982fc237 100644 --- a/reframe/core/pipeline.py +++ b/reframe/core/pipeline.py @@ -949,6 +949,17 @@ def stderr(self): ''' return self._job.stderr + @property + def hooks(self): + ret = {} + for c in inspect.getmro(type(self)): + if hasattr(c, '_rfm_pipeline_hooks'): + for k, v in c._rfm_pipeline_hooks.items(): + ret.setdefault(k, []) + ret[k].extend(v) + + return ret + @property def build_job(self): return self._build_job diff --git a/reframe/frontend/cli.py b/reframe/frontend/cli.py index df395a9b31..58f90ab18c 100644 --- a/reframe/frontend/cli.py +++ b/reframe/frontend/cli.py @@ -63,13 +63,6 @@ def fmt_deps(): else: node_alloc_scheme = f'flexible (minimum {-check.num_tasks} task(s))' - hooks = {} - for c in inspect.getmro(type(check)): - if hasattr(c, '_rfm_pipeline_hooks'): - for k, v in c._rfm_pipeline_hooks.items(): - hooks.setdefault(k, []) - hooks[k].extend(v) - check_info = { 'Description': check.descr, 'Environment modules': fmt_list(check.modules), @@ -78,7 +71,7 @@ def fmt_deps(): 'Node allocation': node_alloc_scheme, 'Pipeline hooks': { k: fmt_list(fn.__name__ for fn in v) - for k, v in hooks.items() + for k, v in check.hooks.items() }, 'Tags': fmt_list(check.tags), 'Valid environments': fmt_list(check.valid_prog_environs), From 19ff8969cfd7b22a58efe0879daee04daebe8692 Mon Sep 17 00:00:00 2001 From: Eirini Koutsaniti Date: Wed, 18 Nov 2020 09:44:21 +0100 Subject: [PATCH 3/5] Address PR comments --- reframe/core/pipeline.py | 22 +++++++++++----------- reframe/frontend/cli.py | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/reframe/core/pipeline.py b/reframe/core/pipeline.py index d6982fc237..9d8c34ae7f 100644 --- a/reframe/core/pipeline.py +++ b/reframe/core/pipeline.py @@ -148,6 +148,17 @@ def disable_hook(cls, hook_name): ''' cls._rfm_disabled_hooks.add(hook_name) + @classmethod + def hooks(cls): + ret = {} + for c in cls.mro(): + if hasattr(c, '_rfm_pipeline_hooks'): + for kind, hook in c._rfm_pipeline_hooks.items(): + ret.setdefault(kind, []) + ret[kind] += hook + + return ret + #: The name of the test. #: #: :type: string that can contain any character except ``/`` @@ -949,17 +960,6 @@ def stderr(self): ''' return self._job.stderr - @property - def hooks(self): - ret = {} - for c in inspect.getmro(type(self)): - if hasattr(c, '_rfm_pipeline_hooks'): - for k, v in c._rfm_pipeline_hooks.items(): - ret.setdefault(k, []) - ret[k].extend(v) - - return ret - @property def build_job(self): return self._build_job diff --git a/reframe/frontend/cli.py b/reframe/frontend/cli.py index 58f90ab18c..4f1c1c15eb 100644 --- a/reframe/frontend/cli.py +++ b/reframe/frontend/cli.py @@ -71,7 +71,7 @@ def fmt_deps(): 'Node allocation': node_alloc_scheme, 'Pipeline hooks': { k: fmt_list(fn.__name__ for fn in v) - for k, v in check.hooks.items() + for k, v in type(check).hooks().items() }, 'Tags': fmt_list(check.tags), 'Valid environments': fmt_list(check.valid_prog_environs), From 352bf6e5e124add322dbbb63a1534e8e92b444dc Mon Sep 17 00:00:00 2001 From: Eirini Koutsaniti Date: Thu, 19 Nov 2020 14:20:18 +0100 Subject: [PATCH 4/5] Rename hooks class method --- reframe/core/pipeline.py | 2 +- reframe/frontend/cli.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reframe/core/pipeline.py b/reframe/core/pipeline.py index 9d8c34ae7f..a3558ea03c 100644 --- a/reframe/core/pipeline.py +++ b/reframe/core/pipeline.py @@ -149,7 +149,7 @@ def disable_hook(cls, hook_name): cls._rfm_disabled_hooks.add(hook_name) @classmethod - def hooks(cls): + def pipeline_hooks(cls): ret = {} for c in cls.mro(): if hasattr(c, '_rfm_pipeline_hooks'): diff --git a/reframe/frontend/cli.py b/reframe/frontend/cli.py index 4f1c1c15eb..170326da63 100644 --- a/reframe/frontend/cli.py +++ b/reframe/frontend/cli.py @@ -71,7 +71,7 @@ def fmt_deps(): 'Node allocation': node_alloc_scheme, 'Pipeline hooks': { k: fmt_list(fn.__name__ for fn in v) - for k, v in type(check).hooks().items() + for k, v in check.pipeline_hooks().items() }, 'Tags': fmt_list(check.tags), 'Valid environments': fmt_list(check.valid_prog_environs), From fd907d8c3aafbed9a1305c69c2af7a6cd987899d Mon Sep 17 00:00:00 2001 From: Vasileios Karakasis Date: Thu, 19 Nov 2020 18:38:02 +0100 Subject: [PATCH 5/5] Add unit test --- unittests/test_pipeline.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/unittests/test_pipeline.py b/unittests/test_pipeline.py index b3030c46fa..05e42bfc9e 100644 --- a/unittests/test_pipeline.py +++ b/unittests/test_pipeline.py @@ -617,6 +617,10 @@ class MyTest(DerivedTest): _run(test, *local_exec_ctx) assert test.var == 2 assert test.foo == 1 + assert test.pipeline_hooks() == { + 'post_setup': [DerivedTest.z, BaseTest.x], + 'pre_run': [C.y], + } def test_overriden_hooks(local_exec_ctx):