Source code for linkml.generators.yamlgen

"""Validate linkml input and optionally emit completely resolved biolink yaml output

"""

import os
from dataclasses import dataclass

import click
from linkml_runtime.utils.yamlutils import as_yaml

from linkml._version import __version__
from linkml.utils.generator import Generator, shared_arguments
from linkml.utils.schemaloader import load_raw_schema


[docs]@dataclass class YAMLGenerator(Generator): """ A generator that produces a schema as a YAML Document """ # ClassVars generatorname = os.path.basename(__file__) generatorversion = "0.1.0" valid_formats = ["yaml"] uses_schemaloader = True # ObjectVars validateonly: bool = False
[docs] def serialize(self, validateonly: bool = False, **kwargs) -> str: if validateonly: return self.synopsis.summary() else: return as_yaml(self.schema)
@shared_arguments(YAMLGenerator) @click.command() @click.option( "--raw/--no-raw", default=False, show_default=True, help="Use the raw loader and do not inject additional information", ) @click.option( "--validateonly/--generate", "-V/-g", default=False, show_default=True, help="Just validate / generate output (default: generate)", ) @click.version_option(__version__, "-V", "--version") def cli(yamlfile, raw: bool, **args): """Validate input and produce fully resolved yaml equivalent""" if raw: s = load_raw_schema(yamlfile) print(as_yaml(s)) else: gen = YAMLGenerator(yamlfile, **args) print(gen.serialize(**args)) if __name__ == "__main__": cli()