diff --git a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Common.py b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Common.py index 6f1e810a724b9b7f072af77b219c6a2fc02e33d5..0fe433fef1191ef7e85c280d05e25cf3017ec943 100644 --- a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Common.py +++ b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Common.py @@ -9,6 +9,8 @@ Common variables and functions used in Trigger ART test steering import logging import sys import os +import subprocess +from PyUtils.Decorators import memoize # Logging level used across the package @@ -32,7 +34,7 @@ def get_logger(): '''Default TrigValSteering logger''' logging.basicConfig(stream=sys.stdout, format='%(asctime)s %(name)s %(levelname)-8s %(message)s', - datefmt='%Y-%m-%dT%H%M %Z', + datefmt='%Y-%m-%dT%H%M%S %Z', level=trigvalsteering_logging_level) return logging.getLogger('TrigValSteering') @@ -51,3 +53,18 @@ def clear_art_summary(): if os.path.isfile(art_result_summary): os.remove(art_result_summary) + + +@memoize +def check_job_options(jo_path): + '''Check if the job options file exists locally or in PATH''' + # Check if job options existi locally + if os.path.isfile(jo_path): + return True + # Try to find the file in PATH + get_files_output = subprocess.check_output( + 'get_files -jo -list {}'.format(jo_path), shell=True) + if 'nothing found' in get_files_output.decode(): + return False + else: + return True diff --git a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py index 170e189fcf4e89e7f75db5a2a007b1d9dcce042a..9b30191bff1103a421cb900b10541d5bd01a2aaf 100644 --- a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py +++ b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py @@ -8,10 +8,10 @@ Definitions of exec steps (main job) in Trigger ART tests import sys import os -import subprocess from TrigValTools.TrigValSteering.Step import Step from TrigValTools.TrigValSteering.Input import is_input_defined, get_input +from TrigValTools.TrigValSteering.Common import check_job_options class ExecStep(Step): @@ -67,6 +67,7 @@ class ExecStep(Step): super(ExecStep, self).configure(test) def configure_type(self): + self.log.debug('Configuring type for step %s', self.name) # Check if type or executable is specified if self.type is None and self.executable is None: self.log.error('Cannot configure a step without specified type ' @@ -90,6 +91,7 @@ class ExecStep(Step): sys.exit(1) def configure_input(self): + self.log.debug('Configuring input for step %s', self.name) if self.input is None: self.log.error( 'Input not provided for step %s. To configure ' @@ -122,6 +124,7 @@ class ExecStep(Step): def configure_job_options(self): '''Check job options configuration''' + self.log.debug('Configuring job options for step %s', self.name) if self.type == 'other': self.log.debug('Skipping job options check for step.type=other') return @@ -139,19 +142,15 @@ class ExecStep(Step): self.report_result(1, 'TestConfig') sys.exit(1) # Check if job options exist - if os.path.isfile(self.job_options): + if check_job_options(self.job_options): self.log.debug('Job options file exists: %s', self.job_options) - return - # Try to find the file in PATH - get_files_output = subprocess.check_output( - 'get_files -jo -list {}'.format(self.job_options), shell=True) - if 'nothing found' in get_files_output.decode(): + else: self.log.error('Failed to find job options file %s', self.name) self.report_result(1, 'TestConfig') sys.exit(1) - self.log.debug('Job options file exists: %s', self.job_options) def configure_args(self, test): + self.log.debug('Configuring args for step %s', self.name) if self.args is None: self.args = '' athenaopts = '' diff --git a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Input.py b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Input.py index d34b371340e2f7a8e3242c8e80dc3c99b7af1657..64b5a937c9934542caaeab9d21ee55b1fb20d236 100644 --- a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Input.py +++ b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Input.py @@ -12,6 +12,7 @@ import os import json from TrigValTools.TrigValSteering.Common import get_logger +from PyUtils.Decorators import memoize input_json = 'TrigValTools/TrigValInputs.json' @@ -71,6 +72,7 @@ class TrigValInput(object): return True +@memoize def load_input_json(): '''Reads the json file with input definitions and returns the data as dictionary''' diff --git a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Test.py b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Test.py index 006138d48a61a44aceadd108d0f7230ffe6dd86e..99127722069aaa181af6a0eb550710201482761f 100644 --- a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Test.py +++ b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Test.py @@ -40,6 +40,7 @@ class Test(object): for step in self.exec_steps: step.configure(self) for step in self.check_steps: + self.log.debug('Configuring check step %s', step.name) step.configure(self) duplicate_names = self.duplicate_step_names()