Ejemplo n.º 1
0
    def request(self, method, path, headers={}, data=None):
        auth_headers = sign_request(key=self.key,
                                    http_method=method,
                                    path=self.parsed_url.path +
                                    path.split('?', 1)[0],
                                    body=data,
                                    host=self.parsed_url.netloc,
                                    timestamp=datetime.datetime.utcnow(),
                                    user_id=self.client)
        request_headers = {}
        request_headers.update(self.headers)
        request_headers.update(dict(
            (k.lower(), v) for k, v in headers.items()))
        request_headers['x-chef-version'] = self.version
        request_headers.update(auth_headers)
        try:
            response = self._request(
                method, self.url + path, data,
                dict((k.capitalize(), v) for k, v in request_headers.items()))
        except requests.ConnectionError as e:
            raise ChefServerError(str(e))
        except requests.Timeout as e:
            raise ChefServerError(e)

        if not response.ok:
            raise ChefServerError.from_error(response.reason,
                                             code=response.status_code)

        return response