summaryrefslogtreecommitdiff
path: root/morphlib/morphloader.py
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 /morphlib/morphloader.py
parent5e0ad6ad29fa776088241828580d58b7d91e9fd1 (diff)
downloadmorph-091809507fca909cd7c1a37ce6dbd553a973da09.tar.gz
'system-kind' and 'disk-size' system morphology fields now raise ObsoleteFieldError
Diffstat (limited to 'morphlib/morphloader.py')
-rw-r--r--morphlib/morphloader.py19
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: