summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Schubert <ben.c.schubert@gmail.com>2019-06-06 17:36:15 +0100
committerbst-marge-bot <marge-bot@buildstream.build>2019-06-07 16:38:57 +0000
commitfc1503a84ba33dffb7034d4522458facd1178a09 (patch)
treef4c167ecff1460bda363f45941d57a707d560aab
parent20747fc2a275c61d4aa135831e3967aca2081267 (diff)
downloadbuildstream-fc1503a84ba33dffb7034d4522458facd1178a09.tar.gz
_yaml: Restrict parameter of node_items and node_keys to be 'Node'
In order to move to a cleaner Node api, we need to ensure that what we are treating is correctly set up as being Nodes.
-rw-r--r--src/buildstream/_yaml.pxd2
-rw-r--r--src/buildstream/_yaml.pyx18
-rw-r--r--src/buildstream/element.py2
3 files changed, 8 insertions, 14 deletions
diff --git a/src/buildstream/_yaml.pxd b/src/buildstream/_yaml.pxd
index 6a12fa7b3..b6043e5a8 100644
--- a/src/buildstream/_yaml.pxd
+++ b/src/buildstream/_yaml.pxd
@@ -41,5 +41,5 @@ cdef class ProvenanceInformation:
cpdef object node_get(Node node, object expected_type, str key, list indices=*, object default_value=*, bint allow_none=*)
cpdef void node_validate(Node node, list valid_keys) except *
cpdef void node_set(Node node, object key, object value, list indices=*) except *
-cpdef list node_keys(object node)
+cpdef list node_keys(Node node)
cpdef ProvenanceInformation node_get_provenance(Node node, str key=*, list indices=*)
diff --git a/src/buildstream/_yaml.pyx b/src/buildstream/_yaml.pyx
index f14b55e51..c565fe12e 100644
--- a/src/buildstream/_yaml.pyx
+++ b/src/buildstream/_yaml.pyx
@@ -693,21 +693,17 @@ def node_extend_list(Node node, str key, Py_ssize_t length, object default):
# tuples in a dictionary loaded from project YAML.
#
# Args:
-# node (dict): The dictionary node
+# node (Node): The dictionary node
#
# Yields:
# (str): The key name
# (anything): The value for the key
#
-def node_items(node):
- if type(node) is not Node:
- node = Node(node, _SYNTHETIC_FILE_INDEX, 0, 0)
-
+def node_items(Node node):
cdef str key
+ cdef Node value
for key, value in node.value.items():
- if type(value) is not Node:
- value = Node(value, _SYNTHETIC_FILE_INDEX, 0, 0)
if type(value.value) is dict:
yield (key, value)
elif type(value.value) is list:
@@ -722,15 +718,13 @@ def node_items(node):
# in a dictionary loaded from project YAML.
#
# Args:
-# node (dict): The dictionary node
+# node (Node): The dictionary node
#
# Yields:
# (str): The key name
#
-cpdef list node_keys(object node):
- if type(node) is Node:
- return list((<Node> node).value.keys())
- return list(node.keys())
+cpdef list node_keys(Node node):
+ return list(node.value.keys())
# node_del()
diff --git a/src/buildstream/element.py b/src/buildstream/element.py
index 84c8f20ff..a60546084 100644
--- a/src/buildstream/element.py
+++ b/src/buildstream/element.py
@@ -1986,7 +1986,7 @@ class Element(Plugin):
flags |= SandboxFlags.NETWORK_ENABLED | SandboxFlags.INHERIT_UID
# Apply project defined environment vars to set for a shell
- for key, value in _yaml.node_items(shell_environment):
+ for key, value in shell_environment.items():
environment[key] = value
# Setup any requested bind mounts