diff --git a/jeeves/core/parsers.py b/jeeves/core/parsers.py index 40a5679..ed383bf 100644 --- a/jeeves/core/parsers.py +++ b/jeeves/core/parsers.py @@ -3,6 +3,11 @@ from typing import Any, Text, MutableMapping from pathlib import Path import toml +import yaml +try: + from yaml import CLoader as Loader, CDumper as Dumper +except ImportError: + from yaml import Loader, Dumper from jeeves.core.objects import Flow, BaseObject @@ -44,6 +49,20 @@ class ObjectParser: def to_toml(cls, obj: BaseObject) -> Text: return toml.dumps(cls.to_dict(obj)) + @classmethod + def from_yaml(cls, serialized: Text) -> BaseObject: + dct = yaml.load(serialized, Loader=Loader) + return cls.from_dict(dct) + + @classmethod + def from_yaml_file(cls, path) -> BaseObject: + dct = yaml.load(path, Loader=Loader) + return cls.from_dict(dct) + + @classmethod + def to_yaml(cls, obj: BaseObject) -> Text: + return yaml.dump(cls.to_dict(obj), Dumper=Dumper) + class FlowParser(ObjectParser): object = Flow diff --git a/poetry.lock b/poetry.lock index 62b6876..423325c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -771,7 +771,7 @@ python-versions = "*" version = "227" [[package]] -category = "dev" +category = "main" description = "YAML parser and emitter for Python" name = "pyyaml" optional = false @@ -1081,7 +1081,7 @@ docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] testing = ["jaraco.itertools", "func-timeout"] [metadata] -content-hash = "5748d878d35d06c5a3aa0a58cf0701e0b530a7552bf3912cd1ebf9c796ac6f89" +content-hash = "5971fde5b20ddae1180a2f625dadd45dbb75af3a1d16a296867853e38d1044c7" python-versions = "^3.7" [metadata.files] diff --git a/pyproject.toml b/pyproject.toml index 373ce56..1e1ad93 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,7 @@ pydantic = "^0.32.2" click = "^7.0" toml = "^0.10.0" docker = "^4.1.0" +pyyaml = "^5.3.1" [tool.poetry.dev-dependencies] black = {version = "^18.3-alpha.0", allow-prereleases = true}