Skip to content
Snippets Groups Projects
Commit e05d6905 authored by Karl-Hermann Wieners's avatar Karl-Hermann Wieners
Browse files

Config: identify group names differing by whitespace only

Closes issue #3
parent 38389829
No related branches found
No related tags found
No related merge requests found
Source diff could not be displayed: it is too large. Options to address this: view the blob.
......@@ -156,6 +156,9 @@ class ExpConfig(ConfigObj):
# Helper functions
#
# Common pattern to be used for helper functions
pattern_whitespace_sequences = re.compile(r"\s+")
def split_shared_sections(config):
'''Process sections to expand shared entries as [[job1, job2]]
......@@ -265,6 +268,32 @@ class ExpConfig(ConfigObj):
for key in section.sections:
list_assign(section[key])
def unify_section_keys(config):
'''Process sections to unify [base ident] entries
Collapses whitespace sequences to a single space'''
def unify_key(current):
for subkey_orig in current.sections:
subkey = pattern_whitespace_sequences.sub(" ", subkey_orig)
if subkey != subkey_orig:
if subkey in current:
raise ExpConfigError(
f"duplicate key '{subkey}' after whitespace"
" unification", subkey_orig)
else:
current.rename(subkey_orig, subkey)
if 'namelists' in config.sections:
for group in config['namelists'].sections:
unify_key(config['namelists'][group])
if 'jobs' in config.sections:
unify_key(config['jobs'])
for job in config['jobs'].sections:
if 'namelists' in config['jobs'][job].sections:
for group in config['namelists'].sections:
unify_key(config['jobs'][job]['namelists'][group])
# Helper functions for value definitions
def read_value(value):
......@@ -544,12 +573,14 @@ class ExpConfig(ConfigObj):
if lib_config_name:
pre_config.merge(ConfigObj(lib_config_name))
split_shared_sections(pre_config)
unify_section_keys(pre_config)
list_assign(pre_config)
register_version(pre_config, config_versions)
if setup_config_name:
pre_config.merge(ConfigObj(setup_config_name))
split_shared_sections(pre_config)
unify_section_keys(pre_config)
list_assign(pre_config)
register_version(pre_config, config_versions)
......@@ -558,6 +589,7 @@ class ExpConfig(ConfigObj):
if lib_config_name:
pre_config.merge(ConfigObj(lib_config_name))
split_shared_sections(pre_config)
unify_section_keys(pre_config)
list_assign(pre_config)
register_version(pre_config, config_versions)
elif (experiment_type and
......@@ -571,6 +603,7 @@ class ExpConfig(ConfigObj):
if lib_config_name:
pre_config.merge(ConfigObj(lib_config_name))
split_shared_sections(pre_config)
unify_section_keys(pre_config)
list_assign(pre_config)
register_version(pre_config, config_versions)
else:
......@@ -584,6 +617,7 @@ class ExpConfig(ConfigObj):
if lib_config_name:
pre_config.merge(ConfigObj(lib_config_name))
split_shared_sections(pre_config)
unify_section_keys(pre_config)
list_assign(pre_config)
register_version(pre_config, config_versions)
......@@ -596,6 +630,7 @@ class ExpConfig(ConfigObj):
experiment_config = ConfigObj(experiment_config_name)
pre_config.merge(experiment_config)
split_shared_sections(pre_config)
unify_section_keys(pre_config)
list_assign(pre_config)
# Add extra dictionary
......
......@@ -640,8 +640,6 @@ class NamelistTestCase(MkexpSimpleTestCase):
""", u"""
&group ! '1'
/
&group ! ' 1'
/
&group ! '2'
/
&group ! 'i i i'
......@@ -650,9 +648,8 @@ class NamelistTestCase(MkexpSimpleTestCase):
[namelists]
[[namelist]]
[[[group 1]]]
[[[group 1]]]
[[[group 2]]]
[[[group i i i]]]
[[[group 2]]]
[[[group i i i]]]
""")
def test_namelist_case_twist(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment