Skip to content

Commit ae997af

Browse files
authored
Merge pull request stefankoegl#26 from stefankoegl/cmd-ptr-arg
Accept pointer as argument in commandline utility
2 parents ebb9978 + 0fb516f commit ae997af

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

bin/jsonpointer

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,17 @@ import argparse
1212

1313
parser = argparse.ArgumentParser(
1414
description='Resolve a JSON pointer on JSON files')
15-
parser.add_argument('POINTER', type=argparse.FileType('r'),
16-
help='File containing a JSON pointer expression')
15+
16+
# Accept pointer as argument or as file
17+
ptr_group = parser.add_mutually_exclusive_group(required=True)
18+
19+
ptr_group.add_argument('-f', '--pointer-file', type=argparse.FileType('r'),
20+
nargs='?',
21+
help='File containing a JSON pointer expression')
22+
23+
ptr_group.add_argument('POINTER', type=str, nargs='?',
24+
help='A JSON pointer expression')
25+
1726
parser.add_argument('FILE', type=argparse.FileType('r'), nargs='+',
1827
help='Files for which the pointer should be resolved')
1928
parser.add_argument('--indent', type=int, default=None,
@@ -29,10 +38,24 @@ def main():
2938
sys.exit(1)
3039

3140

41+
def parse_pointer(args):
42+
if args.POINTER:
43+
ptr = args.POINTER
44+
elif args.pointer_file:
45+
ptr = args.pointer_file.read().strip()
46+
else:
47+
parser.print_usage()
48+
sys.exit(1)
49+
50+
return ptr
51+
52+
3253
def resolve_files():
3354
""" Resolve a JSON pointer on JSON files """
3455
args = parser.parse_args()
35-
ptr = json.load(args.POINTER)
56+
57+
ptr = parse_pointer(args)
58+
3659
for f in args.FILE:
3760
doc = json.load(f)
3861
try:

0 commit comments

Comments
 (0)