From 913a31bb45cc4be6b69133473842ad3622065342 Mon Sep 17 00:00:00 2001 From: Alexander Jung Date: Tue, 2 Mar 2021 00:20:25 +0100 Subject: [PATCH] config: Solve interpolation recursion error Signed-off-by: Alexander Jung --- kraft/config/interpolation.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/kraft/config/interpolation.py b/kraft/config/interpolation.py index 32da10a6..04883d4a 100644 --- a/kraft/config/interpolation.py +++ b/kraft/config/interpolation.py @@ -170,25 +170,37 @@ def process_item(name, config_dict): if isinstance(config_dict, six.string_types): return interpolator.interpolate(config_dict) - return dict( - (key, interpolate_value(name, key, val, section, interpolator)) - for key, val in (config_dict or {}).items() - ) + elif isinstance(config_dict, list): + return list( + interpolator.interpolate(val) + for val in config_dict + ) + + elif isinstance(config_dict, dict): + return dict( + (key, interpolate_value(name, key, val, section, interpolator)) + for key, val in (config_dict or {}).items() + ) + + return config_dict if isinstance(config, six.string_types): return interpolator.interpolate(config) elif isinstance(config, list): return list( - process_item(None, item) for item in config + process_item(None, config_dict or {}) + for config_dict in config ) - else: + elif isinstance(config, dict): return dict( (name, process_item(name, config_dict or {})) for name, config_dict in config.items() ) + return config + class ConversionMap(object): map = {}