diff --git a/galsim/config/process.py b/galsim/config/process.py index 2e6af99f3b..e9ce33537c 100644 --- a/galsim/config/process.py +++ b/galsim/config/process.py @@ -202,7 +202,7 @@ def ProcessAllTemplates(config, logger=None, base=None): """ if base is None: base = config ProcessTemplate(config, base, logger) - for (key, field) in config.items(): + for (key, field) in list(config.items()): if isinstance(field, dict): ProcessAllTemplates(field, logger, base) elif isinstance(field, list): diff --git a/tests/test_config_image.py b/tests/test_config_image.py index 4bc37a59e9..25a2d99ac6 100644 --- a/tests/test_config_image.py +++ b/tests/test_config_image.py @@ -2547,6 +2547,21 @@ def test_template(): config8['psf']['items'][2] = config4['image']['noise'] assert config9 == config8 + # Make sure evals work correltly for template string when not at top level. + # (This used to give an error about the config dict changing size during iteration.) + config10 = { + "eval_variables" : { + "iabc": 123, + "ddict": { + "template": "$os.path.join('config_input','dict.yaml')" + } + } + } + galsim.config.ProcessAllTemplates(config10) + assert config10['eval_variables']['ddict']['b'] == False + assert config10['eval_variables']['ddict']['s'] == "Brian" + assert config10['eval_variables']['ddict']['noise']['models'][0]['variance'] == 0.12 + @timer def test_variable_cat_size():