summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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: