def test_keyed_object_partial_wildcard(self): data = EXAMPLE_PARTIAL_WILDCARDS bad_path = '$households[0].name*' # missing '.' after $ try: extractor.find_by_jsonpath(data, bad_path) except Exception: pass else: self.fail('Should have thrown an error') expected = [('$.households[0].name*', 2), ('$.households[1].name*', 1), ('$.households[*].name*', 3), ('$.households[0].name1', 1), ('$.households[*].name1', 2)] for path, matches in expected: self.assertEqual(len(extractor.find_by_jsonpath(data, path)), matches), (path, matches)
def test_find_by_jsonpath__fallback_to_jsonpath_ng(self): obj = { 'dose-1': { 'id': 1, }, 'dose-2': { 'id': 2, }, 'person-1': { 'id': 3, }, } expected = set([1, 2, 3]) path = '$.*.id' result = set([x.value for x in extractor.find_by_jsonpath(obj, path)]) self.assertEqual(expected, result)
def test_find_by_jsonpath__filter_by_prefix(self): obj = { 'dose-1': { 'id': 1, }, 'dose-2': { 'id': 2, }, 'person-1': { 'id': 3, }, } expected = set([1, 2]) path = '$.dose-*.id' result = set([x.value for x in extractor.find_by_jsonpath(obj, path)]) self.assertEqual(expected, result)
def test_find_by_jsonpath__fallback_array(self): obj = { 'households': [ { 'id': 1, }, { 'id': 2, }, { 'id': 3, }, ] } expected = set([1, 2, 3]) path = '$.households[*].id' result = set([x.value for x in extractor.find_by_jsonpath(obj, path)]) self.assertEqual(expected, result)
def test_find_by_jsonpath__nested(self): obj = { 'dose-1': { 'id': 1, }, 'dose-2': { 'id': 2, }, 'person-1': { 'id': 3, 'household': { 'id': 4, }, }, } expected = set([4]) path = '$.person-*.household.id' result = set([x.value for x in extractor.find_by_jsonpath(obj, path)]) self.assertEqual(expected, result)
def test_find_by_jsonpath__no_match(self): obj = {} res = [i for i in extractor.find_by_jsonpath(obj, 'some.missing.path')] assert (not res)