Merged
Conversation
…raverse_dict does with reading nested dicts. Add "ensure_dict_key" to ensure all keys provided exist (they will be created if they do not) in a dict. Add "set_dict_key_value" to set a nested dict value to a value specified. Add "update_dict_key_value" to update a nested dict value (that is a dict) with a dict specified. Add "append_dict_key_value" and "extend_dict_key_value" to append or extend a nested dict value (that is a list) with values specified.
Contributor
|
@github-abcde This looks great. Could we get some Unit tests on these new functions please? |
Contributor
Author
|
Working on the unit tests...There are a lot of things to test :) |
Added TypeError handling in extend_dict_key_value. Fixed incorrect usage of OrderedDict. Small beautification of exception message in update_dict_key_value.
Added some pylint-inspired layout fixes (pylint really does not like this file).
twangboy
approved these changes
Apr 10, 2019
Contributor
twangboy
left a comment
There was a problem hiding this comment.
This looks great. Thanks for the tests!
Contributor
Author
|
Not sure if I fixed all the failing python3 tests, will monitor the test results and fix things tomorrow should any still fail. |
…not start with "test_". Good to know.
… in order to avoid random-ordered keys in a rendered string comparison. Also added check for jmespath library, and skip test_json_query test if not present (because "RuntimeError: json_query requires jmespath module installed").
… test needs to be skipped.
Contributor
Author
|
@twangboy Is there something else that I can (or need to) do in order for this branch to be merged? |
twangboy
approved these changes
Apr 25, 2019
github-abcde
pushed a commit
to basisbeeld/salt
that referenced
this pull request
Jul 26, 2019
…tools More dictupdate tools
github-abcde
pushed a commit
to basisbeeld/salt
that referenced
this pull request
Dec 9, 2019
…tools More dictupdate tools
github-abcde
pushed a commit
to basisbeeld/salt
that referenced
this pull request
Dec 9, 2019
…tools More dictupdate tools
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
This PR adds functions to write to nested dicts, like
traverse_dictdoes for reading from nested dicts.The four basic functionalities (set, update, append, extend) that can be applied to a nested dict are also made available as jinja filters.
The key/keys provided to these functions need not exist in the provided dict yet, they will be created.
Support has been included for configurable delimiters and the use of OrderedDicts instead of dicts (when new nested entries are created).
Added two pylint-inspired fixes (line 58-59, 69-77).
What issues does this PR fix or reference?
None that I know of.
Previous Behavior
Unable to update nested dictionaries easily (in salt and in Jinja)
New Behavior
Updating nested dictionaries in salt (for example to set the changes in a state):
Though the above could also be used if multiple changes need to be presented in a list, by using:
Updating nested dictionaries in Jinja:
Results in:
Another Jinja example:
Results in:
Tests written?
Yes
Commits signed with GPG?
Yes