summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2013-11-28 15:07:41 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2013-11-29 16:11:31 +0000
commit5ceb033caf279016876643315a66ab2aad3095d1 (patch)
tree98db2b546731c6cbe11ec312bc121baed87268af
parent5eafbe6c70910b5662c941f9f7a3c9befc61feea (diff)
downloadmorph-5ceb033caf279016876643315a66ab2aad3095d1.tar.gz
morphloader: Don't use ValueError exception
Dedicated exceptions allow more fine-grained exception catching and can have extra data.
-rw-r--r--morphlib/morphloader.py24
-rw-r--r--morphlib/morphloader_tests.py6
2 files changed, 26 insertions, 4 deletions
diff --git a/morphlib/morphloader.py b/morphlib/morphloader.py
index 702a330c..769d8c8e 100644
--- a/morphlib/morphloader.py
+++ b/morphlib/morphloader.py
@@ -92,6 +92,26 @@ class EmptyStratumError(morphlib.Error):
(stratum_name, morphology))
+class DuplicateChunkError(morphlib.Error):
+
+ def __init__(self, stratum_name, chunk_name):
+ self.stratum_name = stratum_name
+ self.chunk_name = chunk_name
+ morphlib.Error.__init__(
+ self, 'Duplicate chunk %(chunk_name)s '\
+ 'in stratum %(stratum_name)s' % locals())
+
+
+class DuplicateStratumError(morphlib.Error):
+
+ def __init__(self, system_name, stratum_name):
+ self.system_name = system_name
+ self.stratum_name = stratum_name
+ morphlib.Error.__init__(
+ self, 'Duplicate stratum %(stratum_name)s '\
+ 'in system %(system_name)s' % locals())
+
+
class MorphologyLoader(object):
'''Load morphologies from disk, or save them back to disk.'''
@@ -255,7 +275,7 @@ class MorphologyLoader(object):
for spec in morph['strata']:
name = spec.get('alias', spec['morph'])
if name in names:
- raise ValueError('Duplicate stratum "%s"' % name)
+ raise DuplicateStratumError(morph['name'], name)
names.add(name)
# We allow the ARMv7 little-endian architecture to be specified
@@ -277,7 +297,7 @@ class MorphologyLoader(object):
for spec in morph['chunks']:
name = spec.get('alias', spec['name'])
if name in names:
- raise ValueError('Duplicate chunk "%s"' % name)
+ raise DuplicateChunkError(morph['name'], name)
names.add(name)
# Require build-dependencies for the stratum itself, unless
diff --git a/morphlib/morphloader_tests.py b/morphlib/morphloader_tests.py
index f38d58e8..2711db20 100644
--- a/morphlib/morphloader_tests.py
+++ b/morphlib/morphloader_tests.py
@@ -157,7 +157,8 @@ build-system: dummy
}
]
})
- self.assertRaises(ValueError, self.loader.validate, m)
+ self.assertRaises(morphlib.morphloader.DuplicateStratumError,
+ self.loader.validate, m)
def test_validate_requires_unique_chunk_names_within_a_stratum(self):
m = morphlib.morph3.Morphology(
@@ -177,7 +178,8 @@ build-system: dummy
}
]
})
- self.assertRaises(ValueError, self.loader.validate, m)
+ self.assertRaises(morphlib.morphloader.DuplicateChunkError,
+ self.loader.validate, m)
def test_validate_requires_a_valid_architecture(self):
m = morphlib.morph3.Morphology(