Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
 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
Exemple #4
0
 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