summaryrefslogtreecommitdiff
path: root/morphlib
diff options
context:
space:
mode:
Diffstat (limited to 'morphlib')
-rw-r--r--morphlib/morphologyfactory.py6
-rw-r--r--morphlib/morphologyfactory_tests.py8
2 files changed, 13 insertions, 1 deletions
diff --git a/morphlib/morphologyfactory.py b/morphlib/morphologyfactory.py
index 78a49125..c6ba3a4e 100644
--- a/morphlib/morphologyfactory.py
+++ b/morphlib/morphologyfactory.py
@@ -49,7 +49,11 @@ class MorphologyFactory(object):
except:
text = self._autodetect_text(reponame, sha1, filename)
- morphology = morphlib.morph2.Morphology(text)
+ try:
+ morphology = morphlib.morph2.Morphology(text)
+ except ValueError as e:
+ raise morphlib.Error("Error parsing %s: %s" %
+ (filename, e.message))
method_name = '_check_and_tweak_%s' % morphology['kind']
if hasattr(self, method_name):
diff --git a/morphlib/morphologyfactory_tests.py b/morphlib/morphologyfactory_tests.py
index b00a496a..39331262 100644
--- a/morphlib/morphologyfactory_tests.py
+++ b/morphlib/morphologyfactory_tests.py
@@ -63,6 +63,9 @@ class FakeLocalRepo(object):
"system-kind": "%(system_kind)s",
"arch": "%(arch)s"
}''',
+ 'parse-error.morph': '''{
+ "name"
+ }''',
}
def __init__(self):
@@ -229,3 +232,8 @@ class MorphologyFactoryTests(unittest.TestCase):
self.lr.system_kind = ''
self.assertRaises(morphlib.Error, self.mf.get_morphology,
'reponame', 'sha1', 'system.morph')
+
+ def test_fails_on_parse_error(self):
+ self.assertRaises(morphlib.Error, self.mf.get_morphology,
+ 'reponame', 'sha1', 'parse-error.morph')
+