Enhancements:
* Support for Python 3.11 has been added.
* A new Search Keyword has been added, [unique([NAME])]. This operates against
collections to return only values which have no duplicates within the
collection; i.e.: [1, 2, 2, 3] has unique values, [1, 3]. The NAME argument
is required when operating against Hashes (maps/dicts) and Arrays-of-Hashes
(sequences/lists of maps/dicts) to identify which field/property to evaluate
for uniqueness. This can be inverted to return only results which are
duplicated within the collection.
* A new Search Keyword has been added, [distinct([NAME])]. This operates
against collections to return exactly one of every value within the
collection, discarding duplicates; i.e.: [1, 2, 2, 3] has distinct values,
[1, 2, 3]. The NAME argument is required when operating against Hashes
(maps/dicts) and Arrays-of-Hashes (sequences/lists of maps/dicts) to identify
which field/property to evaluate for uniqueness. This cannot be inverted.
* Added a new Collector Math Operator: & (intersection)
As in set mathematics, this yields only elements of two collections which are
common to both collections. Unlike set mathematics, collections allow
duplicate elements. If you need to enforce distinctness of the intersected
results, use the [distinct([NAME])] Search Keyword against the collected
result, as in `((list1)&(list2))[distinct([NAME])]`.
Bug Fixes:
* A typographical error in yamlpath.enums has been corrected with backward-
compatible adapters in place to support both the correct and incorrect
spelling of PathSeparators (formerly PathSeperators). If the PathSeperators
version appears in your own code, please update to the new spelling. The
incorrectly spelled version of this enumeration is now deprecated and will be
removed in a future release. Thanks go entirely to
https://github.com/AndydeCleyre for working so hard to submit this fix!
* Processor.get_nodes would emit a nonobvious error message when mustexist is
left at its default value (False) and yaml_path contained ** or * segments.
Now, these segment types are excluded from generating "missing" nodes; only
nodes which exist can be matched by * and **. Credit and my thanks go to
https://github.com/gdubicki for discovering and reporting this issue.