Source code for standard_names.cmd.snbuild

#! /usr/bin/env python
"""
Example usage:
    snbuild data/models.yaml data/scraped.yaml \
            > standard_names/data/standard_names.yaml
"""
from __future__ import print_function

import os
from ..utilities.io import FORMATTERS
from ..registry import NamesRegistry


[docs]def snbuild(file, newline=None): """Build a YAML-formatted database of names. Parameters ---------- file : str Text file of names. newline : str, optional Newline character to use for output. Returns ------- str YAML-formatted text of the names database. Examples -------- >>> from __future__ import print_function >>> import os >>> from six.moves import StringIO >>> import standard_names as csn >>> lines = os.linesep.join(['air__temperature', 'water__temperature']) >>> names = StringIO(lines) >>> print(csn.cmd.snbuild.snbuild(names, newline='\\n')) %YAML 1.2 --- names: - air__temperature - water__temperature --- objects: - air - water --- quantities: - temperature --- operators: [] ... """ newline = newline or os.linesep names = NamesRegistry(file) formatter = FORMATTERS["yaml"] lines = [ "%YAML 1.2", "---", formatter(names.names, sorted=True, heading="names", newline=newline), "---", formatter(names.objects, sorted=True, heading="objects", newline=newline), "---", formatter(names.quantities, sorted=True, heading="quantities", newline=newline), "---", formatter(names.operators, sorted=True, heading="operators", newline=newline), "...", ] return newline.join(lines)
[docs]def main(args=None): """Build a list of CSDMS standard names for YAML description files.""" import argparse parser = argparse.ArgumentParser( "Scan a model description file for CSDMS standard names" ) parser.add_argument( "file", nargs="+", type=argparse.FileType("r"), help="YAML file describing model exchange items", ) if args is None: args = parser.parse_args() else: args = parser.parse_args(args) return snbuild(args.file)
[docs]def run(): print(main())