def make_request(self, method_request, **method_kwargs): logger.debug('Prepare API Method request') response = self.send_api_request(method_request) response.raise_for_status() # there are may be 2 dicts in one JSON # for example: {'error': ...}{'response': ...} errors = [] error_codes = [] for data in json_iter_parse(response.text): if 'error' in data: error_data = data['error'] if error_data['error_code'] == CAPTCHA_IS_NEEDED: return self.on_captcha_is_needed(error_data, method_request) error_codes.append(error_data['error_code']) errors.append(error_data) if 'response' in data: for error in errors: logger.warning(str(error)) return data['response'] if AUTHORIZATION_FAILED in error_codes: # invalid access token logger.info('Authorization failed. Access token will be dropped') self.access_token = None return self.make_request(method_request) else: raise VkAPIMethodError(errors[0])
def __call__(self, method_name, **method_kwargs): self.check_access_token() response = self.method_request(method_name, **method_kwargs) response.raise_for_status() # there are may be 2 dicts in 1 json # for example: {'error': ...}{'response': ...} errors = [] error_codes = [] for data in json_iter_parse(response.text): if "error" in data: error_data = data["error"] if error_data["error_code"] == CAPTCHA_IS_NEEDED: return self.captcha_is_needed(error_data, method_name, **method_kwargs) error_codes.append(error_data["error_code"]) errors.append(error_data) if "response" in data: for error in errors: warnings.warn(str(error)) return data["response"] if AUTHORIZATION_FAILED in error_codes: # invalid access token self.logger.info("Authorization failed. Access token will be dropped") self.drop_access_token() return self(method_name, **method_kwargs) else: raise VkAPIMethodError(errors[0])
def __call__(self, method_name, **method_kwargs): self.check_access_token() response = self.method_request(method_name, **method_kwargs) response.raise_for_status() # there are may be 2 dicts in 1 json # for example: {'error': ...}{'response': ...} errors = [] error_codes = [] for data in json_iter_parse(response.text): if 'error' in data: error_data = data['error'] if error_data['error_code'] == CAPTCHA_IS_NEEDED: return self.captcha_is_needed(error_data, method_name, **method_kwargs) error_codes.append(error_data['error_code']) errors.append(error_data) if 'response' in data: for error in errors: warnings.warn(str(error)) return data['response'] if AUTHORIZATION_FAILED in error_codes: # invalid access token logger.info('Authorization failed. Access token will be dropped') self.drop_access_token() return self(method_name, **method_kwargs) else: raise VkAPIMethodError(errors[0])
def make_request(self, method_request, **method_kwargs): logger.debug("Prepare API Method request") response = self.send_api_request(method_request) response.raise_for_status() # there are may be 2 dicts in one JSON # for example: {'error': ...}{'response': ...} errors = [] error_codes = [] for data in json_iter_parse(response.text): if "error" in data: error_data = data["error"] if error_data["error_code"] == CAPTCHA_IS_NEEDED: return self.on_captcha_is_needed(error_data, method_request) error_codes.append(error_data["error_code"]) errors.append(error_data) if "response" in data: for error in errors: logger.warning(str(error)) return data["response"] if AUTHORIZATION_FAILED in error_codes: # invalid access token logger.info("Authorization failed. Access token will be dropped") self.access_token = None return self.make_request(method_request) else: raise VkAPIMethodError(errors[0])
def send(self, request): self._prepare_request(request) method_url = self.API_URL + request.method response = self.session.post(method_url, request.method_params, timeout=self.timeout) response.raise_for_status() for response_or_error in json_iter_parse(response.text): request.response = response_or_error if 'response' in response_or_error: return response_or_error['response'] elif 'error' in response_or_error: api_error = VkAPIError(request.response['error']) request.api_error = api_error return self.handle_api_error(request)
def make_request(self, method_request, captcha_response=None): logger.debug('Prepare API Method request') response = self.send_api_request(method_request, captcha_response=captcha_response) # todo Replace with something less exceptional response.raise_for_status() # there are may be 2 dicts in one JSON # for example: "{'error': ...}{'response': ...}" for response_or_error in json_iter_parse(response.text): if 'response' in response_or_error: # todo Can we have error and response simultaneously # for error in errors: # logger.warning(str(error)) return response_or_error['response'] elif 'error' in response_or_error: error_data = response_or_error['error'] error = VkAPIError(error_data) if error.is_captcha_needed(): captcha_key = self.get_captcha_key(error.captcha_img) if not captcha_key: raise error captcha_response = { 'sid': error.captcha_sid, 'key': captcha_key, } return self.make_request(method_request, captcha_response=captcha_response) elif error.is_access_token_incorrect(): logger.info( 'Authorization failed. Access token will be dropped') self.access_token = None return self.make_request(method_request) else: raise error
def make_request(self, method_request, captcha_response=None): logger.debug('Prepare API Method request') response = self.send_api_request(method_request) # todo Replace with something less exceptional response.raise_for_status() # there are may be 2 dicts in one JSON # for example: "{'error': ...}{'response': ...}" for response_or_error in json_iter_parse(response.text): if 'response' in response_or_error: # todo Can we have error and response simultaneously # for error in errors: # logger.warning(str(error)) return response_or_error['response'] elif 'error' in response_or_error: error_data = response_or_error['error'] error = VkAPIError(error_data) if error.is_captcha_needed(): captcha_key = self.get_captcha_key(error.captcha_img) if not captcha_key: raise error captcha_response = { 'sid': error.captcha_sid, 'key': captcha_key, } return self.make_request(method_request, captcha_response=captcha_response) elif error.is_access_token_incorrect(): logger.info('Authorization failed. Access token will be dropped') self.access_token = None return self.make_request(method_request) else: raise error