def _handle_reply(self, reply, request): hostkey = request.get_host_key() ratecontrol.decrement_requests(hostkey) self._timer_run_next_task.start(0) slow_down = False error = int(reply.error()) handler = request.handler response_code = self.http_response_code(reply) url = self.http_response_safe_url(reply) if error: errstr = reply.errorString() log.error( "Network request error for %s: %s (QT code %d, HTTP code %d)", url, errstr, error, response_code) if (not request.max_retries_reached() and (response_code == 503 or response_code == 429 # Sometimes QT returns a http status code of 200 even when there # is a service unavailable error. But it returns a QT error code # of 403 when this happens or error == 403)): slow_down = True retries = request.mark_for_retry() log.debug("Retrying %s (#%d)", url, retries) self.add_request(request) elif handler is not None: handler(reply.readAll(), reply, error) slow_down = (slow_down or response_code >= 500) else: redirect = reply.attribute( QNetworkRequest.RedirectionTargetAttribute) from_cache = reply.attribute( QNetworkRequest.SourceIsFromCacheAttribute) cached = ' (CACHED)' if from_cache else '' log.debug("Received reply for %s: HTTP %d (%s) %s", url, response_code, self.http_response_phrase(reply), cached) if handler is not None: # Redirect if found and not infinite if redirect: self._handle_redirect(reply, request, redirect) elif request.response_parser: try: document = request.response_parser(reply) log.debug("Response received: %s", document) except Exception as e: log.error("Unable to parse the response for %s: %s", url, e) document = reply.readAll() error = e finally: handler(document, reply, error) else: handler(reply.readAll(), reply, error) ratecontrol.adjust(hostkey, slow_down)
def _handle_reply(self, reply, request): hostkey = request.get_host_key() ratecontrol.decrement_requests(hostkey) self._timer_run_next_task.start(0) slow_down = False error = int(reply.error()) handler = request.handler if error: code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) code = int(code) if code else 0 errstr = reply.errorString() url = reply.request().url().toString(QUrl.RemoveUserInfo) log.error("Network request error for %s: %s (QT code %d, HTTP code %d)", url, errstr, error, code) if (not request.max_retries_reached() and (code == 503 or code == 429 # Sometimes QT returns a http status code of 200 even when there # is a service unavailable error. But it returns a QT error code # of 403 when this happens or error == 403 ) ): slow_down = True retries = request.mark_for_retry() log.debug("Retrying %s (#%d)", url, retries) self.add_request(request) elif handler is not None: handler(reply.readAll(), reply, error) slow_down = (slow_down or code >= 500) else: redirect = reply.attribute(QNetworkRequest.RedirectionTargetAttribute) fromCache = reply.attribute(QNetworkRequest.SourceIsFromCacheAttribute) cached = ' (CACHED)' if fromCache else '' log.debug("Received reply for %s: HTTP %d (%s) %s", reply.request().url().toString(QUrl.RemoveUserInfo), reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.attribute(QNetworkRequest.HttpReasonPhraseAttribute), cached ) if handler is not None: # Redirect if found and not infinite if redirect: self._handle_redirect(reply, request, redirect) elif request.response_parser: try: document = request.response_parser(reply) except Exception as e: url = reply.request().url().toString(QUrl.RemoveUserInfo) log.error("Unable to parse the response for %s: %s", url, e) document = reply.readAll() error = e finally: handler(document, reply, error) else: handler(reply.readAll(), reply, error) ratecontrol.adjust(hostkey, slow_down)