def request(
        self,
        method: transport.HttpMethod,
        path: str,
        query_params: Optional[MutableMapping[str, str]] = None,
        body: Optional[bytes] = None,
        authenticator: Optional[Callable[[], Dict[str, str]]] = None,
        headers: Optional[MutableMapping[str, str]] = None,
        transport_options: Optional[transport.TransportSettings] = None,
    ) -> transport.Response:

        url = f"{self.api_path}{path}"
        if headers is None:
            headers = {}
        if authenticator:
            headers.update(authenticator())
        timeout = self.settings.timeout
        if transport_options:
            timeout = transport_options.timeout
        logging.info("%s(%s)", method.name, url)
        try:
            resp = self.session.request(
                method.name,
                url,
                auth=NullAuth(),
                params=query_params,
                data=body,
                headers=headers,
                timeout=timeout,
            )
        except IOError as exc:
            ret = transport.Response(
                False,
                bytes(str(exc), encoding="utf-8"),
                transport.ResponseMode.STRING,
            )
        else:
            ret = transport.Response(
                resp.ok,
                resp.content,
                transport.response_mode(resp.headers.get("content-type")),
            )
            encoding = cast(
                Optional[str],
                requests.utils.get_encoding_from_headers(resp.headers))
            if encoding:
                ret.encoding = encoding

        return ret
Beispiel #2
0
    def request(
        self,
        method: transport.HttpMethod,
        path: str,
        query_params: Optional[MutableMapping[str, str]] = None,
        body: Optional[bytes] = None,
        authenticator: transport.TAuthenticator = None,
        transport_options: Optional[transport.TransportOptions] = None,
    ) -> transport.Response:

        headers = {}
        timeout = self.settings.timeout
        if authenticator:
            headers.update(authenticator(transport_options or {}))
        if transport_options:
            if transport_options.get("headers"):
                headers.update(transport_options["headers"])
            if transport_options.get("timeout"):
                timeout = transport_options["timeout"]
        self.logger.info("%s(%s)", method.name, path)
        try:
            resp = self.session.request(
                method.name,
                path,
                auth=NullAuth(),
                params=query_params,
                data=body,
                headers=headers,
                timeout=timeout,
            )
        except IOError as exc:
            ret = transport.Response(
                False,
                bytes(str(exc), encoding="utf-8"),
                transport.ResponseMode.STRING,
            )
        else:
            ret = transport.Response(
                resp.ok,
                resp.content,
                transport.response_mode(resp.headers.get("content-type")),
            )
            encoding = cast(
                Optional[str],
                requests.utils.get_encoding_from_headers(resp.headers))
            if encoding:
                ret.encoding = encoding

        return ret
Beispiel #3
0
def test_response_mode(content_type, expected_response_mode):
    assert transport.response_mode(content_type) == expected_response_mode