diff options
author | Benjamin Schubert <ben.c.schubert@gmail.com> | 2019-06-11 10:48:23 +0100 |
---|---|---|
committer | bst-marge-bot <marge-bot@buildstream.build> | 2019-07-15 14:14:02 +0000 |
commit | ad5aa05826431b1b34c220f20e93bf6e05b292a0 (patch) | |
tree | b73290c2e8fe0a6ef6b3028c5c0b51f94fcc682d | |
parent | 4a56ebe6e589e2aa5d8da3fc2b76f76a19aa03b7 (diff) | |
download | buildstream-ad5aa05826431b1b34c220f20e93bf6e05b292a0.tar.gz |
_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.
-rw-r--r-- | src/buildstream/_includes.py | 20 | ||||
-rw-r--r-- | tests/frontend/cross_junction_workspace.py | 3 | ||||
-rw-r--r-- | 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 8f507b566..133cf50d0 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 7ca06bdd4..339f0d496 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 |