From 76b99376240d567d04f21710731d0b2788e71694 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Thu, 12 Nov 2015 09:37:52 +0000 Subject: morphloader: remove duplicated API Change-Id: Idbbd5a08e8b16d8e01bb9539274092978b64f6f0 --- morphlib/morphloader.py | 35 ++++++++--------------------------- morphlib/morphloader_tests.py | 22 ++++++++++++++-------- morphlib/plugins/diff_plugin.py | 3 +-- 3 files changed, 23 insertions(+), 37 deletions(-) diff --git a/morphlib/morphloader.py b/morphlib/morphloader.py index 144afe96..bdbabe46 100644 --- a/morphlib/morphloader.py +++ b/morphlib/morphloader.py @@ -388,43 +388,24 @@ class MorphologyLoader(object): self._predefined_build_systems['manual'] = \ morphlib.buildsystem.ManualBuildSystem() - def parse_morphology_text(self, text, morph_filename): - '''Parse a textual morphology. - - The text may be a string, or an open file handle. + def load_from_string(self, string, + filename='string'): # pragma: no cover + '''Load a morphology from a string. - Return the new Morphology object, or raise an error indicating - the problem. This method does minimal validation: a syntactically - correct morphology is fine, even if none of the fields are - valid. It also does not set any default values for any of the - fields. See validate and set_defaults. + Return the Morphology object. ''' try: - obj = yaml.safe_load(text) + obj = yaml.safe_load(string) except yaml.error.YAMLError as e: - raise MorphologyNotYamlError(morph_filename, e) + raise MorphologyNotYamlError(filename, e) if not isinstance(obj, dict): - raise NotADictionaryError(morph_filename) + raise NotADictionaryError(filename) m = morphlib.morphology.Morphology(obj) - m.filename = morph_filename - return m - - def load_from_string(self, string, - filename='string'): # pragma: no cover - '''Load a morphology from a string. - - Return the Morphology object. - - ''' - - if string is None: - return None - - m = self.parse_morphology_text(string, filename) + m.filename = filename self.validate(m) self.set_commands(m) self.set_defaults(m) diff --git a/morphlib/morphloader_tests.py b/morphlib/morphloader_tests.py index 1a75b51a..50fa765f 100644 --- a/morphlib/morphloader_tests.py +++ b/morphlib/morphloader_tests.py @@ -61,7 +61,7 @@ name: foo kind: chunk build-system: manual ''' - morph = self.loader.parse_morphology_text(string, 'test') + morph = self.loader.load_from_string(string, 'test') self.assertEqual(morph['kind'], 'chunk') self.assertEqual(morph['name'], 'foo') self.assertEqual(morph['build-system'], 'manual') @@ -69,12 +69,12 @@ build-system: manual def test_fails_to_parse_utter_garbage(self): self.assertRaises( morphlib.morphloader.MorphologySyntaxError, - self.loader.parse_morphology_text, ',,,', 'test') + self.loader.load_from_string, ',,,', 'test') def test_fails_to_parse_non_dict(self): self.assertRaises( morphlib.morphloader.NotADictionaryError, - self.loader.parse_morphology_text, '- item1\n- item2\n', 'test') + self.loader.load_from_string, '- item1\n- item2\n', 'test') def test_fails_to_validate_dict_without_kind(self): m = morphlib.morphology.Morphology({ @@ -800,9 +800,10 @@ build-system: manual name: foo kind: cluster systems: - - morph: bar + - morph: bar + deploy: {} ''' - m = self.loader.parse_morphology_text(string, 'test') + m = self.loader.load_from_string(string, 'test') self.loader.set_defaults(m) self.loader.validate(m) self.assertEqual(m['name'], 'foo') @@ -851,12 +852,17 @@ build-system: manual def test_multi_line_round_trip(self): s = ('name: foo\n' - 'kind: bar\n' + 'kind: system\n' 'description: |\n' ' 1 2 3\n' ' 4 5 6\n' - ' 7 8 9\n') - m = self.loader.parse_morphology_text(s, 'string') + ' 7 8 9\n' + 'arch: x86_64\n' + 'strata:\n' + '- name: le-chunk\n' + ' morph: le-chunk\n' + 'configuration-extensions: []\n') + m = self.loader.load_from_string(s, 'string') self.assertEqual(s, self.loader.save_to_string(m)) def test_smoketest_multi_line_unicode(self): diff --git a/morphlib/plugins/diff_plugin.py b/morphlib/plugins/diff_plugin.py index 9855c39f..6a66dba7 100644 --- a/morphlib/plugins/diff_plugin.py +++ b/morphlib/plugins/diff_plugin.py @@ -108,8 +108,7 @@ class DiffPlugin(cliapp.Plugin): definitions = mf.list_morphologies() system_paths = set() for definition in definitions: - m = ml.parse_morphology_text(mf.read_file(definition), - definition) + m = ml.load_from_string(mf.read_file(definition), definition) if m.get('kind') == 'system' or 'strata' in m: system_paths.add(definition) return reponame, ref, system_paths -- cgit v1.2.1