Source code for ncbitaxonomist.parser.group
"""
..
Copyright 2020
.. moduleauthor:: Jan Piotr Buchmann <jpb@members.fsf.org>
"""
import io
import os
import sys
import json
[docs]class GroupParser:
def __init__(self):
self.seen_taxids = set()
[docs] def parse(self, groupname:str):
"""Parse stdin for taxonid to add into group groupname"""
taxids = []
for i in sys.stdin:
linein = json.loads(i.strip())
if 'mode' in linein and linein['mode'] == 'resolve':
self.parse_taxa_list(linein.get('lineage'), taxids, groupname)
elif 'subtrees' in linein:
for j in linein['subtrees']:
self.parse_taxa_list(linein['subtrees'][j], taxids, groupname)
elif 'taxon' in linein:
self.parse_taxon(linein['taxon'], taxids, groupname)
elif 'taxid' in linein:
self.parse_taxon(linein['taxid'], taxids, groupname)
else:
sys.exit("Unknown input: {}.Abort".format(linein))
print(i.strip())
return taxids
[docs] def parse_taxa_list(self, taxa_list, taxids, groupname):
for i in taxa_list:
self.parse_taxon(i['taxid'], taxids, groupname)
[docs] def parse_taxon(self, taxid, taxids, groupname):
if int(taxid) not in self.seen_taxids:
self.seen_taxids.add(int(taxid))
taxids.append((int(taxid), groupname))