Skip to content

Conversation

@tacerus
Copy link
Contributor

@tacerus tacerus commented Jan 30, 2026

What does this PR do?

So far, lists would always be compared as a whole - in case of lists containing dicts as elements, this would cause lots of output even if only parts of the contained dicts changed. Allow matching of lists with consistently keyed dicts.
We do have listdiffer, but custom logic was implemented as importing listdiffer in dictdiffer would cause a circular import.

Let me know if you have a better idea for this.

What issues does this PR fix or reference?

Fixes

Previous Behavior

No way to diff dicts in lists in dicts.

New Behavior

Functionality is available.

Merge requirements satisfied?

[NOTICE] Bug fixes or features added to Salt require tests.

Commits signed with GPG?

Yes

So far, lists would always be compared as a whole - in case of lists
containing dicts as elements, this would cause lots of output even if
only parts of the contained dicts changed. Allow matching of lists with
consistently keyed dicts.
We do have listdiffer, but custom logic was implemented as importing
listdiffer in dictdiffer would cause a circular import.

Signed-off-by: Georg Pfuetzenreuter <georg.pfuetzenreuter@suse.com>
Comment on lines +101 to +108
list_dict_matchers
List of keys to consider for deep comparison of dicts inside a list.
If not specified or if not all of the dicts contained in a list are
matchable with one of these keys, changes to dicts in such a list will
return the two differing lists as a whole instead of only the differing
dict elements.
Empty by default, meaning lists of dicts will not be diffed deeply.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggested adding example(s).

Also this isn't clear to me what this means:

dicts contained in a list are
matchable with one of these keys

How can a dict match (compare to) a single key?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, for example

{"a": [{"name": "foo"}, {"name": "bar"}]}

can be matched on the key name. But

{"a": [{"name": "foo"}, {"type": "bar"}]}

can not.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants