diff options
Diffstat (limited to 'morphlib/morphloader.py')
-rw-r--r-- | morphlib/morphloader.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/morphlib/morphloader.py b/morphlib/morphloader.py index aea87777..9601784c 100644 --- a/morphlib/morphloader.py +++ b/morphlib/morphloader.py @@ -54,6 +54,11 @@ class InvalidFieldError(morphlib.Error): self.msg = ( 'Field %s not allowed in morphology %s' % (field, morphology)) +class ObsoleteFieldError(morphlib.Error): + + def __init__(self, field, morphology): + self.msg = ( + 'Field %s is now obsolete but present in %s' % (field, morphology)) class UnknownArchitectureError(morphlib.Error): @@ -107,6 +112,13 @@ class MorphologyLoader(object): ], } + _obsolete_fields = { + 'system': [ + 'system-kind', + 'disk-size', + ], + } + _static_defaults = { 'chunk': { 'description': '', @@ -219,8 +231,10 @@ class MorphologyLoader(object): raise UnknownKindError(morph['kind'], morph.filename) required = ['kind'] + self._required_fields[kind] + obsolete = self._obsolete_fields.get(kind, []) allowed = self._static_defaults[kind].keys() self._require_fields(required, morph) + self._deny_obsolete_fields(obsolete, morph) self._deny_unknown_fields(required + allowed, morph) if kind == 'system': @@ -292,6 +306,11 @@ class MorphologyLoader(object): for field in fields: self._require_field(field, morphology) + def _deny_obsolete_fields(self, fields, morphology): + for field in morphology: + if field in fields: + raise ObsoleteFieldError(field, morphology.filename) + def _deny_unknown_fields(self, allowed, morphology): for field in morphology: if field not in allowed: |