Another yaml parsing bug
Minimal yaml file that reveals the bug:
name: test
a:
b:
c:
d:
- e
Trace:
Traceback (most recent call last):
File "/mntdirect/_data_id21_inhouse/wout/dev/bliss/bliss/shell/cli/repl.py", line 558, in embed
cmd_line_i._execute(inp)
File "/mntdirect/_data_id21_inhouse/wout/dev/bliss/bliss/shell/cli/repl.py", line 334, in _execute
raise return_value[1].with_traceback(return_value[2]) from None
File "/mntdirect/_data_id21_inhouse/wout/dev/bliss/bliss/shell/cli/repl.py", line 321, in _execute_task
return self._another_execute(*args, **kwargs)
File "/mntdirect/_data_id21_inhouse/wout/dev/bliss/bliss/shell/cli/repl.py", line 314, in _another_execute
six.exec_(code, self.get_globals(), self.get_locals())
File "<stdin>", line 1, in <module>
File "/mntdirect/_data_id21_inhouse/wout/dev/bliss/bliss/config/static.py", line 756, in get
name2itemsAndname2itemcache = func(self, config_node)
File "/mntdirect/_data_id21_inhouse/wout/dev/bliss/bliss/config/plugins/default.py", line 14, in create_objects_from_config_node
replace_reference_by_object(config, item_cfg_node)
File "/mntdirect/_data_id21_inhouse/wout/dev/bliss/bliss/config/plugins/utils.py", line 140, in replace_reference_by_object
_parse_dict(config, subdict, subref, value, placeholder)
File "/mntdirect/_data_id21_inhouse/wout/dev/bliss/bliss/config/plugins/utils.py", line 70, in _parse_dict
_parse_dict(config, childdict, childref, value, placeholder)
File "/mntdirect/_data_id21_inhouse/wout/dev/bliss/bliss/config/plugins/utils.py", line 64, in _parse_dict
for name, value in subdict.items():
RuntimeError: dictionary changed size during iteration
This is a similar issue as #892 (closed) @pancino: a dictionary is modified while iterating over its items. So the solution:
def _parse_dict(config, item_cfg_node, referenced_objects, subdict, placeholder):
for name, value in tuple(subdict.items()):
Edited by Wout De Nolf