| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
Now that we get scalar Nodes, it is easier to just give the node and
extract the provenance as needed.
|
|
|
|
|
|
|
| |
Now that we have scalar nodes, we can directly give the scalar to the
method.
- Adapt the plugin method to also not access via the key
|
|
|
|
|
|
|
|
|
| |
With nodes being propagated better, we now don't need to extract
provenance beforehand. Therefore removing the ability to provide
indiced when getting provenance.
- Also add 'scalar_at' on 'SequenceNode', in order to fetch a scalar
node at a specific indice
|
|
|
|
|
| |
The provenance can be constructed afterwards, so we don't need to
pre-calculate it.
|
|
|
|
|
|
|
| |
Cython can bypass the normal python mechanism to create new objects,
which makes their instantation faster. See
https://cython.readthedocs.io/en/latest/src/userguide/extension_types.html#fast-instantiation
for more details.
|
|
|
|
|
|
|
|
| |
This allows us to type its value more strictly, allowing for more
efficient access.
- Also implement 'node_at' on 'SequenceNode', to allow some tests to
test some internals generically.
|
|
|
|
|
| |
This ensures that we are not breaking our encapsulation and that the
modules accessing 'Node' from C are correctly typed.
|
|
|
|
|
| |
A direct replacement would be isinstance(obj, MappingNode) if someone
really needs it.
|
|
|
|
| |
- adapt all call sites to use the new API
|
|
|
|
|
|
|
| |
Using 'Node.from_dict({})' can replace new_empty_node, and the rest
is not needed anymore.
- Adapt all call sites
|
|
|
|
|
|
|
| |
There was a single place using 'node_extend_list', which we can replace
more easily with 'SequenceNode.append'.
Also rewrite _projectrefs.py:_lookup to use the new API more effectively
|
|
|
|
|
|
|
|
|
| |
This changes how we were handling synthetic nodes. Previously, we would
have them as coming from a 'SYNTHETIC_FILE'. This is not correct when
we need the position in the real file when adding new information to a
file we will end up writing to disk (like project_ref).
This is a prerequisite for further work on cleaning how it is done.
|
|
|
|
|
|
|
| |
This new methods is here to replace the previous 'new_node_from_dict'
that will be moved to a private method.
Adapt all call sites to use the new 'from_dict' method.
|
|
|
|
|
| |
- Also take care of node_composite_move in the same way.
- Adapt all calling places
|
| |
|
|
|
|
|
|
| |
We had a large if-else clause in 'composite_dict' that was looking at
the type of the source and acting based on that. This is easier to
handle once split on each type of 'Node'
|
| |
|
| |
|
|
|
|
|
| |
'composite_dict' is a more internal method and we don't really need to
access it there
|
| |
|
|
|
|
|
|
|
|
|
| |
Some call places do not need calls to 'node_sanitize' anymore, therefore
removing the call entirely.
Other still use it for convenience, but that doesn't seem the right way
to do it for consistency. Those places have been replaced by calls to
'Node.strip_node_info()'.
|
|
|
|
|
| |
Remove completely '_yaml.dump()' and replace all notions and call by
'roundtrip_dump'
|
|
|
|
|
| |
Now that both are equivalent, we can skip the sanitization part before
the yaml call.
|
|
|
|
|
| |
This removes the need of calling _yaml.dump(), as roundtrip_dump
is now equivalent.
|
|
|
|
|
|
| |
This removes the need of manually stringifying the values in
roundtrip_dump by registering special Ruamel representer for each
value we might expect.
|
|
|
|
|
|
|
|
| |
Since ujson already sorts the keys, we just need to be able to jsonify
Nodes sensibly. This is done by implementing __json__ on the 'Node' base
class.
This does not break the cache keys.
|
| |
|
|
|
|
|
|
|
| |
- node_find_target with 'key' is only used once in the codebase.
We can remove and simplify this function
- Allow 'MappingNode.get_node()' to be called without any
'expected_types'
|
|
|
|
|
|
| |
- Implement __setitem__ on 'MappingNode'
- Implement __setitem__ on 'SequenceNode'
- Adapt all call sites to use the new calling way.
|
|
|
|
|
|
| |
One difference is that 'MappingNode.items()' does not strip the
provenance from scalars and lists, which ends up not affecting the
code much.
|
|
|
|
|
|
|
| |
This is to mimic the 'dict.values()' interface.
- Adapt parts of the code calling 'node_items' but ignoring the
first value to use this instead
|
|
|
|
|
| |
This mimics the dict.keys() method but returns a list instead of a
dict_keys, for cython performance reasons
|
|
|
|
|
| |
- Also add a convenience method 'safe_del' catching the exception
when we don't care if the value was there or not.
|
|
|
|
| |
Also adaprt every part of the code calling it
|
|
|
|
|
|
|
|
|
|
|
| |
Sometimes, we might want to have a list or a string, in which case, we
can now use 'get_node', which can return multiple types.
This method doesn't contain a 'default' value, as building a 'Node' from
it would be hard. We therefore just have a 'allow_none' flag that allows
returning 'None' when the value is not found.
- includes: use the new 'get_node' instead of trying multiple versions
|
|
|
|
| |
We shouldn't have to create normal nodes ever. Let's ensure we don't
|
| |
|
| |
|
|
|
|
| |
This can now be done more easily with the Node api
|
|
|
|
|
|
|
| |
The new yaml API is able of getting these access with the same error
messages handling.
Having this helper is therefore not useful anymore.
|
|
|
|
|
| |
This method is unused and can be easily reimplemented with the new
Node API by looping over nodes.
|
|
|
|
|
|
| |
This function is hard to make generic and, with the new API, the access
is simplified. Therefore, removing this function and migrating all its
usages
|
|
|
|
|
|
|
|
|
| |
- Adding 'get_sequence' on MappingNode to access sequences in a mapping
- Adding 'sequence_at' on SequenceNode to access sequences in a sequence
- Adding 'mapping_at' on SequenceNode to access mappings in a sequence
Using "*_at" in sequences allows us to quickly understand if we are
dealing with a sequence or a mapping.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
- Add the 'as_int()' method on 'ScalarNode' to replace
'node_get(mapping, key, int)'
- Adapt all call sites to use the new API
|
|
|
|
|
|
|
|
|
|
|
| |
- 'as_bool()' casts a ScalarNode into a boolean, understanding both
'True' and 'False' as truthy-falsy values, as per node_get(type=bool)
behavior
- 'is_none()' allwos checking whether the scalar node contains a 'None'
value. Since 'None' cannot be used when working with booleans, we need
to have a way of checking for 'None' when we actually need the
information of whether the value is unset.
- Adapt all call places to use the new API
|
|
|
|
|
|
|
|
|
|
| |
- 'get_scalar()' allows retrieving a scalar node from a mapping.
- 'as_str()' casts a ScalarNode into a string (thus removing the node
information).
Both together, those replace 'node_get(mapping, key, type=str)' but
also allow retrieving the 'Node' itself, which will allow in the future
lazier provenance computation.
|
|
|
|
|
|
|
|
| |
This allows to get a mapping node from another 'MappingNode',
replacing 'node_get(my_mapping, key, type=dict)'
Also changes all places where 'node_get' was called like that by
the new API.
|
|
|
|
|
|
|
| |
This allows us to represent sequences (lists) more efficiently.
This is the third type that is needed in order to know what kind of
datastructure we are handling in our graph.
|