diff options
author | Benjamin Schubert <ben.c.schubert@gmail.com> | 2019-06-12 18:33:36 +0100 |
---|---|---|
committer | Benjamin Schubert <contact@benschubert.me> | 2019-06-12 17:57:50 +0000 |
commit | a26de50940f702eec13663c862e50d9eb73703c4 (patch) | |
tree | 0317b637e9a40da73e53ad67443281e061b70ec3 | |
parent | 147190b6dc5094cdc550e1250c5bda027796b0d9 (diff) | |
download | buildstream-bschubert/create-node-on-set-for-mapping.tar.gz |
_yaml: Create Node when setting a dictionarybschubert/create-node-on-set-for-mapping
This ensures a better consistency when we are working with Nodes, by
ensuring we always have nodes for both lists and dicts.
-rw-r--r-- | src/buildstream/_yaml.pyx | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/buildstream/_yaml.pyx b/src/buildstream/_yaml.pyx index 678374272..68724a54b 100644 --- a/src/buildstream/_yaml.pyx +++ b/src/buildstream/_yaml.pyx @@ -623,18 +623,21 @@ cdef list __trim_list_provenance(list value): # cpdef void node_set(Node node, object key, object value, list indices=None) except *: cdef int idx - - if type(value) is list: - value = __new_node_from_list(value) + cdef value_type = type(value) if indices: node = <Node> (<dict> node.value)[key] key = indices.pop() for idx in indices: node = <Node> (<list> node.value)[idx] - if type(value) is Node: + if value_type is Node: node.value[key] = value else: + if value_type is list: + value = __new_node_from_list(value).value + elif value_type is dict: + value = new_node_from_dict(value).value + try: # Need to do this just in case we're modifying a list old_value = <Node> node.value[key] |