From 0fb516fa310db0eb4900a7b529c64bde290390bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20K=C3=B6gl?= Date: Sun, 31 Dec 2017 12:00:35 +0100 Subject: Accept pointer as argument in commandline utility Fixes #25 --- bin/jsonpointer | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/bin/jsonpointer b/bin/jsonpointer index 1d49fae..d577d01 100755 --- a/bin/jsonpointer +++ b/bin/jsonpointer @@ -12,8 +12,17 @@ import argparse parser = argparse.ArgumentParser( description='Resolve a JSON pointer on JSON files') -parser.add_argument('POINTER', type=argparse.FileType('r'), - help='File containing a JSON pointer expression') + +# Accept pointer as argument or as file +ptr_group = parser.add_mutually_exclusive_group(required=True) + +ptr_group.add_argument('-f', '--pointer-file', type=argparse.FileType('r'), + nargs='?', + help='File containing a JSON pointer expression') + +ptr_group.add_argument('POINTER', type=str, nargs='?', + help='A JSON pointer expression') + parser.add_argument('FILE', type=argparse.FileType('r'), nargs='+', help='Files for which the pointer should be resolved') parser.add_argument('--indent', type=int, default=None, @@ -29,10 +38,24 @@ def main(): sys.exit(1) +def parse_pointer(args): + if args.POINTER: + ptr = args.POINTER + elif args.pointer_file: + ptr = args.pointer_file.read().strip() + else: + parser.print_usage() + sys.exit(1) + + return ptr + + def resolve_files(): """ Resolve a JSON pointer on JSON files """ args = parser.parse_args() - ptr = json.load(args.POINTER) + + ptr = parse_pointer(args) + for f in args.FILE: doc = json.load(f) try: -- cgit v1.2.1