mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-02-20 20:09:11 +00:00
Configuration: Removed merge_using_priority_specificity
This had moved to now be done by plugin cache so it has been removed from wlauto.core.configuration.configuration and any referenced to it have been changed to use plugin cache instead.
This commit is contained in:
parent
d7106acc42
commit
71f3467dc8
@ -489,89 +489,6 @@ class CpuFreqParameters(object):
|
||||
#####################
|
||||
|
||||
|
||||
# pylint: disable=too-many-nested-blocks, too-many-branches
|
||||
def merge_using_priority_specificity(generic_name, specific_name, plugin_cache):
|
||||
"""
|
||||
WA configuration can come from various sources of increasing priority, as well
|
||||
as being specified in a generic and specific manner (e.g. ``device_config``
|
||||
and ``nexus10`` respectivly). WA has two rules for the priority of configuration:
|
||||
|
||||
- Configuration from higher priority sources overrides configuration from
|
||||
lower priority sources.
|
||||
- More specific configuration overrides less specific configuration.
|
||||
|
||||
There is a situation where these two rules come into conflict. When a generic
|
||||
configuration is given in config source of high priority and a specific
|
||||
configuration is given in a config source of lower priority. In this situation
|
||||
it is not possible to know the end users intention and WA will error.
|
||||
|
||||
:param generic_name: The name of the generic configuration e.g ``device_config``
|
||||
:param specific_name: The name of the specific configuration used, e.g ``nexus10``
|
||||
:param cfg_point: A dict of ``ConfigurationPoint``s to be used when merging configuration.
|
||||
keys=config point name, values=config point
|
||||
|
||||
:rtype: A fully merged and validated configuration in the form of a obj_dict.
|
||||
"""
|
||||
generic_config = plugin_cache.get_plugin_config(generic_name)
|
||||
specific_config = plugin_cache.get_plugin_config(specific_name)
|
||||
cfg_points = plugin_cache.get_plugin_parameters(specific_name)
|
||||
sources = plugin_cache.sources
|
||||
final_config = obj_dict(not_in_dict=['name'])
|
||||
seen_specific_config = defaultdict(list)
|
||||
|
||||
# set_value uses the 'name' attribute of the passed object in it error
|
||||
# messages, to ensure these messages make sense the name will have to be
|
||||
# changed several times during this function.
|
||||
final_config.name = specific_name
|
||||
|
||||
# Load default config
|
||||
for cfg_point in cfg_points.itervalues():
|
||||
cfg_point.set_value(final_config, check_mandatory=False)
|
||||
|
||||
# pylint: disable=too-many-nested-blocks
|
||||
for source in sources:
|
||||
try:
|
||||
if source in generic_config:
|
||||
for name, cfg_point in cfg_points.iteritems():
|
||||
final_config.name = generic_name
|
||||
if name in generic_config[source]:
|
||||
if name in seen_specific_config:
|
||||
msg = ('"{generic_name}" configuration "{config_name}" has already been '
|
||||
'specified more specifically for {specific_name} in:\n\t\t{sources}')
|
||||
msg = msg.format(generic_name=generic_name,
|
||||
config_name=name,
|
||||
specific_name=specific_name,
|
||||
sources="\n\t\t".join(seen_specific_config[name]))
|
||||
raise ConfigError(msg)
|
||||
value = generic_config[source].pop(name)
|
||||
cfg_point.set_value(final_config, value, check_mandatory=False)
|
||||
if generic_config[source]:
|
||||
msg = 'Invalid entry(ies) for "{}" in "{}": "{}"'
|
||||
msg = msg.format(specific_name, generic_name, '", "'.join(generic_config[source]))
|
||||
raise ConfigError(msg)
|
||||
|
||||
if source in specific_config:
|
||||
final_config.name = specific_name
|
||||
for name, cfg_point in cfg_points.iteritems():
|
||||
if name in specific_config[source]:
|
||||
seen_specific_config[name].append(source)
|
||||
value = specific_config[source].pop(name)
|
||||
cfg_point.set_value(final_config, value, check_mandatory=False)
|
||||
if specific_config[source]:
|
||||
msg = 'Invalid entry(ies) for "{}": "{}"'
|
||||
raise ConfigError(msg.format(specific_name, '", "'.join(specific_config[source])))
|
||||
|
||||
except ConfigError as e:
|
||||
raise ConfigError('Error in "{}":\n\t{}'.format(source, str(e)))
|
||||
|
||||
# Validate final configuration
|
||||
final_config.name = specific_name
|
||||
for cfg_point in cfg_points.itervalues():
|
||||
cfg_point.validate(final_config)
|
||||
|
||||
return final_config
|
||||
|
||||
|
||||
class Configuration(object):
|
||||
|
||||
config_points = []
|
||||
@ -845,9 +762,8 @@ class RunConfiguration(Configuration):
|
||||
selected device.
|
||||
"""
|
||||
# pylint: disable=no-member
|
||||
self.device_config = merge_using_priority_specificity("device_config",
|
||||
self.device,
|
||||
plugin_cache)
|
||||
self.device_config = plugin_cache.get_plugin_config(self.device_config,
|
||||
generic_name="device_config")
|
||||
|
||||
def to_pod(self):
|
||||
pod = super(RunConfiguration, self).to_pod()
|
||||
@ -950,9 +866,8 @@ class JobSpec(Configuration):
|
||||
# Only call after the rest of the JobSpec is merged
|
||||
def merge_workload_parameters(self, plugin_cache):
|
||||
# merge global generic and specific config
|
||||
workload_params = merge_using_priority_specificity("workload_parameters",
|
||||
self.workload_name,
|
||||
plugin_cache)
|
||||
workload_params = plugin_cache.get_plugin_config(self.workload_name,
|
||||
generic_name="workload_parameters")
|
||||
|
||||
# Merge entry "workload_parameters"
|
||||
# TODO: Wrap in - "error in [agenda path]"
|
||||
|
Loading…
x
Reference in New Issue
Block a user