text: ''' Gene specific utils. '''
  from collections import OrderedDict
  from biothings_client import get_client
  
  
  def get_homologs(gene_list, fields='all', species='all'):
      ''' Return the gene-objects for homologs in species for each gene in the input *gene_list*. '''
      gene_client = get_client("gene")
      clean_species = [int(s) for s in species.split(',')] if species != 'all' else []
      initial = OrderedDict()
      qset = set()
  
      for gene in gene_client.getgenes(gene_list, fields='homologene', species='all'):
          if gene['_id'] in initial:
              continue
          initial[gene['_id']] = {}
          for (taxid, geneid) in gene.get('homologene', {}).get('genes', []):
              if not clean_species or taxid in clean_species:
                  initial[gene['_id']].setdefault(taxid, []).append(geneid)
                  qset.add(geneid)
      gene_dict = dict([(g['_id'], g) for g in gene_client.getgenes(iter(qset), fields=fields, species='all')])
  
      ret = []
      for (geneid, homolog_dict) in initial.items():
          _ret = {'gene': geneid, 'homologs': []}
          for (taxid, glist) in homolog_dict.items():
              _d = {'taxid': taxid, 'genes': []}
              for g in glist:
                  if str(g) in gene_dict:
                      _d['genes'].append(gene_dict[str(g)])
              if len(_d['genes']) > 0:
                  _ret['homologs'].append(_d)
          ret.append(_ret)
  
      return ret
  