def test_shortcut_functions(self): jsonpath.auto_id_field = None parse_result = parser.parse(self.string, debug=True).find(self.data) match_result = parser.match(self.string, self.data, debug=True) match1_result = parser.match1(self.string, self.data, debug=True) self.assertEqual(match_result, [r.value for r in parse_result]) if match_result: self.assertEqual(match_result[0], match1_result) else: self.assertIsNone(match1_result)
def test_fields_value(self): jsonpath.auto_id_field = None result = parser.parse(self.string, debug=True).find(self.data) if isinstance(self.target, list): self.assertEqual(self.target, [r.value for r in result]) elif isinstance(self.target, set): self.assertEqual(self.target, set([r.value for r in result])) elif isinstance(self.target, (int, float)): self.assertEqual(self.target, result[0].value) else: self.assertEqual(self.target, result[0].value)
def test_fields_value(self): jsonpath.auto_id_field = None result = parser.parse(self.string, debug=True).find(self.data) if isinstance(self.target, list): self.assertEqual(self.target, [r.value for r in result]) elif isinstance(self.target, set): self.assertEqual(self.target, set([r.value for r in result])) elif isinstance(self.target, (int, float)): self.assertEqual(self.target, result[0].value) else: self.assertEqual(self.target, result.value)
def check_paths(self, test_cases): # Note that just manually building an AST would avoid this dep and # isolate the tests, but that would suck a bit # Also, we coerce iterables, etc, into the desired target type for string, data, target in test_cases: print('parse("%s").find(%s).paths =?= %s' % (string, data, target)) result = parser.parse(string).find(data) if isinstance(target, list): assert [str(r.full_path) for r in result] == target elif isinstance(target, set): assert set([str(r.full_path) for r in result]) == target else: assert str(result.path) == target
def __init__(self, *args): path = args[0] self.jsonpath = jsonpath_parser.parse(path) self._return_multi = False if len(args) > 1 and args[1]: self._return_multi = args[1]