Source code for pytaxa.taxa.taxon

from ..utils import *
from typing import Union
from ..constructors import *

[docs]class Taxon(object): """ Taxon class Create a `taxon` object :param name: A dict resulting from a call to :func:`~pytaxa.constructors.taxon_name` with `name` and `database` keys, or a name as a `str` :param rank: A dict resulting from a call to :func:`~pytaxa.constructors.taxon_rank` with `name` and `database` keys, or a name as a `str` :param id: A dict resulting from a call to :func:`~pytaxa.constructors.taxon_id` with `id` and `database` keys, or an identifier as an `int` :param authority: An authority name as a `str` Usage:: from pytaxa import constructors as cs from pytaxa import Taxon name = cs.taxon_name("Poa") rank = cs.taxon_rank("genus", "ncbi") db = cs.taxon_database("ncbi", "http://www.ncbi.nlm.nih.gov/taxonomy", "NCBI Taxonomy Database", "*") id = cs.taxon_id(12345, db) x = Taxon(name, rank, id, "L.") x.is_empty() # null taxon's x = Taxon(None) x x.is_empty() Taxon({}) Taxon(None, None, None) Taxon(None, None, id) Taxon(None, None, None, "L.") """ def __init__(self, name: Union[str,dict] = {}, rank: Union[str,dict] = {}, id: Union[str,dict] = {}, authority: str = ''): super(Taxon, self).__init__() self.name = name if isinstance(name, dict) else taxon_name(name) if isinstance(name, str) else {} self.rank = rank if isinstance(rank, dict) else taxon_rank(rank) if isinstance(rank, str) else {} self.id = id if isinstance(id, dict) else taxon_id(id) if isinstance(id, str) else {} self.authority = authority def __repr__(self): tx = "<Taxon>\n " txt = [ 'name: ' + str(self.name.get('name')) or "", 'rank: ' + str(self.rank.get('name')) or "", 'id: ' + str(self.id.get('id')) or "", 'authority: ' + self.authority or "" ] mssg = tx + '\n '.join(txt) return mssg def print_taxon(self): if all(b is None for b in self.name.values()): return "empty" else: return ' / '.join([ str(self.name.get('name')) or "", str(self.rank.get('name')) or "", str(self.id.get('id')) or "" ]) def is_empty(self): return not self.name and not self.rank and not self.id