From 97d118301313deddfaf41b91bad772a4ed30897f Mon Sep 17 00:00:00 2001 From: Benjamin Schubert Date: Tue, 11 Jun 2019 10:48:23 +0100 Subject: _yaml: Remove use of expected_type=None in 'node_get()' In a strongly typed API with Node, having a 'None' as expected type is hard to make nice. Moreover, this is rarely used in the codebase. Thus, adapting the call sites to not use 'None' as an expected type. --- src/buildstream/_includes.py | 20 +++++++++++--------- tests/frontend/cross_junction_workspace.py | 3 --- tests/frontend/workspace.py | 1 - 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/buildstream/_includes.py b/src/buildstream/_includes.py index f792b7716..0acf4222c 100644 --- a/src/buildstream/_includes.py +++ b/src/buildstream/_includes.py @@ -35,16 +35,18 @@ class Includes: if current_loader is None: current_loader = self._loader - includes = _yaml.node_get(node, None, '(@)', default_value=None) - if isinstance(includes, str): - includes = [includes] + try: + includes = node.get_str('(@)', default=None) + if includes is not None: + includes = [includes] + except LoadError: + try: + includes = _yaml.node_get(node, list, '(@)') + except LoadError: + provenance = _yaml.node_get_provenance(node, key='(@)') + raise LoadError(LoadErrorReason.INVALID_DATA, + "{}: {} must either be list or str".format(provenance, _yaml.node_sanitize(node))) - if not isinstance(includes, list) and includes is not None: - provenance = _yaml.node_get_provenance(node, key='(@)') - raise LoadError(LoadErrorReason.INVALID_DATA, - "{}: {} must either be list or str".format(provenance, includes)) - - include_provenance = None if includes: include_provenance = _yaml.node_get_provenance(node, key='(@)') _yaml.node_del(node, '(@)') diff --git a/tests/frontend/cross_junction_workspace.py b/tests/frontend/cross_junction_workspace.py index 14039186c..974aba4bd 100644 --- a/tests/frontend/cross_junction_workspace.py +++ b/tests/frontend/cross_junction_workspace.py @@ -75,7 +75,6 @@ def test_list_cross_junction(cli, tmpdir): result.assert_success() loaded = _yaml.load_data(result.output) - assert isinstance(_yaml.node_get(loaded, None, 'workspaces'), list) workspaces = _yaml.node_get(loaded, list, 'workspaces') assert len(workspaces) == 1 assert 'element' in workspaces[0] @@ -97,7 +96,6 @@ def test_close_cross_junction(cli, tmpdir): result.assert_success() loaded = _yaml.load_data(result.output) - assert isinstance(_yaml.node_get(loaded, None, 'workspaces'), list) workspaces = _yaml.node_get(loaded, list, 'workspaces') assert not workspaces @@ -116,7 +114,6 @@ def test_close_all_cross_junction(cli, tmpdir): result.assert_success() loaded = _yaml.load_data(result.output) - assert isinstance(_yaml.node_get(loaded, None, 'workspaces'), list) workspaces = _yaml.node_get(loaded, list, 'workspaces') assert not workspaces diff --git a/tests/frontend/workspace.py b/tests/frontend/workspace.py index 92b257872..ab79a9d3e 100644 --- a/tests/frontend/workspace.py +++ b/tests/frontend/workspace.py @@ -608,7 +608,6 @@ def test_list(cli, tmpdir, datafiles): result.assert_success() loaded = _yaml.load_data(result.output) - assert isinstance(_yaml.node_get(loaded, None, 'workspaces'), list) workspaces = _yaml.node_get(loaded, list, 'workspaces') assert len(workspaces) == 1 -- cgit v1.2.1