annotate filter_tabular.py @ 20:ab27c4bd14b9 draft

Uploaded
author jjohnson
date Fri, 14 Jul 2017 11:39:27 -0400
parents
children bed5018e7ae3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
1 #!/usr/bin/env python
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
2
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
3 from __future__ import print_function
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
4
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
5 import json
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
6 import optparse
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
7 import os.path
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
8 import sys
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
9
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
10 from filters import filter_file
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
11
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
12
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
13 def __main__():
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
14 # Parse Command Line
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
15 parser = optparse.OptionParser()
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
16 parser.add_option('-i', '--input', dest='input', default=None,
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
17 help='Input file for filtering')
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
18 parser.add_option('-j', '--jsonfile', dest='jsonfile', default=None,
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
19 help='JSON array of filter specifications')
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
20 parser.add_option('-o', '--output', dest='output', default=None,
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
21 help='Output file for query results')
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
22 parser.add_option('-v', '--verbose', dest='verbose', default=False,
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
23 action='store_true',
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
24 help='verbose')
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
25 (options, args) = parser.parse_args()
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
26
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
27 if options.input is not None:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
28 try:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
29 inputPath = os.path.abspath(options.input)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
30 inputFile = open(inputPath, 'r')
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
31 except Exception as e:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
32 print("failed: %s" % e, file=sys.stderr)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
33 exit(3)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
34 else:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
35 inputFile = sys.stdin
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
36
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
37 if options.output is not None:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
38 try:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
39 outputPath = os.path.abspath(options.output)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
40 outputFile = open(outputPath, 'w')
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
41 except Exception as e:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
42 print("failed: %s" % e, file=sys.stderr)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
43 exit(3)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
44 else:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
45 outputFile = sys.stdout
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
46
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
47 filters = None
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
48 if options.jsonfile:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
49 try:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
50 fh = open(options.jsonfile)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
51 filters = json.load(fh)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
52 except Exception as exc:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
53 print("Error: %s" % exc, file=sys.stderr)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
54
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
55 if options.verbose and filters:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
56 for f in filters:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
57 print('%s %s' % (f['filter'],
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
58 ', '.join(
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
59 ['%s: %s' % (k, f[k])
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
60 for k in set(f.keys()) - set(['filter'])])),
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
61 file=sys.stdout)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
62
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
63 try:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
64 filter_file(inputFile, outputFile, filters=filters)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
65 except Exception as exc:
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
66 print("Error: %s" % exc, file=sys.stderr)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
67 exit(1)
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
68
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
69
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
70 if __name__ == "__main__":
ab27c4bd14b9 Uploaded
jjohnson
parents:
diff changeset
71 __main__()