def extract_jsonpath(self, jsonpath_query, default=None): jsonpath_expr = jsonpath_parse(jsonpath_query) body = self.json() matches = jsonpath_expr.find(body) if not matches: return default return matches[0].value
def assert_not_jsonpath(self, jsonpath_query, msg=None): jsonpath_expr = jsonpath_parse(jsonpath_query) body = self.json() matches = jsonpath_expr.find(body) if matches: msg = msg or "JSONPath query %r did match response: %s" % ( jsonpath_query, self.text[:BODY_LIMIT]) raise AssertionError(msg) return self
def jsonpath(path, resp): if isinstance(resp, str): data = json.loads(resp) else: data = resp.json() expr = jsonpath_parse(path) vals = [x.value for x in expr.find(data)] if vals: return random.choice(vals) if TAKE_RANDOM else vals[0] else: raise KeyError("jsonpath: No values found for %r" % path)
def json_path(json_doc, path_query): try: j = json.loads(json_doc) parsed_query = jsonpath_parse(path_query) key_found = parsed_query.find(j) if key_found: return key_found[0].value else: return None except Exception as e: logging.error(f"json_path failed: {json_doc} path query: {path_query}") return None
def assert_jsonpath(self, jsonpath_query, expected_value=None, msg=None): jsonpath_expr = jsonpath_parse(jsonpath_query) body = self.json() matches = jsonpath_expr.find(body) if not matches: msg = msg or "JSONPath query %r didn't match response: %s" % ( jsonpath_query, self.text[:BODY_LIMIT]) raise AssertionError(msg) actual_value = matches[0].value if expected_value is not None and actual_value != expected_value: tmpl = "Actual value at JSONPath query (%r) isn't equal to expected (%r)" msg = msg or tmpl % (actual_value, expected_value) raise AssertionError(msg) return self
def apply_into_json(data, jpath, val): if jpath not in _JP_CACHE: _JP_CACHE[jpath] = jsonpath_parse(jpath) _JP_CACHE[jpath].update(data, val)
def parse(jsonpath_str): """Parse the jsonpath.""" return jsonpath_parse(jsonpath_str)
def apply_into_json(data, jpath, val): jsonpath_expr = jsonpath_parse(jpath) jsonpath_expr.update(data, val)