From: Florimond Manca Date: Thu, 25 Aug 2022 10:23:04 +0000 (+0200) Subject: Replace cgi which will be deprecated in Python 3.11 (#2309) X-Git-Tag: 0.23.1~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f13ab4d288d0b790f6f1c515a6c0ea45e9615748;p=thirdparty%2Fhttpx.git Replace cgi which will be deprecated in Python 3.11 (#2309) * Replace cgi which will be deprecated in Python 3.11 * Update httpx/_utils.py --- diff --git a/httpx/_models.py b/httpx/_models.py index fd1d7fe9..7a3b5885 100644 --- a/httpx/_models.py +++ b/httpx/_models.py @@ -1,4 +1,3 @@ -import cgi import datetime import email.message import json as jsonlib @@ -47,6 +46,7 @@ from ._utils import ( normalize_header_key, normalize_header_value, obfuscate_sensitive_headers, + parse_content_type_charset, parse_header_links, ) @@ -608,11 +608,7 @@ class Response: if content_type is None: return None - _, params = cgi.parse_header(content_type) - if "charset" not in params: - return None - - return params["charset"].strip("'\"") + return parse_content_type_charset(content_type) def _get_content_decoder(self) -> ContentDecoder: """ diff --git a/httpx/_utils.py b/httpx/_utils.py index e01c050d..ecce4f41 100644 --- a/httpx/_utils.py +++ b/httpx/_utils.py @@ -1,4 +1,5 @@ import codecs +import email.message import logging import mimetypes import netrc @@ -209,6 +210,14 @@ def parse_header_links(value: str) -> typing.List[typing.Dict[str, str]]: return links +def parse_content_type_charset(content_type: str) -> typing.Optional[str]: + # We used to use `cgi.parse_header()` here, but `cgi` became a dead battery. + # See: https://peps.python.org/pep-0594/#cgi + msg = email.message.Message() + msg["content-type"] = content_type + return msg.get_content_charset(failobj=None) + + SENSITIVE_HEADERS = {"authorization", "proxy-authorization"}