def get_info(self, id_): result = self._get(id=id_, response='full') if result: # classification: taxon.id name rank url # synonyms: synonym.name res = { k: text(result, k) for k in 'genus species author url'.split() } res['distribution'] = unique( region.split()[0] for region in text(result, 'distribution').split('; ') if region) if result.find('classification'): res['classification'] = { t.rank.lower(): t.as_dict() for t in [ Taxon(e) for e in result.find('classification').findall('taxon') ] } if result.find('synonyms'): res['synonyms'] = filter(None, [ text(e, 'name') for e in result.find('synonyms').findall('synonym') ]) return {k: v for k, v in res.items() if v}
def update(self, taxon, data): if 'distribution' in data: taxon['tdwgregions'] = unique(data['distribution']) classification = data.get('classification', {}) for key in 'kingdom phylum class order genus family'.split(): if classification.get(key): taxon[key] = classification[key]['name'] taxon[self.name + '_url'] = data['url']
def update(self, taxon, data): if 'distribution' in data: taxon['tdwgregions'] = unique(data['distribution']) classification = data.get('classification', {}) for key in 'kingdom phylum class order genus family'.split(): if classification.get(key): taxon[key] = classification[key]['name'] taxon[self.name + '_url'] = data['url'] if 'author' in data: taxon['description'] = data['author']
def get_info(self, id_): result = self._get(id=id_, response='full') if result: # classification: taxon.id name rank url # synonyms: synonym.name res = {k: text(result, k) for k in 'genus species author url'.split()} res['distribution'] = unique( region.split()[0] for region in text(result, 'distribution').split('; ') if region) if result.find('classification'): res['classification'] = { t.rank.lower(): t.as_dict() for t in [Taxon(e) for e in result.find('classification').findall('taxon')]} if result.find('synonyms'): res['synonyms'] = filter( None, [text(e, 'name') for e in result.find('synonyms').findall('synonym')]) return {k: v for k, v in res.items() if v}
def format_ids(iterable): return ';'.join(unique(iterable))