Exemplo n.º 1
0
def fidsToSequences(fidlist, config):
    ''' Given a list of feature IDs, returns a dictionary from FID to its amino acid sequence.

        @note Features with no amino acid sequence are discarded.
        @param List of feature IDs
        @param config Dictionary of configuration variables
        @return Dictionary keyed by feature ID of amino acid sequence for feature
    '''

    cdmi = CDMI_API(config["cdmi_url"])
    fidlist = list(set(fidlist))
    start = 0
    increment = 5000
    end = start + increment
    counter = len(fidlist)
    seqs = {}
    while counter > 0:
        try:
            ps = cdmi.fids_to_protein_sequences(fidlist[start:end])
        except HTTPError as e:
            if increment > 1:
                increment = increment / 2
                end = start + increment
            sys.stderr.write("caught '%s' error, increment is now %d\n" %(e.reason, increment))
            continue
        seqs.update(ps)
        
        # Move to next sub-list
        start += increment
        end += increment
        if end >= len(fidlist):
            end = len(fidlist)
        counter -= increment
    
    return seqs