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