访问CodeDog Server的API重试类
| 19 | |
| 20 | |
| 21 | class RetryDogServer(object): |
| 22 | """ |
| 23 | 访问CodeDog Server的API重试类 |
| 24 | """ |
| 25 | def __init__(self, server_url, token): |
| 26 | self._server_url = server_url |
| 27 | self._token = token |
| 28 | |
| 29 | def __retry_on_error(self, error, method_name): |
| 30 | """ |
| 31 | 失败重试函数 |
| 32 | :param error: |
| 33 | :return: |
| 34 | """ |
| 35 | # 不需要重试的方法 |
| 36 | if method_name in ["update_task_progress"]: |
| 37 | raise error |
| 38 | err_msg = str(error) |
| 39 | # 遇到以下错误,server可能正在升级,需要1分钟左右的时间,因此重试间隔增加30s(加上原来的5s,一共35s,至少会重试2次,可以满足1分钟的server更新) |
| 40 | # 400 - 服务器不理解请求的语法 |
| 41 | # 500 -(服务器内部错误)服务器遇到错误,无法完成请求 |
| 42 | if "Error[400]" in err_msg or "Error[500]" in err_msg: |
| 43 | logger.info("服务器可能正在升级,等待30s后重试...") |
| 44 | time.sleep(30) |
| 45 | # 重试直到成功为止 |
| 46 | return |
| 47 | |
| 48 | def get_api_server(self, retry_times=-1): |
| 49 | """根据实际情况获取api server对象 |
| 50 | |
| 51 | :param retry_times: 异常重试次数,默认为-1,即一直重试直到成功 |
| 52 | :param token: api访问token |
| 53 | :return: api server对象 |
| 54 | """ |
| 55 | api_server = CodeDogApiServer(self._token, self._server_url) |
| 56 | return SyncWrapper(Retry(server=api_server, on_error=self.__retry_on_error, total=retry_times)) |
no outgoing calls
no test coverage detected