diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2013-11-28 15:07:41 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2013-11-29 16:11:31 +0000 |
commit | 5ceb033caf279016876643315a66ab2aad3095d1 (patch) | |
tree | 98db2b546731c6cbe11ec312bc121baed87268af | |
parent | 5eafbe6c70910b5662c941f9f7a3c9befc61feea (diff) | |
download | morph-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.py | 24 | ||||
-rw-r--r-- | morphlib/morphloader_tests.py | 6 |
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( |