http.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:python-iotronicclient 作者: openstack 项目源码 文件源码
def _http_request(self, url, method, **kwargs):
        kwargs.setdefault('user_agent', USER_AGENT)
        kwargs.setdefault('auth', self.auth)
        if isinstance(self.endpoint_override, six.string_types):
            kwargs.setdefault(
                'endpoint_override',
                _trim_endpoint_api_version(self.endpoint_override)
            )

        if getattr(self, 'os_iotronic_api_version', None):
            kwargs['headers'].setdefault('X-OpenStack-Iotronic-API-Version',
                                         self.os_iotronic_api_version)

        endpoint_filter = kwargs.setdefault('endpoint_filter', {})
        endpoint_filter.setdefault('interface', self.interface)
        endpoint_filter.setdefault('service_type', self.service_type)
        endpoint_filter.setdefault('region_name', self.region_name)

        resp = self.session.request(url, method,
                                    raise_exc=False, **kwargs)
        if resp.status_code == http_client.NOT_ACCEPTABLE:
            negotiated_ver = self.negotiate_version(self.session, resp)
            kwargs['headers']['X-OpenStack-Iotronic-API-Version'] = (
                negotiated_ver)
            return self._http_request(url, method, **kwargs)
        if resp.status_code >= http_client.BAD_REQUEST:
            error_json = _extract_error_json(resp.content)
            # NOTE(vdrok): exceptions from iotronic controllers' _lookup
            # methods
            # are constructed directly by pecan instead of wsme, and contain
            # only description field
            raise exc.from_response(resp, (error_json.get('faultstring') or
                                           error_json.get('description')),
                                    error_json.get('debuginfo'), method, url)
        elif resp.status_code in (http_client.MOVED_PERMANENTLY,
                                  http_client.FOUND, http_client.USE_PROXY):
            # Redirected. Reissue the request to the new location.
            location = resp.headers.get('location')
            resp = self._http_request(location, method, **kwargs)
        elif resp.status_code == http_client.MULTIPLE_CHOICES:
            raise exc.from_response(resp, method=method, url=url)
        return resp
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号