]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: utils: modeling: function to try parse yaml or json
authorAleš Mrázek <ales.mrazek@nic.cz>
Tue, 20 Sep 2022 14:35:27 +0000 (16:35 +0200)
committerAleš Mrázek <ales.mrazek@nic.cz>
Tue, 10 Jan 2023 18:57:13 +0000 (19:57 +0100)
manager/knot_resolver_manager/utils/modeling/__init__.py
manager/knot_resolver_manager/utils/modeling/parsing.py

index 3db537dd2a6de4b8c716fe1db5e404fa472f6ed0..9404775fa5c55efe5144cadac8d974e1407002ef 100644 (file)
@@ -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",
 ]
index 9d55989b2ca4f66543b5711134dd1cb36b89afba..6212905d96c4150b0a66c0929a980fec90493d80 100644 (file)
@@ -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}")