Mercurial > repos > iuc > sqlite_to_tabular
comparison query_tabular.py @ 0:859064f07be4 draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/query_tabular commit 74915fc9cee746bbce1c4b507e13231259de177d
author | iuc |
---|---|
date | Tue, 18 Jul 2017 09:07:26 -0400 |
parents | |
children | c1b700bc0150 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:859064f07be4 |
---|---|
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 load_db import create_table | |
11 | |
12 from query_db import describe_tables, get_connection, run_query | |
13 | |
14 | |
15 """ | |
16 JSON config: | |
17 { tables : [ | |
18 { file_path : '/home/galaxy/dataset_101.dat', | |
19 table_name : 't1', | |
20 column_names : ['c1','c2','c3'], | |
21 pkey_autoincr : 'id' | |
22 comment_lines : 1 | |
23 unique: ['c1'], | |
24 index: ['c2', 'c3'] | |
25 }, | |
26 { file_path : '/home/galaxy/dataset_102.dat', | |
27 table_name : 'gff', | |
28 column_names : ['seqname',,'date','start','end'] | |
29 comment_lines : 1 | |
30 load_named_columns : True | |
31 filters : [{'filter': 'regex', 'pattern': '#peptide', | |
32 'action': 'exclude_match'}, | |
33 {'filter': 'replace', 'column': 3, | |
34 'replace': 'gi[|]', 'pattern': ''}] | |
35 }, | |
36 { file_path : '/home/galaxy/dataset_103.dat', | |
37 table_name : 'test', | |
38 column_names : ['c1', 'c2', 'c3'] | |
39 } | |
40 ] | |
41 } | |
42 """ | |
43 | |
44 | |
45 def __main__(): | |
46 # Parse Command Line | |
47 parser = optparse.OptionParser() | |
48 parser.add_option('-s', '--sqlitedb', dest='sqlitedb', default=None, | |
49 help='The SQLite Database') | |
50 parser.add_option('-j', '--jsonfile', dest='jsonfile', default=None, | |
51 help='JSON dict of table specifications') | |
52 parser.add_option('-q', '--query', dest='query', default=None, | |
53 help='SQL query') | |
54 parser.add_option('-Q', '--query_file', dest='query_file', default=None, | |
55 help='SQL query file') | |
56 parser.add_option('-n', '--no_header', dest='no_header', default=False, | |
57 action='store_true', | |
58 help='Include a column headers line') | |
59 parser.add_option('-o', '--output', dest='output', default=None, | |
60 help='Output file for query results') | |
61 (options, args) = parser.parse_args() | |
62 | |
63 # determine output destination | |
64 if options.output is not None: | |
65 try: | |
66 outputPath = os.path.abspath(options.output) | |
67 outputFile = open(outputPath, 'w') | |
68 except Exception as e: | |
69 exit('Error: %s' % (e)) | |
70 else: | |
71 outputFile = sys.stdout | |
72 | |
73 def _create_table(ti, table): | |
74 path = table['file_path'] | |
75 table_name =\ | |
76 table['table_name'] if 'table_name' in table else 't%d' % (ti + 1) | |
77 comment_lines =\ | |
78 table['comment_lines'] if 'comment_lines' in table else 0 | |
79 comment_char =\ | |
80 table['comment_char'] if 'comment_char' in table else None | |
81 column_names =\ | |
82 table['column_names'] if 'column_names' in table else None | |
83 if column_names: | |
84 load_named_columns =\ | |
85 table['load_named_columns']\ | |
86 if 'load_named_columns' in table else False | |
87 else: | |
88 load_named_columns = False | |
89 unique_indexes = table['unique'] if 'unique' in table else [] | |
90 indexes = table['index'] if 'index' in table else [] | |
91 filters = table['filters'] if 'filters' in table else None | |
92 pkey_autoincr = \ | |
93 table['pkey_autoincr'] if 'pkey_autoincr' in table else None | |
94 create_table(get_connection(options.sqlitedb), path, table_name, | |
95 pkey_autoincr=pkey_autoincr, | |
96 column_names=column_names, | |
97 skip=comment_lines, | |
98 comment_char=comment_char, | |
99 load_named_columns=load_named_columns, | |
100 filters=filters, | |
101 unique_indexes=unique_indexes, | |
102 indexes=indexes) | |
103 | |
104 if options.jsonfile: | |
105 try: | |
106 with open(options.jsonfile) as fh: | |
107 tdef = json.load(fh) | |
108 if 'tables' in tdef: | |
109 for ti, table in enumerate(tdef['tables']): | |
110 _create_table(ti, table) | |
111 except Exception as e: | |
112 exit('Error: %s' % (e)) | |
113 | |
114 query = None | |
115 if options.query_file is not None: | |
116 with open(options.query_file, 'r') as fh: | |
117 query = '' | |
118 for line in fh: | |
119 query += line | |
120 elif options.query is not None: | |
121 query = options.query | |
122 | |
123 if query is None: | |
124 try: | |
125 describe_tables(get_connection(options.sqlitedb), outputFile) | |
126 except Exception as e: | |
127 exit('Error: %s' % (e)) | |
128 else: | |
129 try: | |
130 run_query(get_connection(options.sqlitedb), query, outputFile, | |
131 no_header=options.no_header) | |
132 except Exception as e: | |
133 exit('Error: %s' % (e)) | |
134 | |
135 | |
136 if __name__ == "__main__": | |
137 __main__() |