feat(jmespath): add built in functions #2259
Merged
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.
Description of your changes
This PR adds a new
Functions
class to the JMESPath utility. This class holds the implementation for all the built-in functions listed in the JMESPath specification as well as a class method decorator to validate function arguments.Customers are not expected to use this class directly, instead the logic in it will allow them to use function expressions in their JMESPath expressions, for example:
This part of the code has been implemented as a class purposefully so that we, as well as customers, can extend the class and add new functions to the utility.
To facilitate this, the
Functions
class provides also a class method decorator defined as static method. Using this decorator a method implementing a JMESPath function can have its arguments validated at runtime for types, number, and whether or not the function is variadic.For example:
To keep the PR focused I am adding only the base functions, however the next PR will add some Powertools functions that are equivalent to the ones found in Python.
Related issues, RFCs
Issue number: #2206
Checklist
Breaking change checklist
Is it a breaking change?: NO
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
Disclaimer: We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful.