From cfcdb7cce308304f13ed40d0ff8336a3bd1bd587 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Tue, 6 Feb 2024 15:09:22 +0000 Subject: [PATCH] requests: Allow passing None header values https://github.com/python/typeshed/pull/7773 changed `requests.session.Session` methods to accept None for header values, but didn't do quite the same for the functions in `requests.api`. I think this was a mistake. The functions in `requests.api` just pass through the `headers` argument without doing anything in particular to it. Furthermore, it's useful to be able to pass None as a header value: because `requests.utils.default_headers` sets an `Accept-Encoding` header by default, the easiest way to send a request with no `Accept-Encoding` header is something like `requests.get(url, headers={"Accept-Encoding": None})`. It's annoying to have to construct a `Session` just to pass type-checking. It's a little confusing for the type alias to be called `_HeadersUpdateMapping` in `requests.sessions` but `_HeadersMapping` in `requests.api`; this is because the latter name was already used in other type stubs (`tensorflow.keras.callbacks`), so it seemed best to avoid breaking API. --- stubs/requests/requests/api.pyi | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/stubs/requests/requests/api.pyi b/stubs/requests/requests/api.pyi index 5578f13a5aca..8032af2b2707 100644 --- a/stubs/requests/requests/api.pyi +++ b/stubs/requests/requests/api.pyi @@ -3,9 +3,7 @@ from collections.abc import Mapping from typing_extensions import TypeAlias from .models import Response -from .sessions import RequestsCookieJar, _Auth, _Cert, _Data, _Files, _HooksInput, _Params, _TextMapping, _Timeout, _Verify - -_HeadersMapping: TypeAlias = Mapping[str, str | bytes] +from .sessions import RequestsCookieJar, _Auth, _Cert, _Data, _Files, _HeadersUpdateMapping as _HeadersMapping, _HooksInput, _Params, _TextMapping, _Timeout, _Verify def request( method: str | bytes,