summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorTANIGUCHI Takaki <takaki@debian.org>2014-06-23 00:35:03 +0900
committergit-ubuntu importer <ubuntu-devel-discuss@lists.ubuntu.com>2014-06-22 22:20:12 +0000
commitc15b8c5cb8f7740fa75126ce27b170199f49ff76 (patch)
treef602a61b8e51583149499f7acf9d5d3a3778e316 /bin
parente9dc8408f5f4099804e572192634bcb0ffd1873c (diff)
Imported using git-ubuntu import.
Notes
Notes: * New upstream release
Diffstat (limited to 'bin')
-rwxr-xr-xbin/jp70
1 files changed, 58 insertions, 12 deletions
diff --git a/bin/jp b/bin/jp
index f7fecb5..ebc8b86 100755
--- a/bin/jp
+++ b/bin/jp
@@ -1,17 +1,63 @@
#!/usr/bin/env python
-import jmespath
import sys
import json
+import argparse
+
+import jmespath
+from jmespath import exceptions
+from jmespath.compat import OrderedDict
+
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('expression')
+ parser.add_argument('-o', '--ordered', action='store_true',
+ help='Preserve the order of hash keys, which '
+ 'are normally unordered.')
+ parser.add_argument('-f', '--filename',
+ help=('The filename containing the input data. '
+ 'If a filename is not given then data is '
+ 'read from stdin.'))
+ parser.add_argument('--ast', action='store_true',
+ help=('Pretty print the AST, do not search the data.'))
+ args = parser.parse_args()
+ expression = args.expression
+ if args.ast:
+ # Only print the AST
+ expression = jmespath.compile(args.expression)
+ sys.stdout.write(str(expression))
+ sys.stdout.write('\n')
+ return 0
+ if args.filename:
+ with open(args.filename, 'r') as f:
+ data = json.load(f)
+ else:
+ data = sys.stdin.read()
+ if args.ordered:
+ data = json.loads(data, object_pairs_hook=OrderedDict)
+ else:
+ data = json.loads(data)
+ try:
+ sys.stdout.write(json.dumps(
+ jmespath.search(expression, data), indent=4))
+ sys.stdout.write('\n')
+ except exceptions.ArityError as e:
+ sys.stderr.write("invalid-arity: %s\n" % e)
+ return 1
+ except exceptions.JMESPathTypeError as e:
+ sys.stderr.write("invalid-type: %s\n" % e)
+ return 1
+ except exceptions.UnknownFunctionError as e:
+ sys.stderr.write("unknown-function: %s\n" % e)
+ return 1
+ except exceptions.LexerError as e:
+ sys.stderr.write("syntax-error: %s\n" % e)
+ return 1
+ except exceptions.ParseError as e:
+ sys.stderr.write("syntax-error: %s\n" % e)
+ return 1
+
-if not len(sys.argv) >= 2:
- sys.stderr.write('usage: jp <expression> <filepath>\n\n')
- sys.exit(1)
-expression = sys.argv[1]
-if len(sys.argv) == 3:
- with open(sys.argv[2], 'r') as f:
- data = json.load(f)
-else:
- data = json.load(sys.stdin)
-sys.stdout.write(json.dumps(jmespath.search(expression, data), indent=4))
-sys.stdout.write('\n')
+if __name__ == '__main__':
+ sys.exit(main())