Coverage for selenible/admin.py: 33%

58 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-05 14:24 +0000

1import json 

2 

3import click 

4import yaml 

5from jinja2 import Environment 

6 

7from .cli import cli, drvmap, loadmodules 

8 

9 

10def yamlify(data): 

11 return yaml.dump(data, default_flow_style=False) 

12 

13 

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"))) 

29 

30 

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)) 

54 

55 

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}") 

72 

73 

74if __name__ == "__main__": 74 ↛ 75line 74 didn't jump to line 75 because the condition on line 74 was never true

75 cli()