def _handle_result(self, res, method=None, url=None, **kwargs): result = json.loads(res.content.decode('utf-8', 'ignore'), strict=False) if 'errcode' in result: result['errcode'] = int(result['errcode']) if 'errcode' in result and result['errcode'] != 0: errcode = result['errcode'] errmsg = result['errmsg'] if errcode == 42001: logger.info( 'Component access token expired, fetch a new one and retry request' ) self.fetch_access_token() kwargs['params']['component_access_token'] = self.session.get( 'component_access_token') return self._request(method=method, url_or_endpoint=url, **kwargs) elif errcode == 45009: # api freq out of limit raise APILimitedException(errcode, errmsg, client=self, request=res.request, response=res) else: raise WeChatClientException(errcode, errmsg, client=self, request=res.request, response=res) return result
def _handle_result(self, res, method=None, url=None, **kwargs): res.encoding = 'utf-8' result = res.json() if 'base_resp' in result: # Different response in device APIs. F**k tencent! result = result['base_resp'] if 'errcode' in result: result['errcode'] = int(result['errcode']) if 'errcode' in result and result['errcode'] != 0: errcode = result['errcode'] errmsg = result['errmsg'] if errcode == 42001: # access_token expired, fetch a new one and retry request self.fetch_access_token() kwargs['params']['access_token'] = self.session.get( 'access_token') return self._request(method=method, url_or_endpoint=url, **kwargs) elif errcode == 45009: # api freq out of limit raise APILimitedException(errcode, errmsg, client=self, request=res.request, response=res) else: raise WeChatClientException(errcode, errmsg, client=self, request=res.request, response=res) return result
def _handle_result(self, res, method=None, url=None, **kwargs): result = json.loads(res.content.decode("utf-8", "ignore"), strict=False) if "errcode" in result: result["errcode"] = int(result["errcode"]) if "errcode" in result and result["errcode"] != 0: errcode = result["errcode"] errmsg = result.get("errmsg", errcode) if self.auto_retry and errcode in ( WeChatErrorCode.INVALID_CREDENTIAL.value, WeChatErrorCode.INVALID_ACCESS_TOKEN.value, WeChatErrorCode.EXPIRED_ACCESS_TOKEN.value, ): logger.info("Component access token expired, fetch a new one and retry request") self.fetch_access_token() kwargs["params"]["component_access_token"] = self.session.get( "{}_component_access_token".format(self.component_appid) ) return self._request(method=method, url_or_endpoint=url, **kwargs) elif errcode == WeChatErrorCode.OUT_OF_API_FREQ_LIMIT.value: # api freq out of limit raise APILimitedException(errcode, errmsg, client=self, request=res.request, response=res) else: raise WeChatClientException(errcode, errmsg, client=self, request=res.request, response=res) return result
def _handle_result(self, res, method=None, url=None, result_processor=None, **kwargs): if not isinstance(res, dict): # Dirty hack around asyncio based AsyncWeChatClient result = self._decode_result(res) else: result = res if not isinstance(result, dict): return result if 'base_resp' in result: # Different response in device APIs. F**k tencent! result.update(result.pop('base_resp')) if 'errcode' in result: result['errcode'] = int(result['errcode']) if 'errcode' in result and result['errcode'] != 0: errcode = result['errcode'] errmsg = result.get('errmsg', errcode) if self.auto_retry and errcode in ( WeChatErrorCode.INVALID_CREDENTIAL.value, WeChatErrorCode.INVALID_ACCESS_TOKEN.value, WeChatErrorCode.EXPIRED_ACCESS_TOKEN.value): logger.info('Access token expired, fetch a new one and retry request') self.fetch_access_token() access_token, expires_at = self.session.get(self.access_token_key) kwargs['params']['access_token'] = access_token return self._request( method=method, url_or_endpoint=url, result_processor=result_processor, **kwargs ) elif errcode == WeChatErrorCode.OUT_OF_API_FREQ_LIMIT.value: # api freq out of limit raise APILimitedException( errcode, errmsg, client=self, request=res.request, response=res ) else: raise WeChatClientException( errcode, errmsg, client=self, request=res.request, response=res ) return result if not result_processor else result_processor(result)
def _handle_result(self, res, method=None, url=None, result_processor=None, **kwargs): if not isinstance(res, dict): # Dirty hack around asyncio based AsyncWeChatClient result = self._decode_result(res) else: result = res if not isinstance(result, dict): return result if 'base_resp' in result: # Different response in device APIs. F**k tencent! result = result['base_resp'] if 'errcode' in result: result['errcode'] = int(result['errcode']) if 'errcode' in result and result['errcode'] != 0: errcode = result['errcode'] errmsg = result['errmsg'] if errcode in (40001, 40014, 42001): # access_token expired, fetch a new one and retry request self.fetch_access_token() access_token = self.session.get(self.access_token_key) kwargs['params']['access_token'] = access_token return self._request( method=method, url_or_endpoint=url, result_processor=result_processor, **kwargs ) elif errcode == 45009: # api freq out of limit raise APILimitedException( errcode, errmsg, client=self, request=res.request, response=res ) else: raise WeChatClientException( errcode, errmsg, client=self, request=res.request, response=res ) return result if not result_processor else result_processor(result)
def _handle_result(self, res, method=None, url=None, **kwargs): res.encoding = 'utf-8' try: result = res.json() except (TypeError, ValueError): # Return origin response object if we can not decode it as JSON return res if 'base_resp' in result: # Different response in device APIs. F**k tencent! result = result['base_resp'] if 'errcode' in result: result['errcode'] = int(result['errcode']) if 'errcode' in result and result['errcode'] != 0: errcode = result['errcode'] errmsg = result['errmsg'] if errcode in (40001, 40014, 42001): # access_token expired, fetch a new one and retry request self.fetch_access_token() access_token = self.session.get(self.access_token_key) kwargs['params']['access_token'] = access_token return self._request(method=method, url_or_endpoint=url, **kwargs) elif errcode == 45009: # api freq out of limit raise APILimitedException(errcode, errmsg, client=self, request=res.request, response=res) else: raise WeChatClientException(errcode, errmsg, client=self, request=res.request, response=res) return result
def _handle_result(self, res, method=None, url=None, **kwargs): result = json.loads(res.content.decode('utf-8', 'ignore'), strict=False) if 'errcode' in result: result['errcode'] = int(result['errcode']) if 'errcode' in result and result['errcode'] != 0: errcode = result['errcode'] errmsg = result.get('errmsg', errcode) if self.auto_retry and errcode in ( WeChatErrorCode.INVALID_CREDENTIAL.value, WeChatErrorCode.INVALID_ACCESS_TOKEN.value, WeChatErrorCode.EXPIRED_ACCESS_TOKEN.value): logger.info('Component access token expired, fetch a new one and retry request') self.fetch_access_token() kwargs['params']['component_access_token'] = self.session.get( 'component_access_token' ) return self._request( method=method, url_or_endpoint=url, **kwargs ) elif errcode == WeChatErrorCode.OUT_OF_API_FREQ_LIMIT.value: # api freq out of limit raise APILimitedException( errcode, errmsg, client=self, request=res.request, response=res ) else: raise WeChatClientException( errcode, errmsg, client=self, request=res.request, response=res ) return result