From 5ceb033caf279016876643315a66ab2aad3095d1 Mon Sep 17 00:00:00 2001 From: Richard Maw Date: Thu, 28 Nov 2013 15:07:41 +0000 Subject: morphloader: Don't use ValueError exception Dedicated exceptions allow more fine-grained exception catching and can have extra data. --- morphlib/morphloader.py | 24 ++++++++++++++++++++++-- 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( -- cgit v1.2.1