def get_domain_ranges(self, sequence): if self.url is None: raise InitError("interpro url is not set") job_id = self._interpro_submit(sequence) t0 = time() while (time() - t0) < self.job_timout: status = self._interpro_status(job_id) if status in ['RUNNING', 'PENDING', 'STARTED']: sleep(self.poll_interval) elif status == 'NOT_FOUND': job_id = self._interpro_submit(sequence) else: break if status == 'RUNNING': raise ServiceError("inteproscan job timed out") elif status in ['FAILURE', 'ERROR']: raise ServiceError(self._interpro_error(job_id)) elif status != 'FINISHED': raise ServiceError("inteproscan job status = " + status) xml_str = self._interpro_result(job_id) return self._parse_interpro_ranges(xml_str)
def _get_redis(self): if self.redis_hostname is None: raise ServiceError("redis hostname is not set") if self.redis_port is None: raise ServiceError("redis port is not set") if self.redis_db is None: raise ServiceError("redis db is not set") return redis.StrictRedis(host=self.redis_hostname, port=self.redis_port, db=self.redis_db)
def _interpro_error(self, job_id): result_url = '/'.join([self.url, 'result', job_id, 'xml']) try: r = requests.get(result_url, timeout=self.http_timeout) except requests.exceptions.ConnectTimeout: raise ServiceError("timeout connecting with interpro") r.raise_for_status() return r.text
def _interpro_submit(self, sequence): params = {'email': "*****@*****.**", 'sequence': sequence, 'goterms': True, 'pathways': False} submit_url = '/'.join([self.url, 'run']) try: r = requests.post(submit_url, data=params, timeout=self.http_timeout) except requests.exceptions.ConnectTimeout: raise ServiceError("timeout connecting with interpro") r.raise_for_status() return r.text