Source code for taxadb.accessionid
from taxadb.schema import Accession, Taxa
from taxadb.taxadb import TaxaDB
[docs]class AccessionID(TaxaDB):
"""Main accession class
Provide methods to request accession table and get associated taxonomy for
accession ids.
Args:
**kwargs: Arbitrary arguments. Supported (username, password, port,
hostname, config, dbtype, dbname)
Raises:
SystemExit: If table `accession` does not exist
"""
[docs] def __init__(self, **kwargs):
super().__init__(**kwargs)
self.check_table_exists(Accession)
[docs] def taxid(self, acc_number_list):
"""Get taxonomy of accession ids
Given a list of accession numbers, yield the accession number and their
associated taxids as tuples
Args:
acc_number_list (:obj:`list`): a list of accession numbers
Yields:
tuple: (accession id, taxonomy id)
"""
self.check_list_ids(acc_number_list)
with self.db.atomic():
query = Accession.select().where(
Accession.accession << acc_number_list)
for i in query:
yield (i.accession, i.taxid.ncbi_taxid)
# TODO: List accession ID not found?
# for noid in notfound:
# self._unmapped_taxid(noid)
[docs] def sci_name(self, acc_number_list):
"""Get taxonomic scientific name for accession ids
Given a list of accession numbers, yield the accession number and their
associated scientific name as tuples
Args:
acc_number_list (:obj:`list`): a list of accession numbers
Yields:
tuple: (accession id, taxonomy id)
"""
self.check_list_ids(acc_number_list)
with self.db.atomic():
query = Accession.select().where(
Accession.accession << acc_number_list)
for i in query:
yield (i.accession, i.taxid.tax_name)
# TODO: List accession ID not found?
# for noid in notfound:
# self._unmapped_taxid(noid)
[docs] def lineage_id(self, acc_number_list):
"""Get taxonomic lineage name for accession ids
Given a list of accession numbers, yield the accession number and their
associated lineage (in the form of taxids) as tuples
Args:
acc_number_list (:obj:`list`): a list of accession numbers
Yields:
tuple: (accession id, lineage list)
"""
self.check_list_ids(acc_number_list)
with self.db.atomic():
query = Accession.select().where(
Accession.accession << acc_number_list)
for i in query:
lineage_list = []
current_lineage = i.taxid.tax_name
current_lineage_id = i.taxid.ncbi_taxid
parent = i.taxid.parent_taxid
while current_lineage != 'root':
lineage_list.append(current_lineage_id)
new_query = Taxa.get(Taxa.ncbi_taxid == parent)
current_lineage = new_query.tax_name
current_lineage_id = new_query.ncbi_taxid
parent = new_query.parent_taxid
yield (i.accession, lineage_list)
# TODO: List accession ID not found?
# for noid in notfound:
# self._unmapped_taxid(noid)
[docs] def lineage_name(self, acc_number_list):
"""Get a lineage name for accession ids
Given a list of acession numbers, yield the accession number and their
associated lineage as tuples
Args:
acc_number_list (:obj:`list`): a list of accession numbers
Yields:
tuple: (accession id, lineage name)
"""
self.check_list_ids(acc_number_list)
with self.db.atomic():
query = Accession.select().where(
Accession.accession << acc_number_list)
for i in query:
lineage_list = []
current_lineage = i.taxid.tax_name
parent = i.taxid.parent_taxid
while current_lineage != 'root':
lineage_list.append(current_lineage)
new_query = Taxa.get(Taxa.ncbi_taxid == parent)
current_lineage = new_query.tax_name
parent = new_query.parent_taxid
yield (i.accession, lineage_list)
# TODO: List accession ID not found?
# for noid in notfound:
# self._unmapped_taxid(noid)