From: Aleš Mrázek Date: Tue, 20 Sep 2022 14:35:27 +0000 (+0200) Subject: manager: utils: modeling: function to try parse yaml or json X-Git-Tag: v6.0.0a1~12^2~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=933d48518f70f070eaae487005fe9c33dcb9ca2a;p=thirdparty%2Fknot-resolver.git manager: utils: modeling: function to try parse yaml or json --- diff --git a/manager/knot_resolver_manager/utils/modeling/__init__.py b/manager/knot_resolver_manager/utils/modeling/__init__.py index 3db537dd2..9404775fa 100644 --- a/manager/knot_resolver_manager/utils/modeling/__init__.py +++ b/manager/knot_resolver_manager/utils/modeling/__init__.py @@ -1,6 +1,6 @@ from .base_schema import BaseSchema from .base_value_type import BaseValueType -from .parsing import parse, parse_json, parse_yaml +from .parsing import parse, parse_json, parse_yaml, try_to_parse __all__ = [ "BaseValueType", @@ -8,4 +8,5 @@ __all__ = [ "parse", "parse_yaml", "parse_json", + "try_to_parse", ] diff --git a/manager/knot_resolver_manager/utils/modeling/parsing.py b/manager/knot_resolver_manager/utils/modeling/parsing.py index 9d55989b2..6212905d9 100644 --- a/manager/knot_resolver_manager/utils/modeling/parsing.py +++ b/manager/knot_resolver_manager/utils/modeling/parsing.py @@ -96,3 +96,14 @@ def parse_yaml(data: str) -> Any: def parse_json(data: str) -> Any: return _Format.JSON.parse_to_dict(data) + + +def try_to_parse(data: str) -> ParsedTree: + """Attempt to parse the data as a YAML or JSON string.""" + try: + return parse_yaml(data) + except yaml.YAMLError as ye: + try: + return parse_json(data) + except json.JSONDecodeError as je: + raise DataParsingError(f"failed to parse data, YAML: {ye}, JSON: {je}")