Coverage for revjo/_cli.py : 96%
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 sys
2import json
3import functools
4from logging import getLogger, basicConfig, INFO, DEBUG
5import click
6from .version import VERSION
7from .revjo import convert
9log = getLogger(__name__)
12@click.version_option(version=VERSION, prog_name="revjo")
13@click.group(invoke_without_command=True)
14@click.pass_context
15def cli(ctx):
16 if ctx.invoked_subcommand is None:
17 print(ctx.get_help())
20def set_verbose(flag):
21 fmt = '%(asctime)s %(levelname)s %(message)s'
22 if flag:
23 basicConfig(level=DEBUG, format=fmt)
24 else:
25 basicConfig(level=INFO, format=fmt)
28_cli_option = [
29 click.option("--verbose/--no-verbose"),
30]
33def multi_options(decs):
34 def deco(f):
35 for dec in reversed(decs):
36 f = dec(f)
37 return f
38 return deco
41def cli_option(func):
42 @functools.wraps(func)
43 def wrap(verbose, *args, **kwargs):
44 set_verbose(verbose)
45 return func(*args, **kwargs)
46 return multi_options(_cli_option)(wrap)
49@cli.command("convert")
50@cli_option
51@click.option("--input", type=click.File('r'))
52@click.argument("data", type=str, default="")
53def do_convert(input, data):
54 if input is not None:
55 d = json.load(input)
56 elif data != "":
57 d = json.loads(data)
58 else:
59 d = json.load(sys.stdin)
60 click.echo(convert(d))
63if __name__ == "__main__":
64 cli()