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)