summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Kögl <stefan@skoegl.net>2017-12-31 12:00:35 +0100
committerStefan Kögl <stefan@skoegl.net>2017-12-31 12:00:35 +0100
commit0fb516fa310db0eb4900a7b529c64bde290390bb (patch)
tree752d327e42580f2ca9cfa22bf944b04d54533d91
parentbae64f61ec5f1057342faf19b89d5bd571b038da (diff)
downloadpython-json-pointer-cmd-ptr-arg.tar.gz
Accept pointer as argument in commandline utilitycmd-ptr-arg
Fixes #25
-rwxr-xr-xbin/jsonpointer29
1 files 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: