def request(self, url, body, verbose=0): self.verbose = verbose req = self.opener.newRequest(url, method='POST', headers=self.extraHeaders) req.setAbortCheck(self.abortCheck) req.setData(body, compress=self.compress) if self.entitlement: req.headers['X-Conary-Entitlement'] = self.entitlement if self.serverName: req.headers['X-Conary-Servername'] = self.serverName req.headers['User-agent'] = self.user_agent # Make sure we capture some useful information from the # opener, even if we failed try: try: response = self.opener.open(req) except AbortError: raise except http_error.ResponseError, err: if err.errcode == 403: raise errors.InsufficientPermission( repoName=self.serverName, url=url) elif err.errcode == 500: raise errors.InternalServerError(err) else: # Already has adequate URL information, so just rethrow it # without modifying the message. util.rethrow(errors.OpenError, False) except (socket.error, EnvironmentError, http_error.TransportError): e_type, e_value, e_tb = sys.exc_info() if isinstance(e_value, socket.error): errmsg = http_error.splitSocketError(e_value)[1] elif isinstance(e_value, EnvironmentError): errmsg = e_value.sterror # sometimes there is a socket error hiding inside an # IOError! if isinstance(errmsg, socket.error): errmsg = http_error.splitSocketError(errmsg)[1] else: e_name = getattr(e_type, '__name__', 'Unknown Error') errmsg = '%s: %s' % (e_name, e_value) raise errors.OpenError( "Error occurred opening repository %s: %s" % (url, errmsg)), None, e_tb else: self.responseHeaders = response.headers self.responseProtocol = response.protocolVersion return self.parse_response(response)
def request(self, url, body, verbose=0): self.verbose = verbose req = self.opener.newRequest(url, method='POST', headers=self.extraHeaders) req.setAbortCheck(self.abortCheck) req.setData(body, compress=self.compress) if self.entitlement: req.headers['X-Conary-Entitlement'] = self.entitlement if self.serverName: req.headers['X-Conary-Servername'] = self.serverName req.headers['User-agent'] = self.user_agent req.headers['Accept'] = ','.join(self.contentTypes + [self.mixedType]) # Make sure we capture some useful information from the # opener, even if we failed try: try: response = self.opener.open(req) except AbortError: raise except http_error.ResponseError, err: if err.errcode == 403: raise errors.InsufficientPermission( repoName=self.serverName, url=url) elif err.errcode == 500: raise errors.InternalServerError(err) else: # Already has adequate URL information, so just rethrow it # without modifying the message. util.rethrow(errors.OpenError, False) except (socket.error, EnvironmentError, http_error.TransportError): e_type, e_value, e_tb = sys.exc_info() if isinstance(e_value, socket.error): errmsg = http_error.splitSocketError(e_value)[1] elif isinstance(e_value, EnvironmentError): errmsg = e_value.strerror # sometimes there is a socket error hiding inside an # IOError! if isinstance(errmsg, socket.error): errmsg = http_error.splitSocketError(errmsg)[1] else: e_name = getattr(e_type, '__name__', 'Unknown Error') errmsg = '%s: %s' % (e_name, e_value) raise errors.OpenError( "Error occurred opening repository %s: %s" % (url, errmsg)), None, e_tb else: self.responseHeaders = response.headers self.responseProtocol = response.protocolVersion return self.parse_response(response)
def _processSocketError(self, error): """Append proxy information to an exception.""" if not self.lastProxy: return if self.lastProxy.scheme in ('conary', 'conarys'): kind = 'Conary' else: kind = 'HTTP' args, msg = http_error.splitSocketError(error) msgError = "%s (via %s proxy %s)" % (msg, kind, self.lastProxy) error.args = args + (msgError, ) if hasattr(error, 'strerror'): error.strerror = msgError
def _processSocketError(self, error): """Append proxy information to an exception.""" if not self.lastProxy: return if self.lastProxy.scheme in ('conary', 'conarys'): kind = 'Conary' else: kind = 'HTTP' args, msg = http_error.splitSocketError(error) msgError = "%s (via %s proxy %s)" % (msg, kind, self.lastProxy) error.args = args + (msgError,) if hasattr(error, 'strerror'): error.strerror = msgError