Source code for pydmt.builders.yaml
"""
yaml.py
"""
import json
from urllib.request import urlopen
import yaml
from jsonschema import validate
from pydmt.utils.filesystem import mkdir_touch
from pydmt.api.one_source_one_target import OneSourceOneTarget
METADATA = "metadata"
SCHEMA_URL_JSON = "schema_url_json"
SCHEMA_URL_YAML = "schema_url_yaml"
[docs]
class BuilderYaml(OneSourceOneTarget):
[docs]
def build(self):
with open(self.source) as yaml_stream:
datas = yaml.safe_load_all(yaml_stream)
for data in datas:
if isinstance(data, dict):
if METADATA in data:
metadata = data[METADATA]
if SCHEMA_URL_JSON in metadata:
schema_url = data[METADATA][SCHEMA_URL_JSON]
with urlopen(schema_url) as f:
schema = json.loads(f.read())
validate(data, schema)
if SCHEMA_URL_YAML in metadata:
schema_url = data[METADATA][SCHEMA_URL_YAML]
with urlopen(schema_url) as f:
schema = yaml.safe_load(f.read())
validate(data, schema)
mkdir_touch(self.target)