def blast_AmiGO(self, raw_sequence): """ blast Amigo with data \ no customise blast parameters yet""" query_blast = [ ('action', 'blast'), ('seq', raw_sequence), # ('seq_id','FB:FBgn0015946'), ('CMD', 'Put')] self.web_page = web_page_utils.get_web_page(query_blast, AMIGO_BLAST_URL) is_complete = self.web_page.find(MATCH_BLAST_NOT_COMPLETE) previous = time.time() while is_complete != -1: current = time.time() wait = previous + web_page_utils.DELAY - current if wait > 0: time.sleep(wait) print("wait %d s" % web_page_utils.DELAY) previous = current + wait else: previous = current session_id_index = self.web_page.find(MATCH_BLAST_WAIT, is_complete) + MATCH_BLAST_WAIT_LEN session_id_index_end = self.web_page.find(MATCH_BLAST_END, is_complete) session_id = self.web_page[session_id_index:session_id_index_end] query_wait = [ ('action', 'get_blast_results'), ('session_id', session_id), ('CMD', 'Put')] # http://amigo.geneontology.org/cgi-bin/amigo/blast.cgi?action=get_blast_results&session_id=1284amigo1359406324&CMD=Put self.web_page = web_page_utils.get_web_page(query_wait, AMIGO_BLAST_URL) is_complete = self.web_page.find(MATCH_BLAST_NOT_COMPLETE)
def wait_for_query_result(query_wait): query_page = web_page_utils.get_web_page(query_wait, AMIGO_BLAST_URL) is_complete = query_page.find(MATCH_BLAST_NOT_COMPLETE) # previous, current = [time.time()] * 2 previous = time.time() while is_complete != -1: current = time.time() wait = previous + web_page_utils.DELAY - current if wait > 0: time.sleep(wait) print("wait %d s" % web_page_utils.DELAY) previous = current + wait else: previous = current query_page = web_page_utils.get_web_page(query_wait, AMIGO_BLAST_URL) is_complete = query_page.find(MATCH_BLAST_NOT_COMPLETE) return query_page
def parse_querypage(self): query_wait = parse_get_blast_results_query(self.session_id, 1) self.query_page = wait_for_query_result(query_wait) complete = False # isReRun = self._get_seq_counter() # def _get_seq_counter(self): match = RE_NO_SEQ_COUNTER.search(self.query_page) if match: self.seq_counter = int(match.group(1)) if self.key_list and self.seq_counter != len(self.key_list): warnings.warn("Mismatch numebr of sequencs=%d, and number of key=%d keys" % (self.seq_counter, len(self.key_list))) if self.debug: print "===DEBUG: Parsing %d sequences" % self.seq_counter for page in range(self.seq_counter): query = parse_get_blast_results_query(self.session_id, page + 1) seq = None while seq is None: web_page = web_page_utils.get_web_page(query, AMIGO_BLAST_URL) if web_page is not None: seq = self.parse_seq(web_page) # print "---in ", page, "with ", seq self.go_results.append(seq) complete = True else: """ Error message from AmiGOs fatal message There is an error in the configuration of AmiGO. Your cached BLAST results were lost. Please try again. """ warnings.warn("No seq matched from id:%s!!! seq_counter=%d Recreate session_id!" % (self.session_id, self.seq_counter)) complete = False # print self.session_id self.session_id = None while self.session_id is None: self.create_session_id() # print self.session_id return complete