diff --git a/google/auth/transport/__init__.py b/google/auth/transport/__init__.py index 724568e58..56a595d6e 100644 --- a/google/auth/transport/__init__.py +++ b/google/auth/transport/__init__.py @@ -4,7 +4,7 @@ # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -12,20 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Transport - HTTP client library support. - -:mod:`google.auth` is designed to work with various HTTP client libraries such -as urllib3 and requests. In order to work across these libraries with different -interfaces some abstraction is needed. - -This module provides two interfaces that are implemented by transport adapters -to support HTTP libraries. :class:`Request` defines the interface expected by -:mod:`google.auth` to make requests. :class:`Response` defines the interface -for the return value of :class:`Request`. -""" +"""Transport - HTTP client library support.""" import abc import http.client as http_client +from typing import Mapping, Optional, Any + DEFAULT_RETRYABLE_STATUS_CODES = ( http_client.INTERNAL_SERVER_ERROR, @@ -33,71 +25,45 @@ http_client.REQUEST_TIMEOUT, http_client.TOO_MANY_REQUESTS, ) -"""Sequence[int]: HTTP status codes indicating a request can be retried. -""" - DEFAULT_REFRESH_STATUS_CODES = (http_client.UNAUTHORIZED,) -"""Sequence[int]: Which HTTP status code indicate that credentials should be -refreshed. -""" DEFAULT_MAX_REFRESH_ATTEMPTS = 2 -"""int: How many times to refresh the credentials and retry a request.""" class Response(metaclass=abc.ABCMeta): """HTTP Response data.""" - @abc.abstractproperty - def status(self): + @property + @abc.abstractmethod + def status(self) -> int: """int: The HTTP status code.""" - raise NotImplementedError("status must be implemented.") + ... - @abc.abstractproperty - def headers(self): + @property + @abc.abstractmethod + def headers(self) -> Mapping[str, str]: """Mapping[str, str]: The HTTP response headers.""" - raise NotImplementedError("headers must be implemented.") + ... - @abc.abstractproperty - def data(self): + @property + @abc.abstractmethod + def data(self) -> bytes: """bytes: The response body.""" - raise NotImplementedError("data must be implemented.") + ... class Request(metaclass=abc.ABCMeta): - """Interface for a callable that makes HTTP requests. - - Specific transport implementations should provide an implementation of - this that adapts their specific request / response API. - - .. automethod:: __call__ - """ + """Interface for a callable that makes HTTP requests.""" @abc.abstractmethod def __call__( - self, url, method="GET", body=None, headers=None, timeout=None, **kwargs - ): - """Make an HTTP request. - - Args: - url (str): The URI to be requested. - method (str): The HTTP method to use for the request. Defaults - to 'GET'. - body (bytes): The payload / body in HTTP request. - headers (Mapping[str, str]): Request headers. - timeout (Optional[int]): The number of seconds to wait for a - response from the server. If not specified or if None, the - transport-specific default timeout will be used. - kwargs: Additionally arguments passed on to the transport's - request method. - - Returns: - Response: The HTTP response. - - Raises: - google.auth.exceptions.TransportError: If any exception occurred. - """ - # pylint: disable=redundant-returns-doc, missing-raises-doc - # (pylint doesn't play well with abstract docstrings.) - raise NotImplementedError("__call__ must be implemented.") + self, + url: str, + method: str = "GET", + body: Optional[bytes] = None, + headers: Optional[Mapping[str, str]] = None, + timeout: Optional[int] = None, + **kwargs: Any, + ) -> Response: + ...