summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Firth <dan.firth@codethink.co.uk>2013-10-01 12:47:00 +0000
committerDan Firth <dan.firth@codethink.co.uk>2013-10-01 12:47:00 +0000
commit091809507fca909cd7c1a37ce6dbd553a973da09 (patch)
tree7b4f10049f1d94454643fca1f2c867c1d19bdc4f
parent5e0ad6ad29fa776088241828580d58b7d91e9fd1 (diff)
downloadmorph-091809507fca909cd7c1a37ce6dbd553a973da09.tar.gz
'system-kind' and 'disk-size' system morphology fields now raise ObsoleteFieldError
-rw-r--r--morphlib/morphloader.py19
-rw-r--r--morphlib/morphloader_tests.py20
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',