Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import click
2import yaml
3import json
4from jinja2 import Environment
5from .cli import cli, drvmap, loadmodules
8def yamlify(data):
9 return yaml.dump(data, default_flow_style=False)
12@cli.command()
13@click.option("--driver", default="dummy", type=click.Choice(drvmap.keys()))
14@click.option("--extension", "-x", multiple=True)
15@click.option("--docdata", type=click.File('r'))
16def docdata(driver, extension, docdata):
17 drvcls = loadmodules(driver, extension)
18 def_text = "(description write here)\n"
19 result = {}
20 if docdata is not None:
21 result = yaml.safe_load(docdata)
22 mods = drvcls.listmodule()
23 for k in sorted(mods.keys()):
24 print("%s: |" % (k))
25 txt = result.get(k, def_text)
26 print(" " + "\n ".join(txt.split("\n")))
29@cli.command()
30@click.option("--driver", default="dummy", type=click.Choice(drvmap.keys()))
31@click.option("--extension", "-x", multiple=True)
32@click.option("--name", default="echo")
33@click.option("--docdata", type=click.File('r'), required=True)
34@click.option("--longdoc", type=click.File('r'))
35@click.option("--template", required=True)
36def show(driver, extension, name, template, docdata, longdoc):
37 drvcls = loadmodules(driver, extension)
38 mods = drvcls.listmodule()
39 arg = {
40 "name": name,
41 "example": mods.get(name),
42 "schema": drvcls.schema.get("items", {}).get("properties", {}).get(name, None),
43 "description": yaml.safe_load(docdata).get(name),
44 }
45 if longdoc is not None:
46 arg["long_description"] = longdoc.read()
47 env = Environment()
48 env.filters['jsonify'] = json.dumps
49 env.filters['yamlify'] = yamlify
50 with open(template) as tmpl:
51 print(env.from_string(tmpl.read()).render(arg))
54@cli.command("list-missing-schema", help="list missing json schema")
55@click.option("--driver", default="dummy", type=click.Choice(drvmap.keys()))
56@click.option("--extension", "-x", multiple=True)
57def list_missing_schema(driver, extension):
58 drvcls = loadmodules(driver, extension)
59 props = drvcls.schema.get("items", {}).get("properties", {})
60 mods = drvcls.listmodule()
61 ignore = ["name", "register", "when", "when_not", "with_items", "loop_control"]
62 for k in sorted(mods.keys()):
63 if k not in props:
64 click.echo("missing schema: %s" % (k,))
65 for k in sorted(props.keys()):
66 if k in ignore:
67 continue
68 if k not in mods:
69 click.echo("missing method: %s" % (k,))
72if __name__ == "__main__":
73 cli()