-
Notifications
You must be signed in to change notification settings - Fork 5.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
More dictupdate tools #52455
More dictupdate tools #52455
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.
@github-abcde This looks great. Could we get some Unit tests on these new functions please? |
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).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks great. Thanks for the tests!
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.
@twangboy Is there something else that I can (or need to) do in order for this branch to be merged? |
…tools More dictupdate tools
…tools More dictupdate tools
…tools More dictupdate tools
What does this PR do?
This PR adds functions to write to nested dicts, like
traverse_dict
does 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