diff --git a/wa/framework/configuration/core.py b/wa/framework/configuration/core.py index bd80758d..edc3270c 100644 --- a/wa/framework/configuration/core.py +++ b/wa/framework/configuration/core.py @@ -701,9 +701,11 @@ class RunConfiguration(Configuration): device_config = pod.pop('device_config', None) augmentations = pod.pop('augmentations', {}) + getters = pod.pop('resource_getters', {}) instance = super(RunConfiguration, cls).from_pod(pod) instance.device_config = device_config instance.augmentations = augmentations + instance.resource_getters = getters for cfg_point in cls.meta_data: cfg_point.set_value(instance, meta_pod[cfg_point.name]) @@ -715,6 +717,7 @@ class RunConfiguration(Configuration): confpoint.set_value(self, check_mandatory=False) self.device_config = None self.augmentations = {} + self.resource_getters = {} def merge_device_config(self, plugin_cache): """ @@ -733,10 +736,16 @@ class RunConfiguration(Configuration): raise ValueError('Augmentation "{}" already added.'.format(aug.name)) self.augmentations[aug.name] = aug.get_config() + def add_resource_getter(self, getter): + if getter.name in self.resource_getters: + raise ValueError('Resource getter "{}" already added.'.format(getter.name)) + self.resource_getters[getter.name] = getter.get_config() + def to_pod(self): pod = super(RunConfiguration, self).to_pod() pod['device_config'] = dict(self.device_config or {}) pod['augmentations'] = self.augmentations + pod['resource_getters'] = self.resource_getters return pod diff --git a/wa/framework/execution.py b/wa/framework/execution.py index 1819e615..2a9dc544 100644 --- a/wa/framework/execution.py +++ b/wa/framework/execution.py @@ -100,15 +100,13 @@ class ExecutionContext(object): self.tm = tm self.run_output = output self.run_state = output.state - self.logger.debug('Loading resource discoverers') - self.resolver = ResourceResolver(cm.plugin_cache) - self.resolver.load() self.job_queue = None self.completed_jobs = None self.current_job = None self.successful_jobs = 0 self.failed_jobs = 0 self.run_interrupted = False + self._load_resource_getters() def start_run(self): self.output.info.start_time = datetime.utcnow() @@ -298,6 +296,13 @@ class ExecutionContext(object): self.job_queue = new_queue + def _load_resource_getters(self): + self.logger.debug('Loading resource discoverers') + self.resolver = ResourceResolver(self.cm.plugin_cache) + self.resolver.load() + for getter in self.resolver.getters: + self.cm.run_config.add_resource_getter(getter) + def _get_unique_filepath(self, filename): filepath = os.path.join(self.output_directory, filename) rest, ext = os.path.splitext(filepath)