Coverage for selenible/admin.py: 33%
58 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 14:24 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 14:24 +0000
1import json
3import click
4import yaml
5from jinja2 import Environment
7from .cli import cli, drvmap, loadmodules
10def yamlify(data):
11 return yaml.dump(data, default_flow_style=False)
14@cli.command()
15@click.option("--driver", default="dummy", type=click.Choice(drvmap.keys()))
16@click.option("--extension", "-x", multiple=True)
17@click.option("--docdata", type=click.File("r"))
18def docdata(driver, extension, docdata):
19 drvcls = loadmodules(driver, extension)
20 def_text = "(description write here)\n"
21 result = {}
22 if docdata is not None:
23 result = yaml.safe_load(docdata)
24 mods = drvcls.listmodule()
25 for k in sorted(mods.keys()):
26 print(f"{k}: |")
27 txt = result.get(k, def_text)
28 print(" " + "\n ".join(txt.split("\n")))
31@cli.command()
32@click.option("--driver", default="dummy", type=click.Choice(drvmap.keys()))
33@click.option("--extension", "-x", multiple=True)
34@click.option("--name", default="echo")
35@click.option("--docdata", type=click.File("r"), required=True)
36@click.option("--longdoc", type=click.File("r"))
37@click.option("--template", required=True)
38def show(driver, extension, name, template, docdata, longdoc):
39 drvcls = loadmodules(driver, extension)
40 mods = drvcls.listmodule()
41 arg = {
42 "name": name,
43 "example": mods.get(name),
44 "schema": drvcls.schema.get("items", {}).get("properties", {}).get(name, None),
45 "description": yaml.safe_load(docdata).get(name),
46 }
47 if longdoc is not None:
48 arg["long_description"] = longdoc.read()
49 env = Environment()
50 env.filters["jsonify"] = json.dumps
51 env.filters["yamlify"] = yamlify
52 with open(template) as tmpl:
53 print(env.from_string(tmpl.read()).render(arg))
56@cli.command("list-missing-schema", help="list missing json schema")
57@click.option("--driver", default="dummy", type=click.Choice(drvmap.keys()))
58@click.option("--extension", "-x", multiple=True)
59def list_missing_schema(driver, extension):
60 drvcls = loadmodules(driver, extension)
61 props = drvcls.schema.get("items", {}).get("properties", {})
62 mods = drvcls.listmodule()
63 ignore = ["name", "register", "when", "when_not", "with_items", "loop_control"]
64 for k in sorted(mods.keys()):
65 if k not in props:
66 click.echo(f"missing schema: {k}")
67 for k in sorted(props.keys()):
68 if k in ignore:
69 continue
70 if k not in mods:
71 click.echo(f"missing method: {k}")
74if __name__ == "__main__": 74 ↛ 75line 74 didn't jump to line 75 because the condition on line 74 was never true
75 cli()