def _decode_result(self, res): try: result = json.loads(res.content.decode('utf-8', 'ignore'), strict=False) except (TypeError, ValueError): # Return origin response object if we can not decode it as JSON return res return result
def _decode_result(self, res): try: result = json.loads(res.body) except (TypeError, ValueError): # Return origin response object if we can not decode it as JSON return 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['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 _request(self, method, url_or_endpoint, **kwargs): if not url_or_endpoint.startswith(('http://', 'https://')): url = '{base}{endpoint}'.format(base=self.API_BASE_URL, endpoint=url_or_endpoint) else: url = url_or_endpoint if isinstance(kwargs.get('data', ''), dict): body = json.dumps(kwargs['data'], ensure_ascii=False) body = body.encode('utf-8') kwargs['data'] = body res = self._http.request(method=method, url=url, **kwargs) try: res.raise_for_status() except requests.RequestException as reqe: raise WeChatOAuthException(errcode=None, errmsg=None, client=self, request=reqe.request, response=reqe.response) result = json.loads(res.content.decode('utf-8', 'ignore'), strict=False) if 'errcode' in result and result['errcode'] != 0: errcode = result['errcode'] errmsg = result['errmsg'] raise WeChatOAuthException(errcode, errmsg, client=self, request=res.request, response=res) return result
def _decode_result(self, res): res.encoding = 'utf-8' try: result = json.loads(res.content.decode('utf-8', errors='ignore')) except (TypeError, ValueError): # Return origin response object if we can not decode it as JSON return res return result
def _decode_result(self, res): try: result = json.loads(res.content.decode('utf-8', 'ignore'), strict=False) except (TypeError, ValueError): # Return origin response object if we can not decode it as JSON logger.warning('Can not decode response as JSON', exc_info=True) return res return result
def next_openid_mock(url, request): """伪造第二页的请求""" data = json.loads(request.body.decode()) if not data.get('next_openid'): return wechat_api_mock(url, request) # 根据拿到的第二页请求响应 是没有data和next_openid的 content = {"count": 0} headers = {'Content-Type': 'application/json'} return response(200, content, headers, request=request)
def get(self, key, default=None): try: with open('%s-%s' % (self.file_dir, key), 'r') as f: _dict = json.loads(to_text(f.read())) timestamp = time.time() expires_at = _dict.get('expires_at', 0) if expires_at == 0 or expires_at - timestamp > 60: return _dict['val'] except: traceback.print_exc() return default
def wechat_api_mock(url, request): path = url.path[1:].replace("/", "_") res_file = os.path.join(_FIXTURE_PATH, "%s.json" % path) content = {"errcode": 99999, "errmsg": "can not find fixture: %s" % res_file} headers = {"Content-Type": "application/json"} try: with open(res_file) as f: content = json.loads(f.read()) except (IOError, ValueError): content["errmsg"] = "Fixture %s json decode error" % res_file return response(200, content, headers, request=request)
def wechat_api_mock(url, request): path = url.path[1:].replace('/', '_') res_file = os.path.join(_FIXTURE_PATH, '%s.json' % path) content = { 'errcode': 99999, 'errmsg': 'can not find fixture: %s' % res_file } headers = {'Content-Type': 'application/json'} try: with open(res_file) as f: content = json.loads(f.read()) except (IOError, ValueError): content['errmsg'] = 'Fixture %s json decode error' % res_file return response(200, content, headers, request=request)
def wechat_api_mock(url, request): path = url.path.replace('/cgi-bin/component/', '').replace('/', '_') res_file = os.path.join(_FIXTURE_PATH, '%s.json' % path) content = { 'errcode': 99999, 'errmsg': 'can not find fixture %s' % res_file, } headers = {'Content-Type': 'application/json'} try: with open(res_file, 'rb') as f: content = json.loads(f.read().decode('utf-8')) except (IOError, ValueError): pass return response(200, content, headers, request=request)
def wechat_api_mock(url, request): path = url.path[1:].replace('/', '_') res_file = os.path.join(_FIXTURE_PATH, '%s.json' % path) content = { 'errcode': 99999, 'errmsg': 'can not find fixture: %s' % res_file } headers = { 'Content-Type': 'application/json' } try: with open(res_file) as f: content = json.loads(f.read()) except (IOError, ValueError): content['errmsg'] = 'Fixture %s json decode error' % res_file return response(200, content, headers, request=request)
def wechat_api_mock(url, request): path = url.path.replace('/cgi-bin/component/', '').replace('/', '_') res_file = os.path.join(_FIXTURE_PATH, '%s.json' % path) content = { 'errcode': 99999, 'errmsg': 'can not find fixture %s' % res_file, } headers = { 'Content-Type': 'application/json' } try: with open(res_file, 'rb') as f: content = json.loads(f.read().decode('utf-8')) except (IOError, ValueError): pass return response(200, content, headers, request=request)
def wechat_api_mock(url, request): path = url.path.replace('/cgi-bin/', '').replace('/', '_') if path.startswith('_'): path = path[1:] res_file = os.path.join(_FIXTURE_PATH, '%s.json' % path) content = { 'errcode': 99999, 'errmsg': 'can not find fixture %s' % res_file, } headers = {'Content-Type': 'application/json'} try: with open(res_file, 'rb') as f: content = json.loads(f.read().decode('utf-8')) except (IOError, ValueError) as e: content['errmsg'] = 'Loads fixture {0} failed, error: {1}'.format( res_file, e) return response(200, content, headers, request=request)
def _request(self, method, url_or_endpoint, **kwargs): if not url_or_endpoint.startswith(('http://', 'https://')): url = '{base}{endpoint}'.format( base=self.API_BASE_URL, endpoint=url_or_endpoint ) else: url = url_or_endpoint if isinstance(kwargs.get('data', ''), dict): body = json.dumps(kwargs['data'], ensure_ascii=False) body = body.encode('utf-8') kwargs['data'] = body res = self._http.request( method=method, url=url, **kwargs ) try: res.raise_for_status() except requests.RequestException as reqe: raise WeChatOAuthException( errcode=None, errmsg=None, client=self, request=reqe.request, response=reqe.response ) result = json.loads(res.content.decode('utf-8', 'ignore'), strict=False) if 'errcode' in result and result['errcode'] != 0: errcode = result['errcode'] errmsg = result['errmsg'] raise WeChatOAuthException( errcode, errmsg, client=self, request=res.request, response=res ) return result
def wechat_api_mock(url, request): path = url.path.replace('/cgi-bin/', '').replace('/', '_') if path.startswith('_'): path = path[1:] res_file = os.path.join(_FIXTURE_PATH, '%s.json' % path) content = { 'errcode': 99999, 'errmsg': 'can not find fixture %s' % res_file, } headers = { 'Content-Type': 'application/json' } try: with open(res_file, 'rb') as f: content = json.loads(f.read().decode('utf-8')) except (IOError, ValueError) as e: content['errmsg'] = 'Loads fixture {0} failed, error: {1}'.format( res_file, e ) return response(200, content, headers, request=request)
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
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: # access_token expired, fetch a new one and retry request self.fetch_component_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 get(self, key, default=None): key = self.key_name(key) value = self.mc.get(key) if value is None: return default return json.loads(to_text(value))