]> git.ipfire.org Git - thirdparty/httpx.git/commitdiff
add basic type annotation for RequestExtensions and RequestData (#2367)
authorAdrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>
Tue, 13 Sep 2022 14:24:01 +0000 (09:24 -0500)
committerGitHub <noreply@github.com>
Tue, 13 Sep 2022 14:24:01 +0000 (09:24 -0500)
httpx/_client.py
httpx/_content.py
httpx/_main.py
httpx/_models.py
httpx/_multipart.py
httpx/_types.py

index 730ab4a5e059f3ce1c9cbccfdc55d5371d5ac854..722735c195221f257b6d81cec52f11d274df71fe 100644 (file)
@@ -38,6 +38,7 @@ from ._types import (
     QueryParamTypes,
     RequestContent,
     RequestData,
+    RequestExtensions,
     RequestFiles,
     SyncByteStream,
     TimeoutTypes,
@@ -328,7 +329,7 @@ class BaseClient:
         headers: typing.Optional[HeaderTypes] = None,
         cookies: typing.Optional[CookieTypes] = None,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Request:
         """
         Build and return a request instance.
@@ -773,7 +774,7 @@ class Client(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault, None] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Build and send a request.
@@ -830,7 +831,7 @@ class Client(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault, None] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> typing.Iterator[Response]:
         """
         Alternative to `httpx.request()` that streams the response body
@@ -1029,7 +1030,7 @@ class Client(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `GET` request.
@@ -1058,7 +1059,7 @@ class Client(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send an `OPTIONS` request.
@@ -1087,7 +1088,7 @@ class Client(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `HEAD` request.
@@ -1120,7 +1121,7 @@ class Client(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `POST` request.
@@ -1157,7 +1158,7 @@ class Client(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `PUT` request.
@@ -1194,7 +1195,7 @@ class Client(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `PATCH` request.
@@ -1227,7 +1228,7 @@ class Client(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `DELETE` request.
@@ -1493,7 +1494,7 @@ class AsyncClient(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault, None] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Build and send a request.
@@ -1542,7 +1543,7 @@ class AsyncClient(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> typing.AsyncIterator[Response]:
         """
         Alternative to `httpx.request()` that streams the response body
@@ -1741,7 +1742,7 @@ class AsyncClient(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault, None] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `GET` request.
@@ -1770,7 +1771,7 @@ class AsyncClient(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send an `OPTIONS` request.
@@ -1799,7 +1800,7 @@ class AsyncClient(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `HEAD` request.
@@ -1832,7 +1833,7 @@ class AsyncClient(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `POST` request.
@@ -1869,7 +1870,7 @@ class AsyncClient(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `PUT` request.
@@ -1906,7 +1907,7 @@ class AsyncClient(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `PATCH` request.
@@ -1939,7 +1940,7 @@ class AsyncClient(BaseClient):
         auth: typing.Union[AuthTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
         follow_redirects: typing.Union[bool, UseClientDefault] = USE_CLIENT_DEFAULT,
         timeout: typing.Union[TimeoutTypes, UseClientDefault] = USE_CLIENT_DEFAULT,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ) -> Response:
         """
         Send a `DELETE` request.
index eb7a7aef17cb173624d21da0b9a340626c73d05e..1f149a19ceade923c8d7d0be444e50dfa7fcb8dd 100644 (file)
@@ -8,6 +8,7 @@ from typing import (
     Dict,
     Iterable,
     Iterator,
+    Mapping,
     Optional,
     Tuple,
     Union,
@@ -134,7 +135,7 @@ def encode_content(
 
 
 def encode_urlencoded_data(
-    data: dict,
+    data: RequestData,
 ) -> Tuple[Dict[str, str], ByteStream]:
     plain_data = []
     for key, value in data.items():
@@ -150,7 +151,7 @@ def encode_urlencoded_data(
 
 
 def encode_multipart_data(
-    data: dict, files: RequestFiles, boundary: Optional[bytes]
+    data: RequestData, files: RequestFiles, boundary: Optional[bytes]
 ) -> Tuple[Dict[str, str], MultipartStream]:
     multipart = MultipartStream(data=data, files=files, boundary=boundary)
     headers = multipart.get_headers()
@@ -192,7 +193,7 @@ def encode_request(
     Handles encoding the given `content`, `data`, `files`, and `json`,
     returning a two-tuple of (<headers>, <stream>).
     """
-    if data is not None and not isinstance(data, dict):
+    if data is not None and not isinstance(data, Mapping):  # type: ignore
         # We prefer to separate `content=<bytes|str|byte iterator|bytes aiterator>`
         # for raw request content, and `data=<form data>` for url encoded or
         # multipart form content.
index ebcb65214faf1a5ada123f9e2589988928406357..24f1e558b87117f361cafc6ac44f948a02c01898 100644 (file)
@@ -197,7 +197,9 @@ def format_certificate(cert: dict) -> str:  # pragma: nocover
     return "\n".join(lines)
 
 
-def trace(name: str, info: dict, verbose: bool = False) -> None:
+def trace(
+    name: str, info: typing.Mapping[str, typing.Any], verbose: bool = False
+) -> None:
     console = rich.console.Console()
     if name == "connection.connect_tcp.started" and verbose:
         host = info["host"]
index 84739f74d79ca1a97617aaf6525502e3fde53596..5d8a51b3bf2d32d1e8cb02fc0b1b7815d2c337dd 100644 (file)
@@ -35,8 +35,10 @@ from ._types import (
     QueryParamTypes,
     RequestContent,
     RequestData,
+    RequestExtensions,
     RequestFiles,
     ResponseContent,
+    ResponseExtensions,
     SyncByteStream,
 )
 from ._urls import URL
@@ -316,7 +318,7 @@ class Request:
         files: typing.Optional[RequestFiles] = None,
         json: typing.Optional[typing.Any] = None,
         stream: typing.Union[SyncByteStream, AsyncByteStream, None] = None,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[RequestExtensions] = None,
     ):
         self.method = (
             method.decode("ascii").upper()
@@ -452,7 +454,7 @@ class Response:
         json: typing.Any = None,
         stream: typing.Union[SyncByteStream, AsyncByteStream, None] = None,
         request: typing.Optional[Request] = None,
-        extensions: typing.Optional[dict] = None,
+        extensions: typing.Optional[ResponseExtensions] = None,
         history: typing.Optional[typing.List["Response"]] = None,
         default_encoding: typing.Union[str, typing.Callable[[bytes], str]] = "utf-8",
     ):
index 087448f9d60c2237e42db31eaf3f938e58d1d0e6..0329649758569c919470b1dbfab320204fafed1c 100644 (file)
@@ -8,6 +8,7 @@ from ._types import (
     AsyncByteStream,
     FileContent,
     FileTypes,
+    RequestData,
     RequestFiles,
     SyncByteStream,
 )
@@ -190,7 +191,10 @@ class MultipartStream(SyncByteStream, AsyncByteStream):
     """
 
     def __init__(
-        self, data: dict, files: RequestFiles, boundary: typing.Optional[bytes] = None
+        self,
+        data: RequestData,
+        files: RequestFiles,
+        boundary: typing.Optional[bytes] = None,
     ) -> None:
         if boundary is None:
             boundary = binascii.hexlify(os.urandom(16))
@@ -202,7 +206,7 @@ class MultipartStream(SyncByteStream, AsyncByteStream):
         self.fields = list(self._iter_fields(data, files))
 
     def _iter_fields(
-        self, data: dict, files: RequestFiles
+        self, data: RequestData, files: RequestFiles
     ) -> typing.Iterator[typing.Union[FileField, DataField]]:
         for name, value in data.items():
             if isinstance(value, (tuple, list)):
index 8a50314bd3ef8b6e99b1213e8ea89f6c758628ae..e015844bbfeb571803b13790862d6dde9e328c5c 100644 (file)
@@ -7,6 +7,7 @@ from http.cookiejar import CookieJar
 from typing import (
     IO,
     TYPE_CHECKING,
+    Any,
     AsyncIterable,
     AsyncIterator,
     Callable,
@@ -75,8 +76,9 @@ AuthTypes = Union[
 
 RequestContent = Union[str, bytes, Iterable[bytes], AsyncIterable[bytes]]
 ResponseContent = Union[str, bytes, Iterable[bytes], AsyncIterable[bytes]]
+ResponseExtensions = Dict[str, Any]
 
-RequestData = dict
+RequestData = Mapping[str, Any]
 
 FileContent = Union[IO[bytes], bytes]
 FileTypes = Union[
@@ -91,6 +93,8 @@ FileTypes = Union[
 ]
 RequestFiles = Union[Mapping[str, FileTypes], Sequence[Tuple[str, FileTypes]]]
 
+RequestExtensions = Dict[str, Any]
+
 
 class SyncByteStream:
     def __iter__(self) -> Iterator[bytes]: