Hide keyboard shortcuts

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 

8 

9log = getLogger(__name__) 

10 

11 

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

18 

19 

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) 

26 

27 

28_cli_option = [ 

29 click.option("--verbose/--no-verbose"), 

30] 

31 

32 

33def multi_options(decs): 

34 def deco(f): 

35 for dec in reversed(decs): 

36 f = dec(f) 

37 return f 

38 return deco 

39 

40 

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) 

47 

48 

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

61 

62 

63if __name__ == "__main__": 

64 cli()