def check_json_path(tolerance: Tolerance): """ Check the JSON path of a tolerance and raise :exc:`InvalidActivity` when the path is missing or invalid. See: https://github.com/h2non/jsonpath-ng """ if not HAS_JSONPATH: raise InvalidActivity( "Install the `jsonpath2` package to use a JSON path tolerance: " "`pip install chaostoolkit-lib[jsonpath]`.") if "path" not in tolerance: raise InvalidActivity( "hypothesis jsonpath probe tolerance must have a `path` key") try: path = tolerance.get("path", "").strip() if not path: raise InvalidActivity( "hypothesis probe tolerance JSON path cannot be empty") JSONPath.parse_str(path) except ValueError: raise InvalidActivity( "hypothesis probe tolerance JSON path {} is invalid".format(path)) except TypeError: raise InvalidActivity( "hypothesis probe tolerance JSON path {} has an invalid " "type".format(path))
def ensure_hypothesis_tolerance_is_valid(tolerance: Tolerance): """ Validate the tolerance of the hypothesis probe and raises :exc:`InvalidActivity` if it isn't valid. """ if not isinstance(tolerance, (bool, int, list, str, dict)): raise InvalidActivity( "hypothesis probe tolerance must either be an integer, " "a string, a boolean or a pair of values for boundaries. " "It can also be a dictionary which is a probe activity " "definition that takes an argument called `value` with " "the value of the probe itself to be validated") if isinstance(tolerance, dict): tolerance_type = tolerance.get("type") if tolerance_type == "probe": ensure_activity_is_valid(tolerance) elif tolerance_type == "regex": check_regex_pattern(tolerance) elif tolerance_type == "jsonpath": check_json_path(tolerance) elif tolerance_type == "range": check_range(tolerance) else: raise InvalidActivity( "hypothesis probe tolerance type '{}' is unsupported".format( tolerance_type))
def check_json_path(tolerance: Tolerance): """ Check the JSON path of a tolerance and raise :exc:`InvalidActivity` when the path is missing or invalid. See: https://github.com/h2non/jsonpath-ng """ if not HAS_JSONPATH: raise InvalidActivity( "Install the `jsonpath_ng` package to use a JSON path tolerance: " "`pip install chaostoolkit-lib[jsonpath]`.") if "path" not in tolerance: raise InvalidActivity( "hypothesis jsonpath probe tolerance must have a `path` key") try: path = tolerance.get("path") jparse.parse(path) except TypeError as t: raise InvalidActivity( "hypothesis probe tolerance path {} has an invalid type".format( path)) except JsonPathLexerError as e: raise InvalidActivity( "hypothesis probe tolerance JSON path '{}' is invalid: {}".format( str(e)))