diff options
Diffstat (limited to 'morphlib/morphloader.py')
-rw-r--r-- | morphlib/morphloader.py | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/morphlib/morphloader.py b/morphlib/morphloader.py index 70f46064..c94078f9 100644 --- a/morphlib/morphloader.py +++ b/morphlib/morphloader.py @@ -332,8 +332,22 @@ class MorphologyLoader(object): self._set_stratum_defaults(morphology) elif kind == 'chunk': self._set_chunk_defaults(morphology) - else: - assert kind == 'cluster' + + def unset_defaults(self, morphology): + '''If a field is equal to its default, delete it. + + The morphology is assumed to be valid. + + ''' + + kind = morphology['kind'] + defaults = self._static_defaults[kind] + for key in defaults: + if key in morphology and morphology[key] == defaults[key]: + del morphology[key] + + if kind == 'stratum': + self._unset_stratum_defaults(morphology) def _set_system_defaults(self, morph): pass @@ -345,6 +359,13 @@ class MorphologyLoader(object): if 'morph' not in spec: spec['morph'] = spec['name'] + def _unset_stratum_defaults(self, morph): + for spec in morph['chunks']: + if 'repo' in spec and spec['repo'] == spec['name']: + del spec['repo'] + if 'morph' in spec and spec['morph'] == spec['name']: + del spec['morph'] + def _set_chunk_defaults(self, morph): if morph['max-jobs'] is not None: morph['max-jobs'] = int(morph['max-jobs']) |