sqlmesh.utils.yaml
1from __future__ import annotations 2 3import io 4import typing as t 5from collections import OrderedDict 6from os import getenv 7from pathlib import Path 8 9from ruamel.yaml import YAML, CommentedMap 10 11from sqlmesh.utils.errors import SQLMeshError 12from sqlmesh.utils.jinja import ENVIRONMENT 13 14JINJA_METHODS = { 15 "env_var": lambda key, default=None: getenv(key, default), 16} 17 18 19def load( 20 source: str | Path, raise_if_empty: bool = True, render_jinja: bool = True 21) -> t.OrderedDict: 22 """Loads a YAML object from either a raw string or a file.""" 23 path: t.Optional[Path] = None 24 25 if isinstance(source, Path): 26 path = source 27 with open(source, "r", encoding="utf-8") as file: 28 source = file.read() 29 30 if render_jinja: 31 source = ENVIRONMENT.from_string(source).render(JINJA_METHODS) 32 33 contents = YAML().load(source) 34 if contents is None: 35 if raise_if_empty: 36 error_path = f" '{path}'" if path else "" 37 raise SQLMeshError(f"YAML source{error_path} can't be empty.") 38 return OrderedDict() 39 40 return contents 41 42 43def dumps(value: CommentedMap | OrderedDict) -> str: 44 """Dumps a ruamel.yaml loaded object and converts it into a string""" 45 result = io.StringIO() 46 YAML().dump(value, result) 47 return result.getvalue()
def
load( source: str | pathlib.Path, raise_if_empty: bool = True, render_jinja: bool = True) -> OrderedDict:
20def load( 21 source: str | Path, raise_if_empty: bool = True, render_jinja: bool = True 22) -> t.OrderedDict: 23 """Loads a YAML object from either a raw string or a file.""" 24 path: t.Optional[Path] = None 25 26 if isinstance(source, Path): 27 path = source 28 with open(source, "r", encoding="utf-8") as file: 29 source = file.read() 30 31 if render_jinja: 32 source = ENVIRONMENT.from_string(source).render(JINJA_METHODS) 33 34 contents = YAML().load(source) 35 if contents is None: 36 if raise_if_empty: 37 error_path = f" '{path}'" if path else "" 38 raise SQLMeshError(f"YAML source{error_path} can't be empty.") 39 return OrderedDict() 40 41 return contents
Loads a YAML object from either a raw string or a file.
def
dumps( value: ruamel.yaml.comments.CommentedMap | collections.OrderedDict) -> str:
44def dumps(value: CommentedMap | OrderedDict) -> str: 45 """Dumps a ruamel.yaml loaded object and converts it into a string""" 46 result = io.StringIO() 47 YAML().dump(value, result) 48 return result.getvalue()
Dumps a ruamel.yaml loaded object and converts it into a string