diff options
author | Dan Firth <dan.firth@codethink.co.uk> | 2013-10-01 12:47:00 +0000 |
---|---|---|
committer | Dan Firth <dan.firth@codethink.co.uk> | 2013-10-01 12:47:00 +0000 |
commit | 091809507fca909cd7c1a37ce6dbd553a973da09 (patch) | |
tree | 7b4f10049f1d94454643fca1f2c867c1d19bdc4f | |
parent | 5e0ad6ad29fa776088241828580d58b7d91e9fd1 (diff) | |
download | morph-091809507fca909cd7c1a37ce6dbd553a973da09.tar.gz |
'system-kind' and 'disk-size' system morphology fields now raise ObsoleteFieldError
-rw-r--r-- | morphlib/morphloader.py | 19 | ||||
-rw-r--r-- | morphlib/morphloader_tests.py | 20 |
2 files changed, 39 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: diff --git a/morphlib/morphloader_tests.py b/morphlib/morphloader_tests.py index 7b37e300..a06ba1e7 100644 --- a/morphlib/morphloader_tests.py +++ b/morphlib/morphloader_tests.py @@ -94,6 +94,26 @@ build-system: dummy self.assertRaises( morphlib.morphloader.InvalidFieldError, self.loader.validate, m) + def test_fails_to_validate_system_with_obsolete_system_kind_field(self): + m = morphlib.morph3.Morphology({ + 'kind': 'system', + 'name': 'foo', + 'arch': 'x86_64', + 'system-kind': 'foo', + }) + self.assertRaises( + morphlib.morphloader.ObsoleteFieldError, self.loader.validate, m) + + def test_fails_to_validate_system_with_obsolete_disk_size_field(self): + m = morphlib.morph3.Morphology({ + 'kind': 'system', + 'name': 'foo', + 'arch': 'x86_64', + 'disk-size': 'over 9000', + }) + self.assertRaises( + morphlib.morphloader.ObsoleteFieldError, self.loader.validate, m) + def test_fails_to_validate_system_with_no_fields(self): m = morphlib.morph3.Morphology({ 'kind': 'system', |