Skip to content

Commit

Permalink
Merge pull request #2 from jmespath-community/jep/objects
Browse files Browse the repository at this point in the history
JEP-13 Object Manipulation Functions
  • Loading branch information
springcomp authored Dec 8, 2022
2 parents fcc3513 + d8c6178 commit 974fd67
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
4 changes: 2 additions & 2 deletions jmespath/compat.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import sys
import inspect
from itertools import zip_longest

iteritems = dict.items

map = map
text_type = str
string_type = str

Expand Down
16 changes: 15 additions & 1 deletion jmespath/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
import json

from jmespath import exceptions
from jmespath.compat import string_type as STRING_TYPE
from jmespath.compat import get_methods
from jmespath.compat import iteritems
from jmespath.compat import map
from jmespath.compat import string_type as STRING_TYPE


# python types -> jmespath types
Expand Down Expand Up @@ -302,6 +304,14 @@ def _func_sort(self, arg):
def _func_sum(self, arg):
return sum(arg)

@signature({'types': ['object']})
def _func_items(self, arg):
return list(map(list, iteritems(arg)))

@signature({'types': ['array']})
def _func_from_items(self, items):
return dict(items)

@signature({"types": ['object']})
def _func_keys(self, arg):
# To be consistent with .values()
Expand Down Expand Up @@ -519,6 +529,10 @@ def _func_max_by(self, array, expref):
else:
return None

@signature({'types': ['array'], 'variadic': True})
def _func_zip(self, *arguments):
return list(map(list, zip(*arguments)))

def _create_key_func(self, expref, allowed_types, function_name):
def keyfunc(x):
result = expref.visit(expref.expression, x)
Expand Down
31 changes: 30 additions & 1 deletion tests/compliance/functions.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"empty_list": [],
"empty_hash": {},
"objects": {"foo": "bar", "bar": "baz"},
"items": [["a", "first"], ["b", "second"], ["c", "third"]],
"null_key": null
},
"cases": [
Expand Down Expand Up @@ -175,6 +176,22 @@
"expression": "floor(str)",
"error": "invalid-type"
},
{
"expression": "sort_by(items(objects), &[0])",
"result": [["bar", "baz"], ["foo", "bar"]]
},
{
"expression": "items(empty_hash)",
"result": []
},
{
"expression": "items(numbers)",
"error": "invalid-type"
},
{
"expression": "from_items(items)",
"result": {"a": "first", "b": "second", "c": "third"}
},
{
"expression": "length('abc')",
"result": 3
Expand All @@ -189,7 +206,7 @@
},
{
"expression": "length(@)",
"result": 12
"result": 13
},
{
"expression": "length(strings[0])",
Expand Down Expand Up @@ -588,6 +605,18 @@
"comment": "function projection on single arg function",
"expression": "array[].to_number(@)",
"result": [-1, 3, 4, 5, 100]
},
{
"expression": "zip(strings, numbers)",
"result": [["a", -1], ["b", 3], ["c", 4]]
},
{
"expression": "zip(strings, numbers, decimals)",
"result": [["a", -1, 1.01], ["b", 3, 1.2], ["c", 4, -1.5]]
},
{
"expression": "zip(str)",
"error": "invalid-type"
}
]
}, {
Expand Down

0 comments on commit 974fd67

Please sign in to comment.