[Biopython-dev] New BLAST web page

Brad Chapman chapmanb at arches.uga.edu
Wed Mar 14 18:23:04 EST 2001

Hi Jeff;
Thanks for the SwissProt fixes --
I kind of suspected there might be more changes then what I fixed, but 
I know nothing about SwissProt since I've never used it, so I'm glad
an expert got the chance to look at it!

I was just curious -- have you given any thought to messing around
with the new BLAST page and CGI script? I started with
what you had for the old BLAST and modified it (what I have so far is
below) for the new format and variables, but am pretty stuck. 
What I have right now will just keep giving me the query page.

I didn't know if you had any suggestions or thoughts on this. I'm not
sure if I am missing something fundamental, or if the new pages are
just harder to work with. Thanks!


def new_blast(program, database, query,
              entrez_query = '(none)',
              filter = 'L',
              expect = '10',
              other_advanced = None,
              show_overview = 'on',
              ncbi_gi = 'on',
              format_object = 'alignment',
              format_type = 'html',
              descriptions = '100',
              alignments = '50',
              alignment_view = 'Pairwise',
              auto_format = 'on',
              timeout = 20):
    """Blast against the NCBI Blast web page.

    This uses the NCBI web page cgi script to BLAST, and returns a handle
    to the results. See:

    for more descriptions about the options.

    o program - The name of the blast program to run (ie. blastn, blastx...)
    o database - The database to search against (ie. nr, dbest...)
    o query - The input for the search, which NCBI tries to autodetermine
    the type of.
    o entrez_query - A query to limit the sequences searched against.
    o filter - Filtering for the input sequence.
    o expect - The expect value cutoff to include.
    params = {'PROGRAM' : program,
              'DATABASE' : database,
              'QUERY' : query,
              'ENTREZ_QUERY' : entrez_query,
              'FILTER' : filter,
              'EXPECT' : expect,
              'OTHER_ADVANCED': other_advanced,
              'SHOW_OVERVIEW' : show_overview,
              'NCBI_GI' : ncbi_gi,
              'FORMAT_OBJECT' : format_object,
              'FORMAT_TYPE' : format_type,
              'DESCRIPTIONS' : descriptions,
              'ALIGNMENTS' : alignments,
              'ALIGNMENT_VIEW' : alignment_view,
              'AUTO_FORMAT' : auto_format}
    variables = {}
    for k in params.keys():
        if params[k] is not None:
            variables[k] = str(params[k])
    # This returns a handle to the HTML file that points to the results.
    handle = NCBI._open(cgi, variables, get = 0)
    # Now parse the HTML from the handle and figure out how to retrieve
    # the results.
    refcgi, params = _parse_blast_ref_page(handle, cgi)

    start = time.time()
    while 1:
        # Sometimes the BLAST results aren't done yet.  Look at the page
        # to see if the results are there.  If not, then try again later.
        handle = NCBI._open(cgi, params, get=0)
        ready, results, refresh_delay = _parse_blast_results_page(handle)
        if ready:
        # Time out if it's not done after timeout minutes.
        if time.time() - start > timeout*60:
            raise IOError, "timed out after %d minutes" % timeout
        # pause and try again.
    return File.UndoHandle(File.StringHandle(results))

More information about the Biopython-dev mailing list