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

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