Skip to content

Commit 5cc355c

Browse files
authored
Merge pull request #198 from wltrimbl/master
Some new tests, consistent use of argparse
2 parents 8aab53a + 0e3cd3a commit 5cc355c

38 files changed

Lines changed: 646 additions & 607 deletions

examples/python/annotation_table.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,15 @@
4545
jsonstructure = async_rest_api(URI, auth=key)
4646
jsondata = jsonstructure["data"]
4747
# unpack and display the data table
48-
cols = jsondata["columns"]
4948
# rows = [x["id"] for x in jsondata["rows"]]
5049

51-
data = jsondata["data"]
50+
data = jsondata # ["data"]
5251

5352
if DEBUG:
5453
print(jsonstructure)
55-
print("COLS", cols)
5654
print("DATA", data)
5755
h = data
5856

59-
for j in range(0, len(cols)):
60-
sys.stdout.write(cols[j] +"\t")
61-
sys.stdout.write("\n")
6257
for i in range(0, len(data)):
6358
sys.stdout.write("\t".join([str(s) for s in h[i]]))
6459
sys.stdout.write("\n")

examples/python/list_all_mg.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def printlist(js):
1818
public, item["created_on"],
1919
item["name"]]) + "\n").encode("utf-8"))
2020

21+
CALL = "/metagenome"
2122
CALL = "/search"
2223

2324
key = get_auth_token()

scripts/jsonviewer.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import sys
44
import json
5-
from optparse import OptionParser
5+
from argparse import ArgumentParser
66

77
prehelp = """
88
NAME
@@ -95,17 +95,17 @@ def to_string(x, dump=False, keys=False, expand=False, summary=False):
9595
return str(x)
9696

9797
def main(args):
98-
OptionParser.format_description = lambda self, formatter: self.description
99-
OptionParser.format_epilog = lambda self, formatter: self.epilog
100-
parser = OptionParser(usage='', description=prehelp, epilog=posthelp)
101-
parser.add_option("", "--info", dest="info", action="store_true", default=False, help="give format and depth of JSON structure")
102-
parser.add_option("", "--json", dest="json", action="store_true", default=False, help="pretty print of JSON structure")
103-
parser.add_option("", "--keys", dest="keys", action="store_true", default=False, help="list of keys if hash, number of elements if array")
104-
parser.add_option("", "--value", dest="value", default=None, help="value for a given key name or array index, use dot (.) to indicate multiple levels")
105-
parser.add_option("", "--find", dest="find", default=None, help="value(s) for a given key name at any depth")
98+
ArgumentParser.format_description = lambda self, formatter: self.description
99+
ArgumentParser.format_epilog = lambda self, formatter: self.epilog
100+
parser = ArgumentParser(usage='', description=prehelp, epilog=posthelp)
101+
parser.add_argument("--info", dest="info", action="store_true", default=False, help="give format and depth of JSON structure")
102+
parser.add_argument("--json", dest="json", action="store_true", default=False, help="pretty print of JSON structure")
103+
parser.add_argument("--keys", dest="keys", action="store_true", default=False, help="list of keys if hash, number of elements if array")
104+
parser.add_argument("--value", dest="value", default=None, help="value for a given key name or array index, use dot (.) to indicate multiple levels")
105+
parser.add_argument("--find", dest="find", default=None, help="value(s) for a given key name at any depth")
106106

107107
# get inputs
108-
(opts, args) = parser.parse_args()
108+
opts = parser.parse_args()
109109
try:
110110
jdata = json.load(sys.stdin)
111111
except:
@@ -150,4 +150,4 @@ def main(args):
150150
return 0
151151

152152
if __name__ == "__main__":
153-
sys.exit( main(sys.argv) )
153+
sys.exit(main(sys.argv))

scripts/mg-abundant-functions.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import sys
44
from operator import itemgetter
5-
from optparse import OptionParser
5+
from argparse import ArgumentParser
66
from mglib import get_auth_token, obj_from_url, VERSION, API_URL, AUTH_LIST, async_rest_api, safe_print, urlencode
77

88
prehelp = """
@@ -34,26 +34,26 @@
3434
"""
3535

3636
def main(args):
37-
OptionParser.format_description = lambda self, formatter: self.description
38-
OptionParser.format_epilog = lambda self, formatter: self.epilog
39-
parser = OptionParser(usage='', description=prehelp%VERSION, epilog=posthelp%AUTH_LIST)
40-
parser.add_option("", "--id", dest="id", default=None, help="KBase Metagenome ID")
41-
parser.add_option("", "--url", dest="url", default=API_URL, help="communities API url")
42-
parser.add_option("", "--user", dest="user", default=None, help="OAuth username")
43-
parser.add_option("", "--passwd", dest="passwd", default=None, help="OAuth password")
44-
parser.add_option("", "--token", dest="token", default=None, help="OAuth token")
45-
parser.add_option("", "--level", dest="level", default='function', help="functional level to retrieve abundances for, default is function")
46-
parser.add_option("", "--source", dest="source", default='Subsystems', help="datasource to filter results by, default is Subsystems")
47-
parser.add_option("", "--filter_name", dest="filter_name", default=None, help="function name to filter by")
48-
parser.add_option("", "--filter_level", dest="filter_level", default=None, help="function level to filter by")
49-
parser.add_option("", "--top", dest="top", type="int", default=10, help="display only the top N taxa, default is 10")
50-
parser.add_option("", "--evalue", dest="evalue", type="int", default=5, help="negative exponent value for maximum e-value cutoff, default is 5")
51-
parser.add_option("", "--identity", dest="identity", type="int", default=60, help="percent value for minimum % identity cutoff, default is 60")
52-
parser.add_option("", "--length", dest="length", type="int", default=15, help="value for minimum alignment length cutoff, default is 15")
53-
parser.add_option("", "--version", type="int", dest="version", default=1, help="M5NR annotation version to use, default is 1")
37+
ArgumentParser.format_description = lambda self, formatter: self.description
38+
ArgumentParser.format_epilog = lambda self, formatter: self.epilog
39+
parser = ArgumentParser(usage='', description=prehelp%VERSION, epilog=posthelp%AUTH_LIST)
40+
parser.add_argument("--id", dest="id", default=None, help="KBase Metagenome ID")
41+
parser.add_argument("--url", dest="url", default=API_URL, help="communities API url")
42+
parser.add_argument("--user", dest="user", default=None, help="OAuth username")
43+
parser.add_argument("--passwd", dest="passwd", default=None, help="OAuth password")
44+
parser.add_argument("--token", dest="token", default=None, help="OAuth token")
45+
parser.add_argument("--level", dest="level", default='function', help="functional level to retrieve abundances for, default is function")
46+
parser.add_argument("--source", dest="source", default='Subsystems', help="datasource to filter results by, default is Subsystems")
47+
parser.add_argument("--filter_name", dest="filter_name", default=None, help="function name to filter by")
48+
parser.add_argument("--filter_level", dest="filter_level", default=None, help="function level to filter by")
49+
parser.add_argument("--top", dest="top", type=int, default=10, help="display only the top N taxa, default is 10")
50+
parser.add_argument("--evalue", dest="evalue", type=int, default=5, help="negative exponent value for maximum e-value cutoff, default is 5")
51+
parser.add_argument("--identity", dest="identity", type=int, default=60, help="percent value for minimum % identity cutoff, default is 60")
52+
parser.add_argument("--length", dest="length", type=int, default=15, help="value for minimum alignment length cutoff, default is 15")
53+
parser.add_argument("--version", type=int, dest="version", default=1, help="M5NR annotation version to use, default is 1")
5454

5555
# get inputs
56-
(opts, args) = parser.parse_args()
56+
opts = parser.parse_args()
5757
opts.top = int(opts.top)
5858
if not opts.id:
5959
sys.stderr.write("ERROR: id required\n")
@@ -93,7 +93,7 @@ def main(args):
9393
url = opts.url+'/m5nr/ontology?'+urlencode(params, True)
9494
data = obj_from_url(url)
9595
level = 'level4' if opts.level == 'function' else opts.level
96-
sub_ann = set( map(lambda x: x[level], data['data']) )
96+
sub_ann = set(map(lambda x: x[level], data['data']))
9797

9898
# sort data
9999
if biom["matrix_type"] == "sparse":
@@ -122,4 +122,4 @@ def main(args):
122122

123123

124124
if __name__ == "__main__":
125-
sys.exit( main(sys.argv) )
125+
sys.exit(main(sys.argv))

scripts/mg-abundant-taxa.py

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import sys
44
from operator import itemgetter
5-
from optparse import OptionParser
5+
from argparse import ArgumentParser
66
from mglib import get_auth_token, obj_from_url, async_rest_api, AUTH_LIST, sparse_to_dense, safe_print, API_URL, VERSION, urlencode
77

88
prehelp = """
@@ -34,26 +34,26 @@
3434
"""
3535

3636
def main(args):
37-
OptionParser.format_description = lambda self, formatter: self.description
38-
OptionParser.format_epilog = lambda self, formatter: self.epilog
39-
parser = OptionParser(usage='', description=prehelp%VERSION, epilog=posthelp%AUTH_LIST)
40-
parser.add_option("", "--id", dest="id", default=None, help="KBase Metagenome ID")
41-
parser.add_option("", "--url", dest="url", default=API_URL, help="communities API url")
42-
parser.add_option("", "--user", dest="user", default=None, help="OAuth username")
43-
parser.add_option("", "--passwd", dest="passwd", default=None, help="OAuth password")
44-
parser.add_option("", "--token", dest="token", default=None, help="OAuth token")
45-
parser.add_option("", "--level", dest="level", default='species', help="taxon level to retrieve abundances for, default is species")
46-
parser.add_option("", "--source", dest="source", default='SEED', help="datasource to filter results by, default is SEED")
47-
parser.add_option("", "--filter_name", dest="filter_name", default=None, help="taxon name to filter by")
48-
parser.add_option("", "--filter_level", dest="filter_level", default=None, help="taxon level to filter by")
49-
parser.add_option("", "--top", dest="top", type="int", default=10, help="display only the top N taxa, default is 10")
50-
parser.add_option("", "--evalue", dest="evalue", type="int", default=5, help="negative exponent value for maximum e-value cutoff, default is 5")
51-
parser.add_option("", "--identity", dest="identity", type="int", default=60, help="percent value for minimum % identity cutoff, default is 60")
52-
parser.add_option("", "--length", dest="length", type="int", default=15, help="value for minimum alignment length cutoff, default is 15")
53-
parser.add_option("", "--version", type="int", dest="version", default=1, help="M5NR annotation version to use, default is 1")
37+
ArgumentParser.format_description = lambda self, formatter: self.description
38+
ArgumentParser.format_epilog = lambda self, formatter: self.epilog
39+
parser = ArgumentParser(usage='', description=prehelp%VERSION, epilog=posthelp%AUTH_LIST)
40+
parser.add_argument("--id", dest="id", default=None, help="KBase Metagenome ID")
41+
parser.add_argument("--url", dest="url", default=API_URL, help="communities API url")
42+
parser.add_argument("--user", dest="user", default=None, help="OAuth username")
43+
parser.add_argument("--passwd", dest="passwd", default=None, help="OAuth password")
44+
parser.add_argument("--token", dest="token", default=None, help="OAuth token")
45+
parser.add_argument("--level", dest="level", default='species', help="taxon level to retrieve abundances for, default is species")
46+
parser.add_argument("--source", dest="source", default='SEED', help="datasource to filter results by, default is SEED")
47+
parser.add_argument("--filter_name", dest="filter_name", default=None, help="taxon name to filter by")
48+
parser.add_argument("--filter_level", dest="filter_level", default=None, help="taxon level to filter by")
49+
parser.add_argument("--top", dest="top", type=int, default=10, help="display only the top N taxa, default is 10")
50+
parser.add_argument("--evalue", dest="evalue", type=int, default=5, help="negative exponent value for maximum e-value cutoff, default is 5")
51+
parser.add_argument("--identity", dest="identity", type=int, default=60, help="percent value for minimum % identity cutoff, default is 60")
52+
parser.add_argument("--length", dest="length", type=int, default=15, help="value for minimum alignment length cutoff, default is 15")
53+
parser.add_argument("--version", type=int, dest="version", default=1, help="M5NR annotation version to use, default is 1")
5454

5555
# get inputs
56-
(opts, args) = parser.parse_args()
56+
opts = parser.parse_args()
5757
opts.top = int(opts.top)
5858
if not opts.id:
5959
sys.stderr.write("ERROR: id required\n")
@@ -66,16 +66,16 @@ def main(args):
6666
token = get_auth_token(opts)
6767

6868
# build url
69-
params = [ ('id', opts.id),
70-
('group_level', opts.level),
71-
('source', opts.source),
72-
('evalue', opts.evalue),
73-
('identity', opts.identity),
74-
('length', opts.length),
75-
('version', opts.version),
76-
('result_type', 'abundance'),
77-
('asynchronous', '1'),
78-
('hide_metadata', '1') ]
69+
params = [('id', opts.id),
70+
('group_level', opts.level),
71+
('source', opts.source),
72+
('evalue', opts.evalue),
73+
('identity', opts.identity),
74+
('length', opts.length),
75+
('version', opts.version),
76+
('result_type', 'abundance'),
77+
('asynchronous', '1'),
78+
('hide_metadata', '1')]
7979
url = opts.url+'/matrix/organism?'+urlencode(params, True)
8080

8181
# retrieve data
@@ -85,20 +85,20 @@ def main(args):
8585
# get sub annotations
8686
sub_ann = set()
8787
if opts.filter_name and opts.filter_level:
88-
params = [ ('filter', opts.filter_name),
89-
('filter_level', opts.filter_level),
90-
('min_level', opts.level),
91-
('version', opts.version) ]
88+
params = [('filter', opts.filter_name),
89+
('filter_level', opts.filter_level),
90+
('min_level', opts.level),
91+
('version', opts.version)]
9292
url = opts.url+'/m5nr/taxonomy?'+urlencode(params, True)
9393
data = obj_from_url(url)
94-
sub_ann = set( map(lambda x: x[opts.level], data['data']) )
94+
sub_ann = set(map(lambda x: x[opts.level], data['data']))
9595
if biom['matrix_type'] == "dense":
9696
data = biom['data']
9797
else:
9898
data = sparse_to_dense(biom['data'], len(biom['rows']), len(biom['cols']))
9999
rows = [biom['rows'][i]['id'] for i in range(len(biom['rows']))]
100100
datalist = [biom['data'][i][0] for i in range(len(biom['rows']))]
101-
data2 = zip( rows, datalist)
101+
data2 = zip(rows, datalist)
102102
# sort data
103103
for d in sorted(data2, key=itemgetter(1), reverse=True):
104104
name = d[0]
@@ -116,4 +116,4 @@ def main(args):
116116

117117

118118
if __name__ == "__main__":
119-
sys.exit( main(sys.argv) )
119+
sys.exit(main(sys.argv))

scripts/mg-biom-merge.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import os
44
import sys
55
import json
6-
from optparse import OptionParser
6+
from argparse import ArgumentParser
77
from mglib import merge_biom, AUTH_LIST, VERSION, safe_print
88

99
prehelp = """
@@ -38,13 +38,13 @@
3838
"""
3939

4040
def main(args):
41-
OptionParser.format_description = lambda self, formatter: self.description
42-
OptionParser.format_epilog = lambda self, formatter: self.epilog
43-
parser = OptionParser(usage='', description=prehelp%VERSION, epilog=posthelp%AUTH_LIST)
44-
parser.add_option("", "--retain_dup_ids", dest="retain_dups", action="store_true", default=False, help="append input number to duplicate input ID's rather than discarding duplicates, default is false")
41+
ArgumentParser.format_description = lambda self, formatter: self.description
42+
ArgumentParser.format_epilog = lambda self, formatter: self.epilog
43+
parser = ArgumentParser(usage='', description=prehelp%VERSION, epilog=posthelp%AUTH_LIST)
44+
parser.add_argument("--retain_dup_ids", dest="retain_dups", action="store_true", default=False, help="append input number to duplicate input ID's rather than discarding duplicates, default is false")
4545

4646
# get inputs
47-
(opts, args) = parser.parse_args()
47+
opts = parser.parse_args()
4848
if len(args) < 2:
4949
sys.stderr.write("ERROR: must have at least 2 file inputs\n")
5050
return 1
@@ -83,4 +83,4 @@ def main(args):
8383
return 0
8484

8585
if __name__ == "__main__":
86-
sys.exit( main(sys.argv) )
86+
sys.exit(main(sys.argv))

scripts/mg-biom-view.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import os
44
import sys
55
import json
6-
from optparse import OptionParser
6+
from argparse import ArgumentParser
77
from mglib import biom_to_matrix, AUTH_LIST, VERSION
88

99
prehelp = """
@@ -38,19 +38,19 @@
3838
"""
3939

4040
def main(args):
41-
OptionParser.format_description = lambda self, formatter: self.description
42-
OptionParser.format_epilog = lambda self, formatter: self.epilog
43-
parser = OptionParser(usage='', description=prehelp%VERSION, epilog=posthelp%AUTH_LIST)
44-
parser.add_option("-i", "--input", dest="input", default='-', help="input: filename or stdin (-), default is stdin")
45-
parser.add_option("-o", "--output", dest="output", default='-', help="input: filename or stdout (-), default is stdout")
46-
parser.add_option("", "--row_start", dest="row_start", type="int", default=None, help="row position to start table with, default is first")
47-
parser.add_option("", "--row_end", dest="row_end", type="int", default=None, help="row position to end table with, default is last")
48-
parser.add_option("", "--col_start", dest="col_start", type="int", default=None, help="column position to start table with, default is first")
49-
parser.add_option("", "--col_end", dest="col_end", type="int", default=None, help="column position to end table with, default is last")
50-
parser.add_option("", "--stats", dest="stats", action="store_true", default=False, help="include significance stats in output, default is off")
41+
ArgumentParser.format_description = lambda self, formatter: self.description
42+
ArgumentParser.format_epilog = lambda self, formatter: self.epilog
43+
parser = ArgumentParser(usage='', description=prehelp%VERSION, epilog=posthelp%AUTH_LIST)
44+
parser.add_argument("-i", "--input", dest="input", default='-', help="input: filename or stdin (-), default is stdin")
45+
parser.add_argument("-o", "--output", dest="output", default='-', help="input: filename or stdout (-), default is stdout")
46+
parser.add_argument("--row_start", dest="row_start", type=int, default=None, help="row position to start table with, default is first")
47+
parser.add_argument("--row_end", dest="row_end", type=int, default=None, help="row position to end table with, default is last")
48+
parser.add_argument("--col_start", dest="col_start", type=int, default=None, help="column position to start table with, default is first")
49+
parser.add_argument("--col_end", dest="col_end", type=int, default=None, help="column position to end table with, default is last")
50+
parser.add_argument("--stats", dest="stats", action="store_true", default=False, help="include significance stats in output, default is off")
5151

5252
# get inputs
53-
(opts, args) = parser.parse_args()
53+
opts = parser.parse_args()
5454
if (opts.input != '-') and (not os.path.isfile(opts.input)):
5555
sys.stderr.write("ERROR: input data missing\n")
5656
return 1
@@ -81,9 +81,9 @@ def main(args):
8181
# output data
8282
try:
8383
sub_rows = rows[row_start:row_end]
84-
out_hdl.write( "\t%s\n" %"\t".join(cols[col_start:col_end]) )
84+
out_hdl.write("\t%s\n" %"\t".join(cols[col_start:col_end]))
8585
for i, d in enumerate(data[row_start:row_end]):
86-
out_hdl.write( "%s\t%s\n" %(sub_rows[i], "\t".join(map(str, d[col_start:col_end]))) )
86+
out_hdl.write("%s\t%s\n" %(sub_rows[i], "\t".join(map(str, d[col_start:col_end]))))
8787
out_hdl.close()
8888
except:
8989
sys.stderr.write("ERROR: unable to sub-select BIOM, inputted positions are out of bounds\n")
@@ -92,4 +92,4 @@ def main(args):
9292

9393

9494
if __name__ == "__main__":
95-
sys.exit( main(sys.argv) )
95+
sys.exit(main(sys.argv))

0 commit comments

Comments
 (0)