docs: def get_proteins_genes(fastafn, fastadelim=None, genefield=None):
      """This returns a tuple of (protein, gene, HGNC symbol, description) from
      a passed file. If the file is FASTA from ENSEMBL or UniProt, only genes and
      descriptions are given and symbol will be None. If the file is a ENSEMBL
      Biomart mapping file it tries to parse that and also return the rest"""
      with open(fastafn) as fp:
          firstline = next(fp).strip()
      if firstline[0] == '>':
          for record in parse_fasta(fastafn):
              rectype = get_record_type(record)
              yield (record.id, get_gene(record.description, rectype,
                                         fastadelim, genefield),
                     None, record.description)
      elif 'Ensembl Gene ID' in firstline.split('\t'):
          for line in parse_biomart_fn(fastafn, 'Ensembl Gene ID',
                                       'Ensembl Protein ID', 'Description',
                                       'HGNC symbol', 'Associated Gene Name'):
              yield line
      elif 'Gene ID' in firstline.split('\t'):
          for line in parse_biomart_fn(fastafn, 'Gene ID', 'Protein ID',
                                       'Description', 'HGNC symbol',
                                       'Associated Gene Name'):
              yield line