aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe
diff options
context:
space:
mode:
authorMarkus Volk <f_l_k@t-online.de>2024-03-05 12:56:12 +0100
committerKhem Raj <raj.khem@gmail.com>2024-03-05 11:02:04 -0800
commitdc8aa8672871c1cde1eff6004b634630fb33305e (patch)
tree0de7a60aae5185a89b587a162056280385e603a8 /meta-oe
parentf1a49372b3ab84bab57fe6b550ac8694bcbf7a50 (diff)
downloadmeta-openembedded-contrib-dc8aa8672871c1cde1eff6004b634630fb33305e.tar.gz
mozjs-115: update 115.6.0 -> 115.8.0
- python 3.12 support was added, remove the patch Signed-off-by: Markus Volk <f_l_k@t-online.de> Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta-oe')
-rw-r--r--meta-oe/recipes-extended/mozjs/mozjs-115/py3.12.patch2496
-rw-r--r--meta-oe/recipes-extended/mozjs/mozjs-115_115.8.0.bb (renamed from meta-oe/recipes-extended/mozjs/mozjs-115_115.6.0.bb)3
2 files changed, 1 insertions, 2498 deletions
diff --git a/meta-oe/recipes-extended/mozjs/mozjs-115/py3.12.patch b/meta-oe/recipes-extended/mozjs/mozjs-115/py3.12.patch
deleted file mode 100644
index 732c8ff1ce..0000000000
--- a/meta-oe/recipes-extended/mozjs/mozjs-115/py3.12.patch
+++ /dev/null
@@ -1,2496 +0,0 @@
-From 7293cfae4fd68004901825ad1cabb83424d8729a Mon Sep 17 00:00:00 2001
-From: serge-sans-paille <sguelton@mozilla.com>
-Date: Mon, 16 Oct 2023 13:35:24 +0000
-Subject: [PATCH] Bug 1857492 - Upgrade vendored version of six and urllib3
- r=saschanaz
-
-six -> 1.16
-urllib3 -> 1.26.17
-
-Differential Revision: https://phabricator.services.mozilla.com/D190288
-Upstream-Status: Backport [https://github.com/mozilla/gecko-dev/commit/7293cfae4fd68004901825ad1cabb83424d8729a]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- third_party/python/poetry.lock | 22 +--
- third_party/python/requirements.in | 4 +-
- third_party/python/requirements.txt | 12 +-
- .../python/six/six-1.13.0.dist-info/RECORD | 6 -
- .../LICENSE | 2 +-
- .../METADATA | 9 +-
- .../python/six/six-1.16.0.dist-info/RECORD | 6 +
- .../six-1.16.0.dist-info}/WHEEL | 2 +-
- .../top_level.txt | 0
- third_party/python/six/six.py | 91 ++++++---
- .../urllib3/urllib3-1.26.0.dist-info/RECORD | 44 -----
- .../LICENSE.txt | 0
- .../METADATA | 177 ++++++++++++++++--
- .../urllib3/urllib3-1.26.17.dist-info/RECORD | 44 +++++
- .../urllib3-1.26.17.dist-info}/WHEEL | 2 +-
- .../top_level.txt | 0
- .../python/urllib3/urllib3/__init__.py | 17 ++
- .../python/urllib3/urllib3/_version.py | 2 +-
- .../python/urllib3/urllib3/connection.py | 62 ++++--
- .../python/urllib3/urllib3/connectionpool.py | 97 ++++++++--
- .../contrib/_securetransport/bindings.py | 2 +-
- .../contrib/_securetransport/low_level.py | 1 +
- .../urllib3/urllib3/contrib/appengine.py | 4 +-
- .../urllib3/urllib3/contrib/ntlmpool.py | 13 +-
- .../urllib3/urllib3/contrib/pyopenssl.py | 19 +-
- .../urllib3/contrib/securetransport.py | 5 +-
- .../python/urllib3/urllib3/contrib/socks.py | 2 +-
- .../python/urllib3/urllib3/exceptions.py | 12 +-
- .../urllib3/urllib3/packages/__init__.py | 5 -
- .../packages/backports/weakref_finalize.py | 155 +++++++++++++++
- .../python/urllib3/urllib3/packages/six.py | 125 +++++++++----
- .../packages/ssl_match_hostname/__init__.py | 22 ---
- .../python/urllib3/urllib3/poolmanager.py | 3 +-
- third_party/python/urllib3/urllib3/request.py | 21 +++
- .../python/urllib3/urllib3/response.py | 72 ++++++-
- .../python/urllib3/urllib3/util/connection.py | 5 +-
- .../python/urllib3/urllib3/util/proxy.py | 1 +
- .../python/urllib3/urllib3/util/request.py | 5 +-
- .../python/urllib3/urllib3/util/retry.py | 37 +++-
- .../python/urllib3/urllib3/util/ssl_.py | 53 ++++--
- .../ssl_match_hostname.py} | 15 +-
- .../urllib3/urllib3/util/ssltransport.py | 6 +-
- .../python/urllib3/urllib3/util/timeout.py | 9 +-
- .../python/urllib3/urllib3/util/url.py | 17 +-
- .../python/urllib3/urllib3/util/wait.py | 1 -
- 45 files changed, 934 insertions(+), 275 deletions(-)
- delete mode 100644 third_party/python/six/six-1.13.0.dist-info/RECORD
- rename third_party/python/six/{six-1.13.0.dist-info => six-1.16.0.dist-info}/LICENSE (96%)
- rename third_party/python/six/{six-1.13.0.dist-info => six-1.16.0.dist-info}/METADATA (85%)
- create mode 100644 third_party/python/six/six-1.16.0.dist-info/RECORD
- rename third_party/python/{urllib3/urllib3-1.26.0.dist-info => six/six-1.16.0.dist-info}/WHEEL (70%)
- rename third_party/python/six/{six-1.13.0.dist-info => six-1.16.0.dist-info}/top_level.txt (100%)
- delete mode 100644 third_party/python/urllib3/urllib3-1.26.0.dist-info/RECORD
- rename third_party/python/urllib3/{urllib3-1.26.0.dist-info => urllib3-1.26.17.dist-info}/LICENSE.txt (100%)
- rename third_party/python/urllib3/{urllib3-1.26.0.dist-info => urllib3-1.26.17.dist-info}/METADATA (86%)
- create mode 100644 third_party/python/urllib3/urllib3-1.26.17.dist-info/RECORD
- rename third_party/python/{six/six-1.13.0.dist-info => urllib3/urllib3-1.26.17.dist-info}/WHEEL (70%)
- rename third_party/python/urllib3/{urllib3-1.26.0.dist-info => urllib3-1.26.17.dist-info}/top_level.txt (100%)
- create mode 100644 third_party/python/urllib3/urllib3/packages/backports/weakref_finalize.py
- delete mode 100644 third_party/python/urllib3/urllib3/packages/ssl_match_hostname/__init__.py
- rename third_party/python/urllib3/urllib3/{packages/ssl_match_hostname/_implementation.py => util/ssl_match_hostname.py} (92%)
-
-diff --git a/third_party/python/poetry.lock b/third_party/python/poetry.lock
-index 3d50174e58bcb..b4a8455d20fb4 100644
---- a/third_party/python/poetry.lock
-+++ b/third_party/python/poetry.lock
-@@ -1333,14 +1333,14 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (
-
- [[package]]
- name = "six"
--version = "1.13.0"
-+version = "1.16.0"
- description = "Python 2 and 3 compatibility utilities"
- category = "main"
- optional = false
--python-versions = ">=2.6, !=3.0.*, !=3.1.*"
-+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
- files = [
-- {file = "six-1.13.0-py2.py3-none-any.whl", hash = "sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd"},
-- {file = "six-1.13.0.tar.gz", hash = "sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"},
-+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
-+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
- ]
-
- [[package]]
-@@ -1491,19 +1491,19 @@ files = [
-
- [[package]]
- name = "urllib3"
--version = "1.26.0"
-+version = "1.26.17"
- description = "HTTP library with thread-safe connection pooling, file post, and more."
- category = "main"
- optional = false
--python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
-+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
- files = [
-- {file = "urllib3-1.26.0-py2.py3-none-any.whl", hash = "sha256:bad31cb622ceee0ab46c4c884cf61957def0ff2e644de0a7a093678844c9ccac"},
-- {file = "urllib3-1.26.0.tar.gz", hash = "sha256:4849f132941d68144df0a3785ccc4fe423430ba5db0108d045c8cadbc90f517a"},
-+ {file = "urllib3-1.26.17-py2.py3-none-any.whl", hash = "sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b"},
-+ {file = "urllib3-1.26.17.tar.gz", hash = "sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21"},
- ]
-
- [package.extras]
--brotli = ["brotlipy (>=0.6.0)"]
--secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"]
-+brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
-+secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
- socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
-
- [[package]]
-diff --git a/third_party/python/six/six-1.13.0.dist-info/RECORD b/third_party/python/six/six-1.13.0.dist-info/RECORD
-deleted file mode 100644
-index a0e6c1fd4bd99..0000000000000
---- a/third_party/python/six/six-1.13.0.dist-info/RECORD
-+++ /dev/null
-@@ -1,6 +0,0 @@
--six.py,sha256=bsEzSFTZTx49wQttLORmSZTrpjGc8UbXt-HBa_LZX7Q,33045
--six-1.13.0.dist-info/LICENSE,sha256=t1KbjAcXGniow2wyg5BVKOSBKUXZd9El65JujMvyRbY,1066
--six-1.13.0.dist-info/METADATA,sha256=hxS4rSPRfO8ewbcLS30anoFi6LFgUQ3mk_xknZ8RV4w,1940
--six-1.13.0.dist-info/WHEEL,sha256=8zNYZbwQSXoB9IfXOjPfeNwvAsALAjffgk27FqvCWbo,110
--six-1.13.0.dist-info/top_level.txt,sha256=_iVH_iYEtEXnD8nYGQYpYFUvkUW9sEO1GYbkeKSAais,4
--six-1.13.0.dist-info/RECORD,,
-diff --git a/third_party/python/six/six-1.13.0.dist-info/LICENSE b/third_party/python/six/six-1.16.0.dist-info/LICENSE
-similarity index 96%
-rename from third_party/python/six/six-1.13.0.dist-info/LICENSE
-rename to third_party/python/six/six-1.16.0.dist-info/LICENSE
-index 4b05a545261c0..de6633112c1f9 100644
---- a/third_party/python/six/six-1.13.0.dist-info/LICENSE
-+++ b/third_party/python/six/six-1.16.0.dist-info/LICENSE
-@@ -1,4 +1,4 @@
--Copyright (c) 2010-2019 Benjamin Peterson
-+Copyright (c) 2010-2020 Benjamin Peterson
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of
- this software and associated documentation files (the "Software"), to deal in
-diff --git a/third_party/python/six/six-1.13.0.dist-info/METADATA b/third_party/python/six/six-1.16.0.dist-info/METADATA
-similarity index 85%
-rename from third_party/python/six/six-1.13.0.dist-info/METADATA
-rename to third_party/python/six/six-1.16.0.dist-info/METADATA
-index b0c8f51e1f366..6d7525c2ebcfe 100644
---- a/third_party/python/six/six-1.13.0.dist-info/METADATA
-+++ b/third_party/python/six/six-1.16.0.dist-info/METADATA
-@@ -1,6 +1,6 @@
- Metadata-Version: 2.1
- Name: six
--Version: 1.13.0
-+Version: 1.16.0
- Summary: Python 2 and 3 compatibility utilities
- Home-page: https://github.com/benjaminp/six
- Author: Benjamin Peterson
-@@ -14,7 +14,7 @@ Classifier: Intended Audience :: Developers
- Classifier: License :: OSI Approved :: MIT License
- Classifier: Topic :: Software Development :: Libraries
- Classifier: Topic :: Utilities
--Requires-Python: >=2.6, !=3.0.*, !=3.1.*
-+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*
-
- .. image:: https://img.shields.io/pypi/v/six.svg
- :target: https://pypi.org/project/six/
-@@ -37,7 +37,7 @@ for smoothing over the differences between the Python versions with the goal of
- writing Python code that is compatible on both Python versions. See the
- documentation for more information on what is provided.
-
--Six supports every Python version since 2.6. It is contained in only one Python
-+Six supports Python 2.7 and 3.3+. It is contained in only one Python
- file, so it can be easily copied into your project. (The copyright and license
- notice must be retained.)
-
-@@ -46,7 +46,4 @@ Online documentation is at https://six.readthedocs.io/.
- Bugs can be reported to https://github.com/benjaminp/six. The code can also
- be found there.
-
--For questions about six or porting in general, email the python-porting mailing
--list: https://mail.python.org/mailman/listinfo/python-porting
--
-
-diff --git a/third_party/python/six/six-1.16.0.dist-info/RECORD b/third_party/python/six/six-1.16.0.dist-info/RECORD
-new file mode 100644
-index 0000000000000..8de4af79fae0b
---- /dev/null
-+++ b/third_party/python/six/six-1.16.0.dist-info/RECORD
-@@ -0,0 +1,6 @@
-+six.py,sha256=TOOfQi7nFGfMrIvtdr6wX4wyHH8M7aknmuLfo2cBBrM,34549
-+six-1.16.0.dist-info/LICENSE,sha256=i7hQxWWqOJ_cFvOkaWWtI9gq3_YPI5P8J2K2MYXo5sk,1066
-+six-1.16.0.dist-info/METADATA,sha256=VQcGIFCAEmfZcl77E5riPCN4v2TIsc_qtacnjxKHJoI,1795
-+six-1.16.0.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110
-+six-1.16.0.dist-info/top_level.txt,sha256=_iVH_iYEtEXnD8nYGQYpYFUvkUW9sEO1GYbkeKSAais,4
-+six-1.16.0.dist-info/RECORD,,
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/WHEEL b/third_party/python/six/six-1.16.0.dist-info/WHEEL
-similarity index 70%
-rename from third_party/python/urllib3/urllib3-1.26.0.dist-info/WHEEL
-rename to third_party/python/six/six-1.16.0.dist-info/WHEEL
-index 6d38aa0601b31..01b8fc7d4a10c 100644
---- a/third_party/python/urllib3/urllib3-1.26.0.dist-info/WHEEL
-+++ b/third_party/python/six/six-1.16.0.dist-info/WHEEL
-@@ -1,5 +1,5 @@
- Wheel-Version: 1.0
--Generator: bdist_wheel (0.35.1)
-+Generator: bdist_wheel (0.36.2)
- Root-Is-Purelib: true
- Tag: py2-none-any
- Tag: py3-none-any
-diff --git a/third_party/python/six/six-1.13.0.dist-info/top_level.txt b/third_party/python/six/six-1.16.0.dist-info/top_level.txt
-similarity index 100%
-rename from third_party/python/six/six-1.13.0.dist-info/top_level.txt
-rename to third_party/python/six/six-1.16.0.dist-info/top_level.txt
-diff --git a/third_party/python/six/six.py b/third_party/python/six/six.py
-index 357e624abc6c9..4e15675d8b5ca 100644
---- a/third_party/python/six/six.py
-+++ b/third_party/python/six/six.py
-@@ -1,4 +1,4 @@
--# Copyright (c) 2010-2019 Benjamin Peterson
-+# Copyright (c) 2010-2020 Benjamin Peterson
- #
- # Permission is hereby granted, free of charge, to any person obtaining a copy
- # of this software and associated documentation files (the "Software"), to deal
-@@ -29,7 +29,7 @@
- import types
-
- __author__ = "Benjamin Peterson <benjamin@python.org>"
--__version__ = "1.13.0"
-+__version__ = "1.16.0"
-
-
- # Useful for very coarse version differentiation.
-@@ -71,6 +71,11 @@ def __len__(self):
- MAXSIZE = int((1 << 63) - 1)
- del X
-
-+if PY34:
-+ from importlib.util import spec_from_loader
-+else:
-+ spec_from_loader = None
-+
-
- def _add_doc(func, doc):
- """Add documentation to a function."""
-@@ -186,6 +191,11 @@ def find_module(self, fullname, path=None):
- return self
- return None
-
-+ def find_spec(self, fullname, path, target=None):
-+ if fullname in self.known_modules:
-+ return spec_from_loader(fullname, self)
-+ return None
-+
- def __get_module(self, fullname):
- try:
- return self.known_modules[fullname]
-@@ -223,6 +233,12 @@ def get_code(self, fullname):
- return None
- get_source = get_code # same as get_code
-
-+ def create_module(self, spec):
-+ return self.load_module(spec.name)
-+
-+ def exec_module(self, module):
-+ pass
-+
- _importer = _SixMetaPathImporter(__name__)
-
-
-@@ -259,7 +275,7 @@ class _MovedItems(_LazyModule):
- MovedModule("copyreg", "copy_reg"),
- MovedModule("dbm_gnu", "gdbm", "dbm.gnu"),
- MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"),
-- MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"),
-+ MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread" if sys.version_info < (3, 9) else "_thread"),
- MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
- MovedModule("http_cookies", "Cookie", "http.cookies"),
- MovedModule("html_entities", "htmlentitydefs", "html.entities"),
-@@ -644,9 +660,11 @@ def u(s):
- if sys.version_info[1] <= 1:
- _assertRaisesRegex = "assertRaisesRegexp"
- _assertRegex = "assertRegexpMatches"
-+ _assertNotRegex = "assertNotRegexpMatches"
- else:
- _assertRaisesRegex = "assertRaisesRegex"
- _assertRegex = "assertRegex"
-+ _assertNotRegex = "assertNotRegex"
- else:
- def b(s):
- return s
-@@ -668,6 +686,7 @@ def indexbytes(buf, i):
- _assertCountEqual = "assertItemsEqual"
- _assertRaisesRegex = "assertRaisesRegexp"
- _assertRegex = "assertRegexpMatches"
-+ _assertNotRegex = "assertNotRegexpMatches"
- _add_doc(b, """Byte literal""")
- _add_doc(u, """Text literal""")
-
-@@ -684,6 +703,10 @@ def assertRegex(self, *args, **kwargs):
- return getattr(self, _assertRegex)(*args, **kwargs)
-
-
-+def assertNotRegex(self, *args, **kwargs):
-+ return getattr(self, _assertNotRegex)(*args, **kwargs)
-+
-+
- if PY3:
- exec_ = getattr(moves.builtins, "exec")
-
-@@ -719,16 +742,7 @@ def exec_(_code_, _globs_=None, _locs_=None):
- """)
-
-
--if sys.version_info[:2] == (3, 2):
-- exec_("""def raise_from(value, from_value):
-- try:
-- if from_value is None:
-- raise value
-- raise value from from_value
-- finally:
-- value = None
--""")
--elif sys.version_info[:2] > (3, 2):
-+if sys.version_info[:2] > (3,):
- exec_("""def raise_from(value, from_value):
- try:
- raise value from from_value
-@@ -808,13 +822,33 @@ def print_(*args, **kwargs):
- _add_doc(reraise, """Reraise an exception.""")
-
- if sys.version_info[0:2] < (3, 4):
-+ # This does exactly the same what the :func:`py3:functools.update_wrapper`
-+ # function does on Python versions after 3.2. It sets the ``__wrapped__``
-+ # attribute on ``wrapper`` object and it doesn't raise an error if any of
-+ # the attributes mentioned in ``assigned`` and ``updated`` are missing on
-+ # ``wrapped`` object.
-+ def _update_wrapper(wrapper, wrapped,
-+ assigned=functools.WRAPPER_ASSIGNMENTS,
-+ updated=functools.WRAPPER_UPDATES):
-+ for attr in assigned:
-+ try:
-+ value = getattr(wrapped, attr)
-+ except AttributeError:
-+ continue
-+ else:
-+ setattr(wrapper, attr, value)
-+ for attr in updated:
-+ getattr(wrapper, attr).update(getattr(wrapped, attr, {}))
-+ wrapper.__wrapped__ = wrapped
-+ return wrapper
-+ _update_wrapper.__doc__ = functools.update_wrapper.__doc__
-+
- def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS,
- updated=functools.WRAPPER_UPDATES):
-- def wrapper(f):
-- f = functools.wraps(wrapped, assigned, updated)(f)
-- f.__wrapped__ = wrapped
-- return f
-- return wrapper
-+ return functools.partial(_update_wrapper, wrapped=wrapped,
-+ assigned=assigned, updated=updated)
-+ wraps.__doc__ = functools.wraps.__doc__
-+
- else:
- wraps = functools.wraps
-
-@@ -872,12 +906,11 @@ def ensure_binary(s, encoding='utf-8', errors='strict'):
- - `str` -> encoded to `bytes`
- - `bytes` -> `bytes`
- """
-+ if isinstance(s, binary_type):
-+ return s
- if isinstance(s, text_type):
- return s.encode(encoding, errors)
-- elif isinstance(s, binary_type):
-- return s
-- else:
-- raise TypeError("not expecting type '%s'" % type(s))
-+ raise TypeError("not expecting type '%s'" % type(s))
-
-
- def ensure_str(s, encoding='utf-8', errors='strict'):
-@@ -891,12 +924,15 @@ def ensure_str(s, encoding='utf-8', errors='strict'):
- - `str` -> `str`
- - `bytes` -> decoded to `str`
- """
-- if not isinstance(s, (text_type, binary_type)):
-- raise TypeError("not expecting type '%s'" % type(s))
-+ # Optimization: Fast return for the common case.
-+ if type(s) is str:
-+ return s
- if PY2 and isinstance(s, text_type):
-- s = s.encode(encoding, errors)
-+ return s.encode(encoding, errors)
- elif PY3 and isinstance(s, binary_type):
-- s = s.decode(encoding, errors)
-+ return s.decode(encoding, errors)
-+ elif not isinstance(s, (text_type, binary_type)):
-+ raise TypeError("not expecting type '%s'" % type(s))
- return s
-
-
-@@ -919,10 +955,9 @@ def ensure_text(s, encoding='utf-8', errors='strict'):
- raise TypeError("not expecting type '%s'" % type(s))
-
-
--
- def python_2_unicode_compatible(klass):
- """
-- A decorator that defines __unicode__ and __str__ methods under Python 2.
-+ A class decorator that defines __unicode__ and __str__ methods under Python 2.
- Under Python 3 it does nothing.
-
- To support Python 2 and 3 with a single code base, define a __str__ method
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/RECORD b/third_party/python/urllib3/urllib3-1.26.0.dist-info/RECORD
-deleted file mode 100644
-index ec9088a111a41..0000000000000
---- a/third_party/python/urllib3/urllib3-1.26.0.dist-info/RECORD
-+++ /dev/null
-@@ -1,44 +0,0 @@
--urllib3/__init__.py,sha256=j3yzHIbmW7CS-IKQJ9-PPQf_YKO8EOAey_rMW0UR7us,2763
--urllib3/_collections.py,sha256=Rp1mVyBgc_UlAcp6M3at1skJBXR5J43NawRTvW2g_XY,10811
--urllib3/_version.py,sha256=H0vLQ8PY350EPZlZQa8ri0tEjVS-xhGdQOHcU360-0A,63
--urllib3/connection.py,sha256=BdaUSNpGzO0zq28i9MhOXb6QZspeVdVrYtjnkk2Eqg4,18396
--urllib3/connectionpool.py,sha256=IKoeuJZY9YAYm0GK4q-MXAhyXW0M_FnvabYaNsDIR-E,37133
--urllib3/exceptions.py,sha256=lNrKC5J8zeBXIu9SSKSNb7cLi8iXl9ARu9DHD2SflZM,7810
--urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579
--urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440
--urllib3/poolmanager.py,sha256=whzlX6UTEgODMOCy0ZDMUONRBCz5wyIM8Z9opXAY-Lk,19763
--urllib3/request.py,sha256=ZFSIqX0C6WizixecChZ3_okyu7BEv0lZu1VT0s6h4SM,5985
--urllib3/response.py,sha256=hGhGBh7TkEkh_IQg5C1W_xuPNrgIKv5BUXPyE-q0LuE,28203
--urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
--urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957
--urllib3/contrib/appengine.py,sha256=7Pxb0tKfDB_LTGPERiswH0qomhDoUUOo5kwybAKLQyE,11010
--urllib3/contrib/ntlmpool.py,sha256=6I95h1_71fzxmoMSNtY0gB8lnyCoVtP_DpqFGj14fdU,4160
--urllib3/contrib/pyopenssl.py,sha256=vgh6j52w9xgwq-3R2kfB5M2JblQATJfKAK3lIAc1kSg,16778
--urllib3/contrib/securetransport.py,sha256=KxGPZk8d4YepWm7Rc-SBt1XrzIfnLKc8JkUVV75XzgE,34286
--urllib3/contrib/socks.py,sha256=DcRjM2l0rQMIyhYrN6r-tnVkY6ZTDxHJlM8_usAkGCA,7097
--urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
--urllib3/contrib/_securetransport/bindings.py,sha256=E1_7ScsgOchfxneozbAueK7ziCwF35fna4DuDCYJ9_o,17637
--urllib3/contrib/_securetransport/low_level.py,sha256=lgIdsSycqfB0Xm5BiJzXGeIKT7ybCQMFPJAgkcwPa1s,13908
--urllib3/packages/__init__.py,sha256=h4BLhD4tLaBx1adaDtKXfupsgqY0wWLXb_f1_yVlV6A,108
--urllib3/packages/six.py,sha256=adx4z-eM_D0Vvu0IIqVzFACQ_ux9l64y7DkSEfbxCDs,32536
--urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
--urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417
--urllib3/packages/ssl_match_hostname/__init__.py,sha256=zppezdEQdpGsYerI6mV6MfUYy495JV4mcOWC_GgbljU,757
--urllib3/packages/ssl_match_hostname/_implementation.py,sha256=6dZ-q074g7XhsJ27MFCgkct8iVNZB3sMZvKhf-KUVy0,5679
--urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
--urllib3/util/connection.py,sha256=21B-LX0c8fkxPDssyHCaK0pCnmrKmhltg5EoouHiAPU,4910
--urllib3/util/proxy.py,sha256=FGipAEnvZteyldXNjce4DEB7YzwU-a5lep8y5S0qHQg,1604
--urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
--urllib3/util/request.py,sha256=NnzaEKQ1Pauw5MFMV6HmgEMHITf0Aua9fQuzi2uZzGc,4123
--urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
--urllib3/util/retry.py,sha256=tn168HDMUynFmXRP-uVaLRUOlbTEJikoB1RuZdwfCes,21366
--urllib3/util/ssl_.py,sha256=cUsmU604z2zAOZcaXDpINXOokQ1RtlJMe96TBDkaJp0,16199
--urllib3/util/ssltransport.py,sha256=IvGQvs9YWkf4jzfqVjTu_UWjwAUgPn5ActajW8VLz6A,6908
--urllib3/util/timeout.py,sha256=QSbBUNOB9yh6AnDn61SrLQ0hg5oz0I9-uXEG91AJuIg,10003
--urllib3/util/url.py,sha256=LWfLSlI4l2FmUMKfCkElCaW10-0N-sJDT9bxaDZJkjs,13964
--urllib3/util/wait.py,sha256=3MUKRSAUJDB2tgco7qRUskW0zXGAWYvRRE4Q1_6xlLs,5404
--urllib3-1.26.0.dist-info/LICENSE.txt,sha256=w3vxhuJ8-dvpYZ5V7f486nswCRzrPaY8fay-Dm13kHs,1115
--urllib3-1.26.0.dist-info/METADATA,sha256=Wghdt6nLf9HfZHhWj8Dpgz4n9vGRqXYhdIwJRPgki6M,42629
--urllib3-1.26.0.dist-info/WHEEL,sha256=ADKeyaGyKF5DwBNE0sRE5pvW-bSkFMJfBuhzZ3rceP4,110
--urllib3-1.26.0.dist-info/top_level.txt,sha256=EMiXL2sKrTcmrMxIHTqdc3ET54pQI2Y072LexFEemvo,8
--urllib3-1.26.0.dist-info/RECORD,,
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/LICENSE.txt b/third_party/python/urllib3/urllib3-1.26.17.dist-info/LICENSE.txt
-similarity index 100%
-rename from third_party/python/urllib3/urllib3-1.26.0.dist-info/LICENSE.txt
-rename to third_party/python/urllib3/urllib3-1.26.17.dist-info/LICENSE.txt
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/METADATA b/third_party/python/urllib3/urllib3-1.26.17.dist-info/METADATA
-similarity index 86%
-rename from third_party/python/urllib3/urllib3-1.26.0.dist-info/METADATA
-rename to third_party/python/urllib3/urllib3-1.26.17.dist-info/METADATA
-index 39869aafada8a..9493faee66c01 100644
---- a/third_party/python/urllib3/urllib3-1.26.0.dist-info/METADATA
-+++ b/third_party/python/urllib3/urllib3-1.26.17.dist-info/METADATA
-@@ -1,6 +1,6 @@
- Metadata-Version: 2.1
- Name: urllib3
--Version: 1.26.0
-+Version: 1.26.17
- Summary: HTTP library with thread-safe connection pooling, file post, and more.
- Home-page: https://urllib3.readthedocs.io/
- Author: Andrey Petrov
-@@ -10,7 +10,6 @@ Project-URL: Documentation, https://urllib3.readthedocs.io/
- Project-URL: Code, https://github.com/urllib3/urllib3
- Project-URL: Issue tracker, https://github.com/urllib3/urllib3/issues
- Keywords: urllib httplib threadsafe filepost http https ssl pooling
--Platform: UNKNOWN
- Classifier: Environment :: Web Environment
- Classifier: Intended Audience :: Developers
- Classifier: License :: OSI Approved :: MIT License
-@@ -19,27 +18,33 @@ Classifier: Programming Language :: Python
- Classifier: Programming Language :: Python :: 2
- Classifier: Programming Language :: Python :: 2.7
- Classifier: Programming Language :: Python :: 3
--Classifier: Programming Language :: Python :: 3.5
- Classifier: Programming Language :: Python :: 3.6
- Classifier: Programming Language :: Python :: 3.7
- Classifier: Programming Language :: Python :: 3.8
- Classifier: Programming Language :: Python :: 3.9
-+Classifier: Programming Language :: Python :: 3.10
-+Classifier: Programming Language :: Python :: 3.11
- Classifier: Programming Language :: Python :: Implementation :: CPython
- Classifier: Programming Language :: Python :: Implementation :: PyPy
- Classifier: Topic :: Internet :: WWW/HTTP
- Classifier: Topic :: Software Development :: Libraries
--Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4
-+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*
- Description-Content-Type: text/x-rst
-+License-File: LICENSE.txt
- Provides-Extra: brotli
--Requires-Dist: brotlipy (>=0.6.0) ; extra == 'brotli'
-+Requires-Dist: brotlicffi >=0.8.0 ; ((os_name != "nt" or python_version >= "3") and platform_python_implementation != "CPython") and extra == 'brotli'
-+Requires-Dist: brotli ==1.0.9 ; (os_name != "nt" and python_version < "3" and platform_python_implementation == "CPython") and extra == 'brotli'
-+Requires-Dist: brotlipy >=0.6.0 ; (os_name == "nt" and python_version < "3") and extra == 'brotli'
-+Requires-Dist: brotli >=1.0.9 ; (python_version >= "3" and platform_python_implementation == "CPython") and extra == 'brotli'
- Provides-Extra: secure
--Requires-Dist: pyOpenSSL (>=0.14) ; extra == 'secure'
--Requires-Dist: cryptography (>=1.3.4) ; extra == 'secure'
--Requires-Dist: idna (>=2.0.0) ; extra == 'secure'
-+Requires-Dist: pyOpenSSL >=0.14 ; extra == 'secure'
-+Requires-Dist: cryptography >=1.3.4 ; extra == 'secure'
-+Requires-Dist: idna >=2.0.0 ; extra == 'secure'
- Requires-Dist: certifi ; extra == 'secure'
-+Requires-Dist: urllib3-secure-extra ; extra == 'secure'
- Requires-Dist: ipaddress ; (python_version == "2.7") and extra == 'secure'
- Provides-Extra: socks
--Requires-Dist: PySocks (!=1.5.7,<2.0,>=1.5.6) ; extra == 'socks'
-+Requires-Dist: PySocks !=1.5.7,<2.0,>=1.5.6 ; extra == 'socks'
-
-
- urllib3 is a powerful, *user-friendly* HTTP client for Python. Much of the
-@@ -78,8 +83,10 @@ urllib3 can be installed with `pip <https://pip.pypa.io>`_::
-
- Alternatively, you can grab the latest source code from `GitHub <https://github.com/urllib3/urllib3>`_::
-
-- $ git clone git://github.com/urllib3/urllib3.git
-- $ python setup.py install
-+ $ git clone https://github.com/urllib3/urllib3.git
-+ $ cd urllib3
-+ $ git checkout 1.26.x
-+ $ pip install .
-
-
- Documentation
-@@ -148,6 +155,152 @@ For Enterprise
- Changes
- =======
-
-+1.26.17 (2023-10-02)
-+--------------------
-+
-+* Added the ``Cookie`` header to the list of headers to strip from requests when redirecting to a different host. As before, different headers can be set via ``Retry.remove_headers_on_redirect``.
-+
-+
-+1.26.16 (2023-05-23)
-+--------------------
-+
-+* Fixed thread-safety issue where accessing a ``PoolManager`` with many distinct origins
-+ would cause connection pools to be closed while requests are in progress (`#2954 <https://github.com/urllib3/urllib3/pull/2954>`_)
-+
-+
-+1.26.15 (2023-03-10)
-+--------------------
-+
-+* Fix socket timeout value when ``HTTPConnection`` is reused (`#2645 <https://github.com/urllib3/urllib3/issues/2645>`__)
-+* Remove "!" character from the unreserved characters in IPv6 Zone ID parsing
-+ (`#2899 <https://github.com/urllib3/urllib3/issues/2899>`__)
-+* Fix IDNA handling of '\x80' byte (`#2901 <https://github.com/urllib3/urllib3/issues/2901>`__)
-+
-+1.26.14 (2023-01-11)
-+--------------------
-+
-+* Fixed parsing of port 0 (zero) returning None, instead of 0. (`#2850 <https://github.com/urllib3/urllib3/issues/2850>`__)
-+* Removed deprecated getheaders() calls in contrib module.
-+
-+1.26.13 (2022-11-23)
-+--------------------
-+
-+* Deprecated the ``HTTPResponse.getheaders()`` and ``HTTPResponse.getheader()`` methods.
-+* Fixed an issue where parsing a URL with leading zeroes in the port would be rejected
-+ even when the port number after removing the zeroes was valid.
-+* Fixed a deprecation warning when using cryptography v39.0.0.
-+* Removed the ``<4`` in the ``Requires-Python`` packaging metadata field.
-+
-+
-+1.26.12 (2022-08-22)
-+--------------------
-+
-+* Deprecated the `urllib3[secure]` extra and the `urllib3.contrib.pyopenssl` module.
-+ Both will be removed in v2.x. See this `GitHub issue <https://github.com/urllib3/urllib3/issues/2680>`_
-+ for justification and info on how to migrate.
-+
-+
-+1.26.11 (2022-07-25)
-+--------------------
-+
-+* Fixed an issue where reading more than 2 GiB in a call to ``HTTPResponse.read`` would
-+ raise an ``OverflowError`` on Python 3.9 and earlier.
-+
-+
-+1.26.10 (2022-07-07)
-+--------------------
-+
-+* Removed support for Python 3.5
-+* Fixed an issue where a ``ProxyError`` recommending configuring the proxy as HTTP
-+ instead of HTTPS could appear even when an HTTPS proxy wasn't configured.
-+
-+
-+1.26.9 (2022-03-16)
-+-------------------
-+
-+* Changed ``urllib3[brotli]`` extra to favor installing Brotli libraries that are still
-+ receiving updates like ``brotli`` and ``brotlicffi`` instead of ``brotlipy``.
-+ This change does not impact behavior of urllib3, only which dependencies are installed.
-+* Fixed a socket leaking when ``HTTPSConnection.connect()`` raises an exception.
-+* Fixed ``server_hostname`` being forwarded from ``PoolManager`` to ``HTTPConnectionPool``
-+ when requesting an HTTP URL. Should only be forwarded when requesting an HTTPS URL.
-+
-+
-+1.26.8 (2022-01-07)
-+-------------------
-+
-+* Added extra message to ``urllib3.exceptions.ProxyError`` when urllib3 detects that
-+ a proxy is configured to use HTTPS but the proxy itself appears to only use HTTP.
-+* Added a mention of the size of the connection pool when discarding a connection due to the pool being full.
-+* Added explicit support for Python 3.11.
-+* Deprecated the ``Retry.MAX_BACKOFF`` class property in favor of ``Retry.DEFAULT_MAX_BACKOFF``
-+ to better match the rest of the default parameter names. ``Retry.MAX_BACKOFF`` is removed in v2.0.
-+* Changed location of the vendored ``ssl.match_hostname`` function from ``urllib3.packages.ssl_match_hostname``
-+ to ``urllib3.util.ssl_match_hostname`` to ensure Python 3.10+ compatibility after being repackaged
-+ by downstream distributors.
-+* Fixed absolute imports, all imports are now relative.
-+
-+
-+1.26.7 (2021-09-22)
-+-------------------
-+
-+* Fixed a bug with HTTPS hostname verification involving IP addresses and lack
-+ of SNI. (Issue #2400)
-+* Fixed a bug where IPv6 braces weren't stripped during certificate hostname
-+ matching. (Issue #2240)
-+
-+
-+1.26.6 (2021-06-25)
-+-------------------
-+
-+* Deprecated the ``urllib3.contrib.ntlmpool`` module. urllib3 is not able to support
-+ it properly due to `reasons listed in this issue <https://github.com/urllib3/urllib3/issues/2282>`_.
-+ If you are a user of this module please leave a comment.
-+* Changed ``HTTPConnection.request_chunked()`` to not erroneously emit multiple
-+ ``Transfer-Encoding`` headers in the case that one is already specified.
-+* Fixed typo in deprecation message to recommend ``Retry.DEFAULT_ALLOWED_METHODS``.
-+
-+
-+1.26.5 (2021-05-26)
-+-------------------
-+
-+* Fixed deprecation warnings emitted in Python 3.10.
-+* Updated vendored ``six`` library to 1.16.0.
-+* Improved performance of URL parser when splitting
-+ the authority component.
-+
-+
-+1.26.4 (2021-03-15)
-+-------------------
-+
-+* Changed behavior of the default ``SSLContext`` when connecting to HTTPS proxy
-+ during HTTPS requests. The default ``SSLContext`` now sets ``check_hostname=True``.
-+
-+
-+1.26.3 (2021-01-26)
-+-------------------
-+
-+* Fixed bytes and string comparison issue with headers (Pull #2141)
-+
-+* Changed ``ProxySchemeUnknown`` error message to be
-+ more actionable if the user supplies a proxy URL without
-+ a scheme. (Pull #2107)
-+
-+
-+1.26.2 (2020-11-12)
-+-------------------
-+
-+* Fixed an issue where ``wrap_socket`` and ``CERT_REQUIRED`` wouldn't
-+ be imported properly on Python 2.7.8 and earlier (Pull #2052)
-+
-+
-+1.26.1 (2020-11-11)
-+-------------------
-+
-+* Fixed an issue where two ``User-Agent`` headers would be sent if a
-+ ``User-Agent`` header key is passed as ``bytes`` (Pull #2047)
-+
-+
- 1.26.0 (2020-11-10)
- -------------------
-
-@@ -1331,5 +1484,3 @@ Changes
- ----------------
-
- * First release.
--
--
-diff --git a/third_party/python/urllib3/urllib3-1.26.17.dist-info/RECORD b/third_party/python/urllib3/urllib3-1.26.17.dist-info/RECORD
-new file mode 100644
-index 0000000000000..1afc6580589c0
---- /dev/null
-+++ b/third_party/python/urllib3/urllib3-1.26.17.dist-info/RECORD
-@@ -0,0 +1,44 @@
-+urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333
-+urllib3/_collections.py,sha256=Rp1mVyBgc_UlAcp6M3at1skJBXR5J43NawRTvW2g_XY,10811
-+urllib3/_version.py,sha256=azoM7M7BUADl2kBhMVR6PPf2GhBDI90me1fcnzTwdcw,64
-+urllib3/connection.py,sha256=92k9td_y4PEiTIjNufCUa1NzMB3J3w0LEdyokYgXnW8,20300
-+urllib3/connectionpool.py,sha256=ItVDasDnPRPP9R8bNxY7tPBlC724nJ9nlxVgXG_SLbI,39990
-+urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217
-+urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579
-+urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440
-+urllib3/poolmanager.py,sha256=0i8cJgrqupza67IBPZ_u9jXvnSxr5UBlVEiUqdkPtYI,19752
-+urllib3/request.py,sha256=YTWFNr7QIwh7E1W9dde9LM77v2VWTJ5V78XuTTw7D1A,6691
-+urllib3/response.py,sha256=UPgLmnHj4z71ZnH8ivYOyncATifTOw9FQukUqDnckCc,30761
-+urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-+urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957
-+urllib3/contrib/appengine.py,sha256=6IBW6lPOoVUxASPwtn6IH1AATe5DK3lLJCfwyWlLKAE,11012
-+urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528
-+urllib3/contrib/pyopenssl.py,sha256=4AJAlo9NmjWofY4dJwRa4kbZuRuHfNJxu8Pv6yQk1ss,17055
-+urllib3/contrib/securetransport.py,sha256=QOhVbWrFQTKbmV-vtyG69amekkKVxXkdjk9oymaO0Ag,34416
-+urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097
-+urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-+urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632
-+urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922
-+urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-+urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665
-+urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-+urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417
-+urllib3/packages/backports/weakref_finalize.py,sha256=tRCal5OAhNSRyb0DhHp-38AtIlCsRP8BxF3NX-6rqIA,5343
-+urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
-+urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901
-+urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605
-+urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
-+urllib3/util/request.py,sha256=fWiAaa8pwdLLIqoTLBxCC2e4ed80muzKU3e3HWWTzFQ,4225
-+urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
-+urllib3/util/retry.py,sha256=Z6WEf518eTOXP5jr5QSQ9gqJI0DVYt3Xs3EKnYaTmus,22013
-+urllib3/util/ssl_.py,sha256=c0sYiSC6272r6uPkxQpo5rYPP9QC1eR6oI7004gYqZo,17165
-+urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758
-+urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895
-+urllib3/util/timeout.py,sha256=cwq4dMk87mJHSBktK1miYJ-85G-3T3RmT20v7SFCpno,10168
-+urllib3/util/url.py,sha256=kMxL1k0d-aQm_iZDw_zMmnyYyjrIA_DbsMy3cm3V55M,14279
-+urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403
-+urllib3-1.26.17.dist-info/LICENSE.txt,sha256=w3vxhuJ8-dvpYZ5V7f486nswCRzrPaY8fay-Dm13kHs,1115
-+urllib3-1.26.17.dist-info/METADATA,sha256=swEiQKmb2m5Vl4fygmy4aLSzZjxDjD8q2-_XzuhO9pA,48743
-+urllib3-1.26.17.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
-+urllib3-1.26.17.dist-info/top_level.txt,sha256=EMiXL2sKrTcmrMxIHTqdc3ET54pQI2Y072LexFEemvo,8
-+urllib3-1.26.17.dist-info/RECORD,,
-diff --git a/third_party/python/six/six-1.13.0.dist-info/WHEEL b/third_party/python/urllib3/urllib3-1.26.17.dist-info/WHEEL
-similarity index 70%
-rename from third_party/python/six/six-1.13.0.dist-info/WHEEL
-rename to third_party/python/urllib3/urllib3-1.26.17.dist-info/WHEEL
-index 8b701e93c2315..c34f1162ef9a5 100644
---- a/third_party/python/six/six-1.13.0.dist-info/WHEEL
-+++ b/third_party/python/urllib3/urllib3-1.26.17.dist-info/WHEEL
-@@ -1,5 +1,5 @@
- Wheel-Version: 1.0
--Generator: bdist_wheel (0.33.6)
-+Generator: bdist_wheel (0.41.2)
- Root-Is-Purelib: true
- Tag: py2-none-any
- Tag: py3-none-any
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/top_level.txt b/third_party/python/urllib3/urllib3-1.26.17.dist-info/top_level.txt
-similarity index 100%
-rename from third_party/python/urllib3/urllib3-1.26.0.dist-info/top_level.txt
-rename to third_party/python/urllib3/urllib3-1.26.17.dist-info/top_level.txt
-diff --git a/third_party/python/urllib3/urllib3/__init__.py b/third_party/python/urllib3/urllib3/__init__.py
-index fe86b59d782bd..c6fa38212fb55 100644
---- a/third_party/python/urllib3/urllib3/__init__.py
-+++ b/third_party/python/urllib3/urllib3/__init__.py
-@@ -19,6 +19,23 @@
- from .util.timeout import Timeout
- from .util.url import get_host
-
-+# === NOTE TO REPACKAGERS AND VENDORS ===
-+# Please delete this block, this logic is only
-+# for urllib3 being distributed via PyPI.
-+# See: https://github.com/urllib3/urllib3/issues/2680
-+try:
-+ import urllib3_secure_extra # type: ignore # noqa: F401
-+except ImportError:
-+ pass
-+else:
-+ warnings.warn(
-+ "'urllib3[secure]' extra is deprecated and will be removed "
-+ "in a future release of urllib3 2.x. Read more in this issue: "
-+ "https://github.com/urllib3/urllib3/issues/2680",
-+ category=DeprecationWarning,
-+ stacklevel=2,
-+ )
-+
- __author__ = "Andrey Petrov (andrey.petrov@shazow.net)"
- __license__ = "MIT"
- __version__ = __version__
-diff --git a/third_party/python/urllib3/urllib3/_version.py b/third_party/python/urllib3/urllib3/_version.py
-index cee465f88a931..cad75fb5df82a 100644
---- a/third_party/python/urllib3/urllib3/_version.py
-+++ b/third_party/python/urllib3/urllib3/_version.py
-@@ -1,2 +1,2 @@
- # This file is protected via CODEOWNERS
--__version__ = "1.26.0"
-+__version__ = "1.26.17"
-diff --git a/third_party/python/urllib3/urllib3/connection.py b/third_party/python/urllib3/urllib3/connection.py
-index 52487417c946b..54b96b19154cc 100644
---- a/third_party/python/urllib3/urllib3/connection.py
-+++ b/third_party/python/urllib3/urllib3/connection.py
-@@ -43,6 +43,7 @@ class BrokenPipeError(Exception):
- pass
-
-
-+from ._collections import HTTPHeaderDict # noqa (historical, removed in v2)
- from ._version import __version__
- from .exceptions import (
- ConnectTimeoutError,
-@@ -50,15 +51,16 @@ class BrokenPipeError(Exception):
- SubjectAltNameWarning,
- SystemTimeWarning,
- )
--from .packages.ssl_match_hostname import CertificateError, match_hostname
- from .util import SKIP_HEADER, SKIPPABLE_HEADERS, connection
- from .util.ssl_ import (
- assert_fingerprint,
- create_urllib3_context,
-+ is_ipaddress,
- resolve_cert_reqs,
- resolve_ssl_version,
- ssl_wrap_socket,
- )
-+from .util.ssl_match_hostname import CertificateError, match_hostname
-
- log = logging.getLogger(__name__)
-
-@@ -66,7 +68,7 @@ class BrokenPipeError(Exception):
-
- # When it comes time to update this value as a part of regular maintenance
- # (ie test_recent_date is failing) update it to ~6 months before the current date.
--RECENT_DATE = datetime.date(2019, 1, 1)
-+RECENT_DATE = datetime.date(2022, 1, 1)
-
- _CONTAINS_CONTROL_CHAR_RE = re.compile(r"[^-!#$%&'*+.^_`|~0-9a-zA-Z]")
-
-@@ -106,6 +108,10 @@ class HTTPConnection(_HTTPConnection, object):
- #: Whether this connection verifies the host's certificate.
- is_verified = False
-
-+ #: Whether this proxy connection (if used) verifies the proxy host's
-+ #: certificate.
-+ proxy_is_verified = None
-+
- def __init__(self, *args, **kw):
- if not six.PY2:
- kw.pop("strict", None)
-@@ -200,7 +206,7 @@ def connect(self):
- self._prepare_conn(conn)
-
- def putrequest(self, method, url, *args, **kwargs):
-- """"""
-+ """ """
- # Empty docstring because the indentation of CPython's implementation
- # is broken but we don't want this method in our documentation.
- match = _CONTAINS_CONTROL_CHAR_RE.search(method)
-@@ -213,8 +219,8 @@ def putrequest(self, method, url, *args, **kwargs):
- return _HTTPConnection.putrequest(self, method, url, *args, **kwargs)
-
- def putheader(self, header, *values):
-- """"""
-- if SKIP_HEADER not in values:
-+ """ """
-+ if not any(isinstance(v, str) and v == SKIP_HEADER for v in values):
- _HTTPConnection.putheader(self, header, *values)
- elif six.ensure_str(header.lower()) not in SKIPPABLE_HEADERS:
- raise ValueError(
-@@ -223,12 +229,17 @@ def putheader(self, header, *values):
- )
-
- def request(self, method, url, body=None, headers=None):
-+ # Update the inner socket's timeout value to send the request.
-+ # This only triggers if the connection is re-used.
-+ if getattr(self, "sock", None) is not None:
-+ self.sock.settimeout(self.timeout)
-+
- if headers is None:
- headers = {}
- else:
- # Avoid modifying the headers passed into .request()
- headers = headers.copy()
-- if "user-agent" not in (k.lower() for k in headers):
-+ if "user-agent" not in (six.ensure_str(k.lower()) for k in headers):
- headers["User-Agent"] = _get_default_user_agent()
- super(HTTPConnection, self).request(method, url, body=body, headers=headers)
-
-@@ -248,7 +259,7 @@ def request_chunked(self, method, url, body=None, headers=None):
- self.putheader("User-Agent", _get_default_user_agent())
- for header, value in headers.items():
- self.putheader(header, value)
-- if "transfer-encoding" not in headers:
-+ if "transfer-encoding" not in header_keys:
- self.putheader("Transfer-Encoding", "chunked")
- self.endheaders()
-
-@@ -349,17 +360,15 @@ def set_cert(
-
- def connect(self):
- # Add certificate verification
-- conn = self._new_conn()
-+ self.sock = conn = self._new_conn()
- hostname = self.host
- tls_in_tls = False
-
- if self._is_using_tunnel():
- if self.tls_in_tls_required:
-- conn = self._connect_tls_proxy(hostname, conn)
-+ self.sock = conn = self._connect_tls_proxy(hostname, conn)
- tls_in_tls = True
-
-- self.sock = conn
--
- # Calls self._set_hostport(), so self.host is
- # self._tunnel_host below.
- self._tunnel()
-@@ -492,7 +501,7 @@ def _connect_tls_proxy(self, hostname, conn):
-
- # If no cert was provided, use only the default options for server
- # certificate validation
-- return ssl_wrap_socket(
-+ socket = ssl_wrap_socket(
- sock=conn,
- ca_certs=self.ca_certs,
- ca_cert_dir=self.ca_cert_dir,
-@@ -501,8 +510,37 @@ def _connect_tls_proxy(self, hostname, conn):
- ssl_context=ssl_context,
- )
-
-+ if ssl_context.verify_mode != ssl.CERT_NONE and not getattr(
-+ ssl_context, "check_hostname", False
-+ ):
-+ # While urllib3 attempts to always turn off hostname matching from
-+ # the TLS library, this cannot always be done. So we check whether
-+ # the TLS Library still thinks it's matching hostnames.
-+ cert = socket.getpeercert()
-+ if not cert.get("subjectAltName", ()):
-+ warnings.warn(
-+ (
-+ "Certificate for {0} has no `subjectAltName`, falling back to check for a "
-+ "`commonName` for now. This feature is being removed by major browsers and "
-+ "deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 "
-+ "for details.)".format(hostname)
-+ ),
-+ SubjectAltNameWarning,
-+ )
-+ _match_hostname(cert, hostname)
-+
-+ self.proxy_is_verified = ssl_context.verify_mode == ssl.CERT_REQUIRED
-+ return socket
-+
-
- def _match_hostname(cert, asserted_hostname):
-+ # Our upstream implementation of ssl.match_hostname()
-+ # only applies this normalization to IP addresses so it doesn't
-+ # match DNS SANs so we do the same thing!
-+ stripped_hostname = asserted_hostname.strip("u[]")
-+ if is_ipaddress(stripped_hostname):
-+ asserted_hostname = stripped_hostname
-+
- try:
- match_hostname(cert, asserted_hostname)
- except CertificateError as e:
-diff --git a/third_party/python/urllib3/urllib3/connectionpool.py b/third_party/python/urllib3/urllib3/connectionpool.py
-index 4708c5bfc7862..96844d933745d 100644
---- a/third_party/python/urllib3/urllib3/connectionpool.py
-+++ b/third_party/python/urllib3/urllib3/connectionpool.py
-@@ -2,6 +2,7 @@
-
- import errno
- import logging
-+import re
- import socket
- import sys
- import warnings
-@@ -35,7 +36,6 @@
- )
- from .packages import six
- from .packages.six.moves import queue
--from .packages.ssl_match_hostname import CertificateError
- from .request import RequestMethods
- from .response import HTTPResponse
- from .util.connection import is_connection_dropped
-@@ -44,11 +44,19 @@
- from .util.request import set_file_position
- from .util.response import assert_header_parsing
- from .util.retry import Retry
-+from .util.ssl_match_hostname import CertificateError
- from .util.timeout import Timeout
- from .util.url import Url, _encode_target
- from .util.url import _normalize_host as normalize_host
- from .util.url import get_host, parse_url
-
-+try: # Platform-specific: Python 3
-+ import weakref
-+
-+ weakref_finalize = weakref.finalize
-+except AttributeError: # Platform-specific: Python 2
-+ from .packages.backports.weakref_finalize import weakref_finalize
-+
- xrange = six.moves.xrange
-
- log = logging.getLogger(__name__)
-@@ -219,6 +227,16 @@ def __init__(
- self.conn_kw["proxy"] = self.proxy
- self.conn_kw["proxy_config"] = self.proxy_config
-
-+ # Do not pass 'self' as callback to 'finalize'.
-+ # Then the 'finalize' would keep an endless living (leak) to self.
-+ # By just passing a reference to the pool allows the garbage collector
-+ # to free self if nobody else has a reference to it.
-+ pool = self.pool
-+
-+ # Close all the HTTPConnections in the pool before the
-+ # HTTPConnectionPool object is garbage collected.
-+ weakref_finalize(self, _close_pool_connections, pool)
-+
- def _new_conn(self):
- """
- Return a fresh :class:`HTTPConnection`.
-@@ -301,8 +319,11 @@ def _put_conn(self, conn):
- pass
- except queue.Full:
- # This should never happen if self.block == True
-- log.warning("Connection pool is full, discarding connection: %s", self.host)
--
-+ log.warning(
-+ "Connection pool is full, discarding connection: %s. Connection pool size: %s",
-+ self.host,
-+ self.pool.qsize(),
-+ )
- # Connection never got put back into the pool, close it.
- if conn:
- conn.close()
-@@ -318,7 +339,7 @@ def _prepare_proxy(self, conn):
- pass
-
- def _get_timeout(self, timeout):
-- """ Helper that always returns a :class:`urllib3.util.Timeout` """
-+ """Helper that always returns a :class:`urllib3.util.Timeout`"""
- if timeout is _Default:
- return self.timeout.clone()
-
-@@ -375,7 +396,7 @@ def _make_request(
-
- timeout_obj = self._get_timeout(timeout)
- timeout_obj.start_connect()
-- conn.timeout = timeout_obj.connect_timeout
-+ conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout)
-
- # Trigger any extra validation we need to do.
- try:
-@@ -485,14 +506,8 @@ def close(self):
- # Disable access to the pool
- old_pool, self.pool = self.pool, None
-
-- try:
-- while True:
-- conn = old_pool.get(block=False)
-- if conn:
-- conn.close()
--
-- except queue.Empty:
-- pass # Done.
-+ # Close all the HTTPConnections in the pool.
-+ _close_pool_connections(old_pool)
-
- def is_same_host(self, url):
- """
-@@ -745,7 +760,35 @@ def urlopen(
- # Discard the connection for these exceptions. It will be
- # replaced during the next _get_conn() call.
- clean_exit = False
-- if isinstance(e, (BaseSSLError, CertificateError)):
-+
-+ def _is_ssl_error_message_from_http_proxy(ssl_error):
-+ # We're trying to detect the message 'WRONG_VERSION_NUMBER' but
-+ # SSLErrors are kinda all over the place when it comes to the message,
-+ # so we try to cover our bases here!
-+ message = " ".join(re.split("[^a-z]", str(ssl_error).lower()))
-+ return (
-+ "wrong version number" in message or "unknown protocol" in message
-+ )
-+
-+ # Try to detect a common user error with proxies which is to
-+ # set an HTTP proxy to be HTTPS when it should be 'http://'
-+ # (ie {'http': 'http://proxy', 'https': 'https://proxy'})
-+ # Instead we add a nice error message and point to a URL.
-+ if (
-+ isinstance(e, BaseSSLError)
-+ and self.proxy
-+ and _is_ssl_error_message_from_http_proxy(e)
-+ and conn.proxy
-+ and conn.proxy.scheme == "https"
-+ ):
-+ e = ProxyError(
-+ "Your proxy appears to only use HTTP and not HTTPS, "
-+ "try changing your proxy URL to be HTTP. See: "
-+ "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
-+ "#https-proxy-error-http-proxy",
-+ SSLError(e),
-+ )
-+ elif isinstance(e, (BaseSSLError, CertificateError)):
- e = SSLError(e)
- elif isinstance(e, (SocketError, NewConnectionError)) and self.proxy:
- e = ProxyError("Cannot connect to proxy.", e)
-@@ -830,7 +873,7 @@ def urlopen(
- )
-
- # Check if we should retry the HTTP response.
-- has_retry_after = bool(response.getheader("Retry-After"))
-+ has_retry_after = bool(response.headers.get("Retry-After"))
- if retries.is_retry(method, response.status, has_retry_after):
- try:
- retries = retries.increment(method, url, response=response, _pool=self)
-@@ -1014,12 +1057,23 @@ def _validate_conn(self, conn):
- (
- "Unverified HTTPS request is being made to host '%s'. "
- "Adding certificate verification is strongly advised. See: "
-- "https://urllib3.readthedocs.io/en/latest/advanced-usage.html"
-+ "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
- "#ssl-warnings" % conn.host
- ),
- InsecureRequestWarning,
- )
-
-+ if getattr(conn, "proxy_is_verified", None) is False:
-+ warnings.warn(
-+ (
-+ "Unverified HTTPS connection done to an HTTPS proxy. "
-+ "Adding certificate verification is strongly advised. See: "
-+ "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
-+ "#ssl-warnings"
-+ ),
-+ InsecureRequestWarning,
-+ )
-+
-
- def connection_from_url(url, **kw):
- """
-@@ -1065,3 +1119,14 @@ def _normalize_host(host, scheme):
- if host.startswith("[") and host.endswith("]"):
- host = host[1:-1]
- return host
-+
-+
-+def _close_pool_connections(pool):
-+ """Drains a queue of connections and closes each one."""
-+ try:
-+ while True:
-+ conn = pool.get(block=False)
-+ if conn:
-+ conn.close()
-+ except queue.Empty:
-+ pass # Done.
-diff --git a/third_party/python/urllib3/urllib3/contrib/_securetransport/bindings.py b/third_party/python/urllib3/urllib3/contrib/_securetransport/bindings.py
-index 11524d400bab2..264d564dbda67 100644
---- a/third_party/python/urllib3/urllib3/contrib/_securetransport/bindings.py
-+++ b/third_party/python/urllib3/urllib3/contrib/_securetransport/bindings.py
-@@ -48,7 +48,7 @@
- )
- from ctypes.util import find_library
-
--from urllib3.packages.six import raise_from
-+from ...packages.six import raise_from
-
- if platform.system() != "Darwin":
- raise ImportError("Only macOS is supported")
-diff --git a/third_party/python/urllib3/urllib3/contrib/_securetransport/low_level.py b/third_party/python/urllib3/urllib3/contrib/_securetransport/low_level.py
-index ed8120190c06f..fa0b245d279e9 100644
---- a/third_party/python/urllib3/urllib3/contrib/_securetransport/low_level.py
-+++ b/third_party/python/urllib3/urllib3/contrib/_securetransport/low_level.py
-@@ -188,6 +188,7 @@ def _cert_array_from_pem(pem_bundle):
- # We only want to do that if an error occurs: otherwise, the caller
- # should free.
- CoreFoundation.CFRelease(cert_array)
-+ raise
-
- return cert_array
-
-diff --git a/third_party/python/urllib3/urllib3/contrib/appengine.py b/third_party/python/urllib3/urllib3/contrib/appengine.py
-index aa64a0914c601..a5a6d91035f0a 100644
---- a/third_party/python/urllib3/urllib3/contrib/appengine.py
-+++ b/third_party/python/urllib3/urllib3/contrib/appengine.py
-@@ -111,7 +111,7 @@ def __init__(
- warnings.warn(
- "urllib3 is using URLFetch on Google App Engine sandbox instead "
- "of sockets. To use sockets directly instead of URLFetch see "
-- "https://urllib3.readthedocs.io/en/latest/reference/urllib3.contrib.html.",
-+ "https://urllib3.readthedocs.io/en/1.26.x/reference/urllib3.contrib.html.",
- AppEnginePlatformWarning,
- )
-
-@@ -224,7 +224,7 @@ def urlopen(
- )
-
- # Check if we should retry the HTTP response.
-- has_retry_after = bool(http_response.getheader("Retry-After"))
-+ has_retry_after = bool(http_response.headers.get("Retry-After"))
- if retries.is_retry(method, http_response.status, has_retry_after):
- retries = retries.increment(method, url, response=http_response, _pool=self)
- log.debug("Retry: %s", url)
-diff --git a/third_party/python/urllib3/urllib3/contrib/ntlmpool.py b/third_party/python/urllib3/urllib3/contrib/ntlmpool.py
-index b2df45dcf6065..471665754e9f1 100644
---- a/third_party/python/urllib3/urllib3/contrib/ntlmpool.py
-+++ b/third_party/python/urllib3/urllib3/contrib/ntlmpool.py
-@@ -5,6 +5,7 @@
- """
- from __future__ import absolute_import
-
-+import warnings
- from logging import getLogger
-
- from ntlm import ntlm
-@@ -12,6 +13,14 @@
- from .. import HTTPSConnectionPool
- from ..packages.six.moves.http_client import HTTPSConnection
-
-+warnings.warn(
-+ "The 'urllib3.contrib.ntlmpool' module is deprecated and will be removed "
-+ "in urllib3 v2.0 release, urllib3 is not able to support it properly due "
-+ "to reasons listed in issue: https://github.com/urllib3/urllib3/issues/2282. "
-+ "If you are a user of this module please comment in the mentioned issue.",
-+ DeprecationWarning,
-+)
-+
- log = getLogger(__name__)
-
-
-@@ -60,7 +69,7 @@ def _new_conn(self):
- log.debug("Request headers: %s", headers)
- conn.request("GET", self.authurl, None, headers)
- res = conn.getresponse()
-- reshdr = dict(res.getheaders())
-+ reshdr = dict(res.headers)
- log.debug("Response status: %s %s", res.status, res.reason)
- log.debug("Response headers: %s", reshdr)
- log.debug("Response data: %s [...]", res.read(100))
-@@ -92,7 +101,7 @@ def _new_conn(self):
- conn.request("GET", self.authurl, None, headers)
- res = conn.getresponse()
- log.debug("Response status: %s %s", res.status, res.reason)
-- log.debug("Response headers: %s", dict(res.getheaders()))
-+ log.debug("Response headers: %s", dict(res.headers))
- log.debug("Response data: %s [...]", res.read()[:100])
- if res.status != 200:
- if res.status == 401:
-diff --git a/third_party/python/urllib3/urllib3/contrib/pyopenssl.py b/third_party/python/urllib3/urllib3/contrib/pyopenssl.py
-index 0cabab1aed14a..1ed214b1d78fc 100644
---- a/third_party/python/urllib3/urllib3/contrib/pyopenssl.py
-+++ b/third_party/python/urllib3/urllib3/contrib/pyopenssl.py
-@@ -47,10 +47,10 @@
- """
- from __future__ import absolute_import
-
-+import OpenSSL.crypto
- import OpenSSL.SSL
- from cryptography import x509
- from cryptography.hazmat.backends.openssl import backend as openssl_backend
--from cryptography.hazmat.backends.openssl.x509 import _Certificate
-
- try:
- from cryptography.x509 import UnsupportedExtension
-@@ -73,9 +73,19 @@ class UnsupportedExtension(Exception):
- import logging
- import ssl
- import sys
-+import warnings
-
- from .. import util
- from ..packages import six
-+from ..util.ssl_ import PROTOCOL_TLS_CLIENT
-+
-+warnings.warn(
-+ "'urllib3.contrib.pyopenssl' module is deprecated and will be removed "
-+ "in a future release of urllib3 2.x. Read more in this issue: "
-+ "https://github.com/urllib3/urllib3/issues/2680",
-+ category=DeprecationWarning,
-+ stacklevel=2,
-+)
-
- __all__ = ["inject_into_urllib3", "extract_from_urllib3"]
-
-@@ -85,6 +95,7 @@ class UnsupportedExtension(Exception):
- # Map from urllib3 to PyOpenSSL compatible parameter-values.
- _openssl_versions = {
- util.PROTOCOL_TLS: OpenSSL.SSL.SSLv23_METHOD,
-+ PROTOCOL_TLS_CLIENT: OpenSSL.SSL.SSLv23_METHOD,
- ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD,
- }
-
-@@ -217,9 +228,8 @@ def get_subj_alt_name(peer_cert):
- if hasattr(peer_cert, "to_cryptography"):
- cert = peer_cert.to_cryptography()
- else:
-- # This is technically using private APIs, but should work across all
-- # relevant versions before PyOpenSSL got a proper API for this.
-- cert = _Certificate(openssl_backend, peer_cert._x509)
-+ der = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, peer_cert)
-+ cert = x509.load_der_x509_certificate(der, openssl_backend)
-
- # We want to find the SAN extension. Ask Cryptography to locate it (it's
- # faster than looping in Python)
-@@ -404,7 +414,6 @@ def makefile(self, mode, bufsize=-1):
- self._makefile_refs += 1
- return _fileobject(self, mode, bufsize, close=True)
-
--
- else: # Platform-specific: Python 3
- makefile = backport_makefile
-
-diff --git a/third_party/python/urllib3/urllib3/contrib/securetransport.py b/third_party/python/urllib3/urllib3/contrib/securetransport.py
-index ab092de67a57c..6c46a3b9f0375 100644
---- a/third_party/python/urllib3/urllib3/contrib/securetransport.py
-+++ b/third_party/python/urllib3/urllib3/contrib/securetransport.py
-@@ -67,6 +67,7 @@
- import six
-
- from .. import util
-+from ..util.ssl_ import PROTOCOL_TLS_CLIENT
- from ._securetransport.bindings import CoreFoundation, Security, SecurityConst
- from ._securetransport.low_level import (
- _assert_no_error,
-@@ -154,7 +155,8 @@
- # TLSv1 and a high of TLSv1.2. For everything else, we pin to that version.
- # TLSv1 to 1.2 are supported on macOS 10.8+
- _protocol_to_min_max = {
-- util.PROTOCOL_TLS: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12)
-+ util.PROTOCOL_TLS: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12),
-+ PROTOCOL_TLS_CLIENT: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12),
- }
-
- if hasattr(ssl, "PROTOCOL_SSLv2"):
-@@ -768,7 +770,6 @@ def makefile(self, mode, bufsize=-1):
- self._makefile_refs += 1
- return _fileobject(self, mode, bufsize, close=True)
-
--
- else: # Platform-specific: Python 3
-
- def makefile(self, mode="r", buffering=None, *args, **kwargs):
-diff --git a/third_party/python/urllib3/urllib3/contrib/socks.py b/third_party/python/urllib3/urllib3/contrib/socks.py
-index 93df8325d59c4..c326e80dd1174 100644
---- a/third_party/python/urllib3/urllib3/contrib/socks.py
-+++ b/third_party/python/urllib3/urllib3/contrib/socks.py
-@@ -51,7 +51,7 @@
- (
- "SOCKS support in urllib3 requires the installation of optional "
- "dependencies: specifically, PySocks. For more information, see "
-- "https://urllib3.readthedocs.io/en/latest/contrib.html#socks-proxies"
-+ "https://urllib3.readthedocs.io/en/1.26.x/contrib.html#socks-proxies"
- ),
- DependencyWarning,
- )
-diff --git a/third_party/python/urllib3/urllib3/exceptions.py b/third_party/python/urllib3/urllib3/exceptions.py
-index d69958d5dfc29..cba6f3f560f71 100644
---- a/third_party/python/urllib3/urllib3/exceptions.py
-+++ b/third_party/python/urllib3/urllib3/exceptions.py
-@@ -289,7 +289,17 @@ class ProxySchemeUnknown(AssertionError, URLSchemeUnknown):
- # TODO(t-8ch): Stop inheriting from AssertionError in v2.0.
-
- def __init__(self, scheme):
-- message = "Not supported proxy scheme %s" % scheme
-+ # 'localhost' is here because our URL parser parses
-+ # localhost:8080 -> scheme=localhost, remove if we fix this.
-+ if scheme == "localhost":
-+ scheme = None
-+ if scheme is None:
-+ message = "Proxy URL had no scheme, should start with http:// or https://"
-+ else:
-+ message = (
-+ "Proxy URL had unsupported scheme %s, should use http:// or https://"
-+ % scheme
-+ )
- super(ProxySchemeUnknown, self).__init__(message)
-
-
-diff --git a/third_party/python/urllib3/urllib3/packages/__init__.py b/third_party/python/urllib3/urllib3/packages/__init__.py
-index fce4caa65d2ee..e69de29bb2d1d 100644
---- a/third_party/python/urllib3/urllib3/packages/__init__.py
-+++ b/third_party/python/urllib3/urllib3/packages/__init__.py
-@@ -1,5 +0,0 @@
--from __future__ import absolute_import
--
--from . import ssl_match_hostname
--
--__all__ = ("ssl_match_hostname",)
-diff --git a/third_party/python/urllib3/urllib3/packages/backports/weakref_finalize.py b/third_party/python/urllib3/urllib3/packages/backports/weakref_finalize.py
-new file mode 100644
-index 0000000000000..a2f2966e54966
---- /dev/null
-+++ b/third_party/python/urllib3/urllib3/packages/backports/weakref_finalize.py
-@@ -0,0 +1,155 @@
-+# -*- coding: utf-8 -*-
-+"""
-+backports.weakref_finalize
-+~~~~~~~~~~~~~~~~~~
-+
-+Backports the Python 3 ``weakref.finalize`` method.
-+"""
-+from __future__ import absolute_import
-+
-+import itertools
-+import sys
-+from weakref import ref
-+
-+__all__ = ["weakref_finalize"]
-+
-+
-+class weakref_finalize(object):
-+ """Class for finalization of weakrefable objects
-+ finalize(obj, func, *args, **kwargs) returns a callable finalizer
-+ object which will be called when obj is garbage collected. The
-+ first time the finalizer is called it evaluates func(*arg, **kwargs)
-+ and returns the result. After this the finalizer is dead, and
-+ calling it just returns None.
-+ When the program exits any remaining finalizers for which the
-+ atexit attribute is true will be run in reverse order of creation.
-+ By default atexit is true.
-+ """
-+
-+ # Finalizer objects don't have any state of their own. They are
-+ # just used as keys to lookup _Info objects in the registry. This
-+ # ensures that they cannot be part of a ref-cycle.
-+
-+ __slots__ = ()
-+ _registry = {}
-+ _shutdown = False
-+ _index_iter = itertools.count()
-+ _dirty = False
-+ _registered_with_atexit = False
-+
-+ class _Info(object):
-+ __slots__ = ("weakref", "func", "args", "kwargs", "atexit", "index")
-+
-+ def __init__(self, obj, func, *args, **kwargs):
-+ if not self._registered_with_atexit:
-+ # We may register the exit function more than once because
-+ # of a thread race, but that is harmless
-+ import atexit
-+
-+ atexit.register(self._exitfunc)
-+ weakref_finalize._registered_with_atexit = True
-+ info = self._Info()
-+ info.weakref = ref(obj, self)
-+ info.func = func
-+ info.args = args
-+ info.kwargs = kwargs or None
-+ info.atexit = True
-+ info.index = next(self._index_iter)
-+ self._registry[self] = info
-+ weakref_finalize._dirty = True
-+
-+ def __call__(self, _=None):
-+ """If alive then mark as dead and return func(*args, **kwargs);
-+ otherwise return None"""
-+ info = self._registry.pop(self, None)
-+ if info and not self._shutdown:
-+ return info.func(*info.args, **(info.kwargs or {}))
-+
-+ def detach(self):
-+ """If alive then mark as dead and return (obj, func, args, kwargs);
-+ otherwise return None"""
-+ info = self._registry.get(self)
-+ obj = info and info.weakref()
-+ if obj is not None and self._registry.pop(self, None):
-+ return (obj, info.func, info.args, info.kwargs or {})
-+
-+ def peek(self):
-+ """If alive then return (obj, func, args, kwargs);
-+ otherwise return None"""
-+ info = self._registry.get(self)
-+ obj = info and info.weakref()
-+ if obj is not None:
-+ return (obj, info.func, info.args, info.kwargs or {})
-+
-+ @property
-+ def alive(self):
-+ """Whether finalizer is alive"""
-+ return self in self._registry
-+
-+ @property
-+ def atexit(self):
-+ """Whether finalizer should be called at exit"""
-+ info = self._registry.get(self)
-+ return bool(info) and info.atexit
-+
-+ @atexit.setter
-+ def atexit(self, value):
-+ info = self._registry.get(self)
-+ if info:
-+ info.atexit = bool(value)
-+
-+ def __repr__(self):
-+ info = self._registry.get(self)
-+ obj = info and info.weakref()
-+ if obj is None:
-+ return "<%s object at %#x; dead>" % (type(self).__name__, id(self))
-+ else:
-+ return "<%s object at %#x; for %r at %#x>" % (
-+ type(self).__name__,
-+ id(self),
-+ type(obj).__name__,
-+ id(obj),
-+ )
-+
-+ @classmethod
-+ def _select_for_exit(cls):
-+ # Return live finalizers marked for exit, oldest first
-+ L = [(f, i) for (f, i) in cls._registry.items() if i.atexit]
-+ L.sort(key=lambda item: item[1].index)
-+ return [f for (f, i) in L]
-+
-+ @classmethod
-+ def _exitfunc(cls):
-+ # At shutdown invoke finalizers for which atexit is true.
-+ # This is called once all other non-daemonic threads have been
-+ # joined.
-+ reenable_gc = False
-+ try:
-+ if cls._registry:
-+ import gc
-+
-+ if gc.isenabled():
-+ reenable_gc = True
-+ gc.disable()
-+ pending = None
-+ while True:
-+ if pending is None or weakref_finalize._dirty:
-+ pending = cls._select_for_exit()
-+ weakref_finalize._dirty = False
-+ if not pending:
-+ break
-+ f = pending.pop()
-+ try:
-+ # gc is disabled, so (assuming no daemonic
-+ # threads) the following is the only line in
-+ # this function which might trigger creation
-+ # of a new finalizer
-+ f()
-+ except Exception:
-+ sys.excepthook(*sys.exc_info())
-+ assert f not in cls._registry
-+ finally:
-+ # prevent any more finalizers from executing during shutdown
-+ weakref_finalize._shutdown = True
-+ if reenable_gc:
-+ gc.enable()
-diff --git a/third_party/python/urllib3/urllib3/packages/six.py b/third_party/python/urllib3/urllib3/packages/six.py
-index 314424099f624..f099a3dcd28d2 100644
---- a/third_party/python/urllib3/urllib3/packages/six.py
-+++ b/third_party/python/urllib3/urllib3/packages/six.py
-@@ -1,4 +1,4 @@
--# Copyright (c) 2010-2019 Benjamin Peterson
-+# Copyright (c) 2010-2020 Benjamin Peterson
- #
- # Permission is hereby granted, free of charge, to any person obtaining a copy
- # of this software and associated documentation files (the "Software"), to deal
-@@ -29,7 +29,7 @@
- import types
-
- __author__ = "Benjamin Peterson <benjamin@python.org>"
--__version__ = "1.12.0"
-+__version__ = "1.16.0"
-
-
- # Useful for very coarse version differentiation.
-@@ -71,6 +71,11 @@ def __len__(self):
- MAXSIZE = int((1 << 63) - 1)
- del X
-
-+if PY34:
-+ from importlib.util import spec_from_loader
-+else:
-+ spec_from_loader = None
-+
-
- def _add_doc(func, doc):
- """Add documentation to a function."""
-@@ -182,6 +187,11 @@ def find_module(self, fullname, path=None):
- return self
- return None
-
-+ def find_spec(self, fullname, path, target=None):
-+ if fullname in self.known_modules:
-+ return spec_from_loader(fullname, self)
-+ return None
-+
- def __get_module(self, fullname):
- try:
- return self.known_modules[fullname]
-@@ -220,6 +230,12 @@ def get_code(self, fullname):
-
- get_source = get_code # same as get_code
-
-+ def create_module(self, spec):
-+ return self.load_module(spec.name)
-+
-+ def exec_module(self, module):
-+ pass
-+
-
- _importer = _SixMetaPathImporter(__name__)
-
-@@ -260,9 +276,19 @@ class _MovedItems(_LazyModule):
- ),
- MovedModule("builtins", "__builtin__"),
- MovedModule("configparser", "ConfigParser"),
-+ MovedModule(
-+ "collections_abc",
-+ "collections",
-+ "collections.abc" if sys.version_info >= (3, 3) else "collections",
-+ ),
- MovedModule("copyreg", "copy_reg"),
- MovedModule("dbm_gnu", "gdbm", "dbm.gnu"),
-- MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"),
-+ MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"),
-+ MovedModule(
-+ "_dummy_thread",
-+ "dummy_thread",
-+ "_dummy_thread" if sys.version_info < (3, 9) else "_thread",
-+ ),
- MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
- MovedModule("http_cookies", "Cookie", "http.cookies"),
- MovedModule("html_entities", "htmlentitydefs", "html.entities"),
-@@ -307,7 +333,9 @@ class _MovedItems(_LazyModule):
- ]
- # Add windows specific modules.
- if sys.platform == "win32":
-- _moved_attributes += [MovedModule("winreg", "_winreg")]
-+ _moved_attributes += [
-+ MovedModule("winreg", "_winreg"),
-+ ]
-
- for attr in _moved_attributes:
- setattr(_MovedItems, attr.name, attr)
-@@ -476,7 +504,7 @@ class Module_six_moves_urllib_robotparser(_LazyModule):
-
-
- _urllib_robotparser_moved_attributes = [
-- MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser")
-+ MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"),
- ]
- for attr in _urllib_robotparser_moved_attributes:
- setattr(Module_six_moves_urllib_robotparser, attr.name, attr)
-@@ -678,9 +706,11 @@ def u(s):
- if sys.version_info[1] <= 1:
- _assertRaisesRegex = "assertRaisesRegexp"
- _assertRegex = "assertRegexpMatches"
-+ _assertNotRegex = "assertNotRegexpMatches"
- else:
- _assertRaisesRegex = "assertRaisesRegex"
- _assertRegex = "assertRegex"
-+ _assertNotRegex = "assertNotRegex"
- else:
-
- def b(s):
-@@ -707,6 +737,7 @@ def indexbytes(buf, i):
- _assertCountEqual = "assertItemsEqual"
- _assertRaisesRegex = "assertRaisesRegexp"
- _assertRegex = "assertRegexpMatches"
-+ _assertNotRegex = "assertNotRegexpMatches"
- _add_doc(b, """Byte literal""")
- _add_doc(u, """Text literal""")
-
-@@ -723,6 +754,10 @@ def assertRegex(self, *args, **kwargs):
- return getattr(self, _assertRegex)(*args, **kwargs)
-
-
-+def assertNotRegex(self, *args, **kwargs):
-+ return getattr(self, _assertNotRegex)(*args, **kwargs)
-+
-+
- if PY3:
- exec_ = getattr(moves.builtins, "exec")
-
-@@ -737,7 +772,6 @@ def reraise(tp, value, tb=None):
- value = None
- tb = None
-
--
- else:
-
- def exec_(_code_, _globs_=None, _locs_=None):
-@@ -750,7 +784,7 @@ def exec_(_code_, _globs_=None, _locs_=None):
- del frame
- elif _locs_ is None:
- _locs_ = _globs_
-- exec("""exec _code_ in _globs_, _locs_""")
-+ exec ("""exec _code_ in _globs_, _locs_""")
-
- exec_(
- """def reraise(tp, value, tb=None):
-@@ -762,18 +796,7 @@ def exec_(_code_, _globs_=None, _locs_=None):
- )
-
-
--if sys.version_info[:2] == (3, 2):
-- exec_(
-- """def raise_from(value, from_value):
-- try:
-- if from_value is None:
-- raise value
-- raise value from from_value
-- finally:
-- value = None
--"""
-- )
--elif sys.version_info[:2] > (3, 2):
-+if sys.version_info[:2] > (3,):
- exec_(
- """def raise_from(value, from_value):
- try:
-@@ -863,19 +886,41 @@ def print_(*args, **kwargs):
- _add_doc(reraise, """Reraise an exception.""")
-
- if sys.version_info[0:2] < (3, 4):
-+ # This does exactly the same what the :func:`py3:functools.update_wrapper`
-+ # function does on Python versions after 3.2. It sets the ``__wrapped__``
-+ # attribute on ``wrapper`` object and it doesn't raise an error if any of
-+ # the attributes mentioned in ``assigned`` and ``updated`` are missing on
-+ # ``wrapped`` object.
-+ def _update_wrapper(
-+ wrapper,
-+ wrapped,
-+ assigned=functools.WRAPPER_ASSIGNMENTS,
-+ updated=functools.WRAPPER_UPDATES,
-+ ):
-+ for attr in assigned:
-+ try:
-+ value = getattr(wrapped, attr)
-+ except AttributeError:
-+ continue
-+ else:
-+ setattr(wrapper, attr, value)
-+ for attr in updated:
-+ getattr(wrapper, attr).update(getattr(wrapped, attr, {}))
-+ wrapper.__wrapped__ = wrapped
-+ return wrapper
-+
-+ _update_wrapper.__doc__ = functools.update_wrapper.__doc__
-
- def wraps(
- wrapped,
- assigned=functools.WRAPPER_ASSIGNMENTS,
- updated=functools.WRAPPER_UPDATES,
- ):
-- def wrapper(f):
-- f = functools.wraps(wrapped, assigned, updated)(f)
-- f.__wrapped__ = wrapped
-- return f
--
-- return wrapper
-+ return functools.partial(
-+ _update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated
-+ )
-
-+ wraps.__doc__ = functools.wraps.__doc__
-
- else:
- wraps = functools.wraps
-@@ -888,7 +933,15 @@ def with_metaclass(meta, *bases):
- # the actual metaclass.
- class metaclass(type):
- def __new__(cls, name, this_bases, d):
-- return meta(name, bases, d)
-+ if sys.version_info[:2] >= (3, 7):
-+ # This version introduced PEP 560 that requires a bit
-+ # of extra care (we mimic what is done by __build_class__).
-+ resolved_bases = types.resolve_bases(bases)
-+ if resolved_bases is not bases:
-+ d["__orig_bases__"] = bases
-+ else:
-+ resolved_bases = bases
-+ return meta(name, resolved_bases, d)
-
- @classmethod
- def __prepare__(cls, name, this_bases):
-@@ -928,12 +981,11 @@ def ensure_binary(s, encoding="utf-8", errors="strict"):
- - `str` -> encoded to `bytes`
- - `bytes` -> `bytes`
- """
-+ if isinstance(s, binary_type):
-+ return s
- if isinstance(s, text_type):
- return s.encode(encoding, errors)
-- elif isinstance(s, binary_type):
-- return s
-- else:
-- raise TypeError("not expecting type '%s'" % type(s))
-+ raise TypeError("not expecting type '%s'" % type(s))
-
-
- def ensure_str(s, encoding="utf-8", errors="strict"):
-@@ -947,12 +999,15 @@ def ensure_str(s, encoding="utf-8", errors="strict"):
- - `str` -> `str`
- - `bytes` -> decoded to `str`
- """
-- if not isinstance(s, (text_type, binary_type)):
-- raise TypeError("not expecting type '%s'" % type(s))
-+ # Optimization: Fast return for the common case.
-+ if type(s) is str:
-+ return s
- if PY2 and isinstance(s, text_type):
-- s = s.encode(encoding, errors)
-+ return s.encode(encoding, errors)
- elif PY3 and isinstance(s, binary_type):
-- s = s.decode(encoding, errors)
-+ return s.decode(encoding, errors)
-+ elif not isinstance(s, (text_type, binary_type)):
-+ raise TypeError("not expecting type '%s'" % type(s))
- return s
-
-
-@@ -977,7 +1032,7 @@ def ensure_text(s, encoding="utf-8", errors="strict"):
-
- def python_2_unicode_compatible(klass):
- """
-- A decorator that defines __unicode__ and __str__ methods under Python 2.
-+ A class decorator that defines __unicode__ and __str__ methods under Python 2.
- Under Python 3 it does nothing.
-
- To support Python 2 and 3 with a single code base, define a __str__ method
-diff --git a/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/__init__.py b/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/__init__.py
-deleted file mode 100644
-index 6b12fd90aadec..0000000000000
---- a/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/__init__.py
-+++ /dev/null
-@@ -1,22 +0,0 @@
--import sys
--
--try:
-- # Our match_hostname function is the same as 3.5's, so we only want to
-- # import the match_hostname function if it's at least that good.
-- if sys.version_info < (3, 5):
-- raise ImportError("Fallback to vendored code")
--
-- from ssl import CertificateError, match_hostname
--except ImportError:
-- try:
-- # Backport of the function from a pypi module
-- from backports.ssl_match_hostname import ( # type: ignore
-- CertificateError,
-- match_hostname,
-- )
-- except ImportError:
-- # Our vendored copy
-- from ._implementation import CertificateError, match_hostname # type: ignore
--
--# Not needed, but documenting what we provide.
--__all__ = ("CertificateError", "match_hostname")
-diff --git a/third_party/python/urllib3/urllib3/poolmanager.py b/third_party/python/urllib3/urllib3/poolmanager.py
-index 3a31a285bf648..14b10daf3a962 100644
---- a/third_party/python/urllib3/urllib3/poolmanager.py
-+++ b/third_party/python/urllib3/urllib3/poolmanager.py
-@@ -34,6 +34,7 @@
- "ca_cert_dir",
- "ssl_context",
- "key_password",
-+ "server_hostname",
- )
-
- # All known keyword arguments that could be provided to the pool manager, its
-@@ -170,7 +171,7 @@ class PoolManager(RequestMethods):
- def __init__(self, num_pools=10, headers=None, **connection_pool_kw):
- RequestMethods.__init__(self, headers)
- self.connection_pool_kw = connection_pool_kw
-- self.pools = RecentlyUsedContainer(num_pools, dispose_func=lambda p: p.close())
-+ self.pools = RecentlyUsedContainer(num_pools)
-
- # Locally set the pool classes and keys so other PoolManagers can
- # override them.
-diff --git a/third_party/python/urllib3/urllib3/request.py b/third_party/python/urllib3/urllib3/request.py
-index 398386a5b9f61..3b4cf999225b8 100644
---- a/third_party/python/urllib3/urllib3/request.py
-+++ b/third_party/python/urllib3/urllib3/request.py
-@@ -1,6 +1,9 @@
- from __future__ import absolute_import
-
-+import sys
-+
- from .filepost import encode_multipart_formdata
-+from .packages import six
- from .packages.six.moves.urllib.parse import urlencode
-
- __all__ = ["RequestMethods"]
-@@ -168,3 +171,21 @@ def request_encode_body(
- extra_kw.update(urlopen_kw)
-
- return self.urlopen(method, url, **extra_kw)
-+
-+
-+if not six.PY2:
-+
-+ class RequestModule(sys.modules[__name__].__class__):
-+ def __call__(self, *args, **kwargs):
-+ """
-+ If user tries to call this module directly urllib3 v2.x style raise an error to the user
-+ suggesting they may need urllib3 v2
-+ """
-+ raise TypeError(
-+ "'module' object is not callable\n"
-+ "urllib3.request() method is not supported in this release, "
-+ "upgrade to urllib3 v2 to use it\n"
-+ "see https://urllib3.readthedocs.io/en/stable/v2-migration-guide.html"
-+ )
-+
-+ sys.modules[__name__].__class__ = RequestModule
-diff --git a/third_party/python/urllib3/urllib3/response.py b/third_party/python/urllib3/urllib3/response.py
-index 38693f4fc6e33..0bd13d40b8ac7 100644
---- a/third_party/python/urllib3/urllib3/response.py
-+++ b/third_party/python/urllib3/urllib3/response.py
-@@ -2,16 +2,22 @@
-
- import io
- import logging
-+import sys
-+import warnings
- import zlib
- from contextlib import contextmanager
- from socket import error as SocketError
- from socket import timeout as SocketTimeout
-
- try:
-- import brotli
-+ try:
-+ import brotlicffi as brotli
-+ except ImportError:
-+ import brotli
- except ImportError:
- brotli = None
-
-+from . import util
- from ._collections import HTTPHeaderDict
- from .connection import BaseSSLError, HTTPException
- from .exceptions import (
-@@ -478,6 +484,54 @@ def _error_catcher(self):
- if self._original_response and self._original_response.isclosed():
- self.release_conn()
-
-+ def _fp_read(self, amt):
-+ """
-+ Read a response with the thought that reading the number of bytes
-+ larger than can fit in a 32-bit int at a time via SSL in some
-+ known cases leads to an overflow error that has to be prevented
-+ if `amt` or `self.length_remaining` indicate that a problem may
-+ happen.
-+
-+ The known cases:
-+ * 3.8 <= CPython < 3.9.7 because of a bug
-+ https://github.com/urllib3/urllib3/issues/2513#issuecomment-1152559900.
-+ * urllib3 injected with pyOpenSSL-backed SSL-support.
-+ * CPython < 3.10 only when `amt` does not fit 32-bit int.
-+ """
-+ assert self._fp
-+ c_int_max = 2 ** 31 - 1
-+ if (
-+ (
-+ (amt and amt > c_int_max)
-+ or (self.length_remaining and self.length_remaining > c_int_max)
-+ )
-+ and not util.IS_SECURETRANSPORT
-+ and (util.IS_PYOPENSSL or sys.version_info < (3, 10))
-+ ):
-+ buffer = io.BytesIO()
-+ # Besides `max_chunk_amt` being a maximum chunk size, it
-+ # affects memory overhead of reading a response by this
-+ # method in CPython.
-+ # `c_int_max` equal to 2 GiB - 1 byte is the actual maximum
-+ # chunk size that does not lead to an overflow error, but
-+ # 256 MiB is a compromise.
-+ max_chunk_amt = 2 ** 28
-+ while amt is None or amt != 0:
-+ if amt is not None:
-+ chunk_amt = min(amt, max_chunk_amt)
-+ amt -= chunk_amt
-+ else:
-+ chunk_amt = max_chunk_amt
-+ data = self._fp.read(chunk_amt)
-+ if not data:
-+ break
-+ buffer.write(data)
-+ del data # to reduce peak memory usage by `max_chunk_amt`.
-+ return buffer.getvalue()
-+ else:
-+ # StringIO doesn't like amt=None
-+ return self._fp.read(amt) if amt is not None else self._fp.read()
-+
- def read(self, amt=None, decode_content=None, cache_content=False):
- """
- Similar to :meth:`http.client.HTTPResponse.read`, but with two additional
-@@ -510,13 +564,11 @@ def read(self, amt=None, decode_content=None, cache_content=False):
- fp_closed = getattr(self._fp, "closed", False)
-
- with self._error_catcher():
-+ data = self._fp_read(amt) if not fp_closed else b""
- if amt is None:
-- # cStringIO doesn't like amt=None
-- data = self._fp.read() if not fp_closed else b""
- flush_decoder = True
- else:
- cache_content = False
-- data = self._fp.read(amt) if not fp_closed else b""
- if (
- amt != 0 and not data
- ): # Platform-specific: Buggy versions of Python.
-@@ -612,9 +664,21 @@ def from_httplib(ResponseCls, r, **response_kw):
-
- # Backwards-compatibility methods for http.client.HTTPResponse
- def getheaders(self):
-+ warnings.warn(
-+ "HTTPResponse.getheaders() is deprecated and will be removed "
-+ "in urllib3 v2.1.0. Instead access HTTPResponse.headers directly.",
-+ category=DeprecationWarning,
-+ stacklevel=2,
-+ )
- return self.headers
-
- def getheader(self, name, default=None):
-+ warnings.warn(
-+ "HTTPResponse.getheader() is deprecated and will be removed "
-+ "in urllib3 v2.1.0. Instead use HTTPResponse.headers.get(name, default).",
-+ category=DeprecationWarning,
-+ stacklevel=2,
-+ )
- return self.headers.get(name, default)
-
- # Backwards compatibility for http.cookiejar
-diff --git a/third_party/python/urllib3/urllib3/util/connection.py b/third_party/python/urllib3/urllib3/util/connection.py
-index cd57455748be0..6af1138f260e4 100644
---- a/third_party/python/urllib3/urllib3/util/connection.py
-+++ b/third_party/python/urllib3/urllib3/util/connection.py
-@@ -2,9 +2,8 @@
-
- import socket
-
--from urllib3.exceptions import LocationParseError
--
- from ..contrib import _appengine_environ
-+from ..exceptions import LocationParseError
- from ..packages import six
- from .wait import NoWayToWaitForSocketError, wait_for_read
-
-@@ -118,7 +117,7 @@ def allowed_gai_family():
-
-
- def _has_ipv6(host):
-- """ Returns True if the system can bind an IPv6 address. """
-+ """Returns True if the system can bind an IPv6 address."""
- sock = None
- has_ipv6 = False
-
-diff --git a/third_party/python/urllib3/urllib3/util/proxy.py b/third_party/python/urllib3/urllib3/util/proxy.py
-index 34f884d5b314d..2199cc7b7f004 100644
---- a/third_party/python/urllib3/urllib3/util/proxy.py
-+++ b/third_party/python/urllib3/urllib3/util/proxy.py
-@@ -45,6 +45,7 @@ def create_proxy_ssl_context(
- ssl_version=resolve_ssl_version(ssl_version),
- cert_reqs=resolve_cert_reqs(cert_reqs),
- )
-+
- if (
- not ca_certs
- and not ca_cert_dir
-diff --git a/third_party/python/urllib3/urllib3/util/request.py b/third_party/python/urllib3/urllib3/util/request.py
-index 25103383ec7ab..b574b081e98a0 100644
---- a/third_party/python/urllib3/urllib3/util/request.py
-+++ b/third_party/python/urllib3/urllib3/util/request.py
-@@ -14,7 +14,10 @@
-
- ACCEPT_ENCODING = "gzip,deflate"
- try:
-- import brotli as _unused_module_brotli # noqa: F401
-+ try:
-+ import brotlicffi as _unused_module_brotli # noqa: F401
-+ except ImportError:
-+ import brotli as _unused_module_brotli # noqa: F401
- except ImportError:
- pass
- else:
-diff --git a/third_party/python/urllib3/urllib3/util/retry.py b/third_party/python/urllib3/urllib3/util/retry.py
-index ee51f922f8452..60ef6c4f3f9d0 100644
---- a/third_party/python/urllib3/urllib3/util/retry.py
-+++ b/third_party/python/urllib3/urllib3/util/retry.py
-@@ -37,7 +37,7 @@ class _RetryMeta(type):
- def DEFAULT_METHOD_WHITELIST(cls):
- warnings.warn(
- "Using 'Retry.DEFAULT_METHOD_WHITELIST' is deprecated and "
-- "will be removed in v2.0. Use 'Retry.DEFAULT_METHODS_ALLOWED' instead",
-+ "will be removed in v2.0. Use 'Retry.DEFAULT_ALLOWED_METHODS' instead",
- DeprecationWarning,
- )
- return cls.DEFAULT_ALLOWED_METHODS
-@@ -69,6 +69,24 @@ def DEFAULT_REDIRECT_HEADERS_BLACKLIST(cls, value):
- )
- cls.DEFAULT_REMOVE_HEADERS_ON_REDIRECT = value
-
-+ @property
-+ def BACKOFF_MAX(cls):
-+ warnings.warn(
-+ "Using 'Retry.BACKOFF_MAX' is deprecated and "
-+ "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead",
-+ DeprecationWarning,
-+ )
-+ return cls.DEFAULT_BACKOFF_MAX
-+
-+ @BACKOFF_MAX.setter
-+ def BACKOFF_MAX(cls, value):
-+ warnings.warn(
-+ "Using 'Retry.BACKOFF_MAX' is deprecated and "
-+ "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead",
-+ DeprecationWarning,
-+ )
-+ cls.DEFAULT_BACKOFF_MAX = value
-+
-
- @six.add_metaclass(_RetryMeta)
- class Retry(object):
-@@ -181,7 +199,7 @@ class Retry(object):
-
- seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep
- for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer
-- than :attr:`Retry.BACKOFF_MAX`.
-+ than :attr:`Retry.DEFAULT_BACKOFF_MAX`.
-
- By default, backoff is disabled (set to 0).
-
-@@ -217,10 +235,10 @@ class Retry(object):
- RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503])
-
- #: Default headers to be used for ``remove_headers_on_redirect``
-- DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset(["Authorization"])
-+ DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset(["Cookie", "Authorization"])
-
- #: Maximum backoff time.
-- BACKOFF_MAX = 120
-+ DEFAULT_BACKOFF_MAX = 120
-
- def __init__(
- self,
-@@ -253,6 +271,7 @@ def __init__(
- "Using 'method_whitelist' with Retry is deprecated and "
- "will be removed in v2.0. Use 'allowed_methods' instead",
- DeprecationWarning,
-+ stacklevel=2,
- )
- allowed_methods = method_whitelist
- if allowed_methods is _Default:
-@@ -320,7 +339,7 @@ def new(self, **kw):
-
- @classmethod
- def from_int(cls, retries, redirect=True, default=None):
-- """ Backwards-compatibility for the old retries format."""
-+ """Backwards-compatibility for the old retries format."""
- if retries is None:
- retries = default if default is not None else cls.DEFAULT
-
-@@ -347,7 +366,7 @@ def get_backoff_time(self):
- return 0
-
- backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1))
-- return min(self.BACKOFF_MAX, backoff_value)
-+ return min(self.DEFAULT_BACKOFF_MAX, backoff_value)
-
- def parse_retry_after(self, retry_after):
- # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4
-@@ -373,9 +392,9 @@ def parse_retry_after(self, retry_after):
- return seconds
-
- def get_retry_after(self, response):
-- """ Get the value of Retry-After in seconds. """
-+ """Get the value of Retry-After in seconds."""
-
-- retry_after = response.getheader("Retry-After")
-+ retry_after = response.headers.get("Retry-After")
-
- if retry_after is None:
- return None
-@@ -467,7 +486,7 @@ def is_retry(self, method, status_code, has_retry_after=False):
- )
-
- def is_exhausted(self):
-- """ Are we out of retries? """
-+ """Are we out of retries?"""
- retry_counts = (
- self.total,
- self.connect,
-diff --git a/third_party/python/urllib3/urllib3/util/ssl_.py b/third_party/python/urllib3/urllib3/util/ssl_.py
-index 1cb5e7cdc1c0c..8f867812a5eb3 100644
---- a/third_party/python/urllib3/urllib3/util/ssl_.py
-+++ b/third_party/python/urllib3/urllib3/util/ssl_.py
-@@ -44,13 +44,21 @@ def _const_compare_digest_backport(a, b):
-
- try: # Test for SSL features
- import ssl
-- from ssl import HAS_SNI # Has SNI?
- from ssl import CERT_REQUIRED, wrap_socket
-+except ImportError:
-+ pass
-+
-+try:
-+ from ssl import HAS_SNI # Has SNI?
-+except ImportError:
-+ pass
-
-+try:
- from .ssltransport import SSLTransport
- except ImportError:
- pass
-
-+
- try: # Platform-specific: Python 3.6
- from ssl import PROTOCOL_TLS
-
-@@ -63,6 +71,11 @@ def _const_compare_digest_backport(a, b):
- except ImportError:
- PROTOCOL_SSLv23 = PROTOCOL_TLS = 2
-
-+try:
-+ from ssl import PROTOCOL_TLS_CLIENT
-+except ImportError:
-+ PROTOCOL_TLS_CLIENT = PROTOCOL_TLS
-+
-
- try:
- from ssl import OP_NO_COMPRESSION, OP_NO_SSLv2, OP_NO_SSLv3
-@@ -151,7 +164,7 @@ def wrap_socket(self, socket, server_hostname=None, server_side=False):
- "urllib3 from configuring SSL appropriately and may cause "
- "certain SSL connections to fail. You can upgrade to a newer "
- "version of Python to solve this. For more information, see "
-- "https://urllib3.readthedocs.io/en/latest/advanced-usage.html"
-+ "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
- "#ssl-warnings",
- InsecurePlatformWarning,
- )
-@@ -270,7 +283,11 @@ def create_urllib3_context(
- Constructed SSLContext object with specified options
- :rtype: SSLContext
- """
-- context = SSLContext(ssl_version or PROTOCOL_TLS)
-+ # PROTOCOL_TLS is deprecated in Python 3.10
-+ if not ssl_version or ssl_version == PROTOCOL_TLS:
-+ ssl_version = PROTOCOL_TLS_CLIENT
-+
-+ context = SSLContext(ssl_version)
-
- context.set_ciphers(ciphers or DEFAULT_CIPHERS)
-
-@@ -305,13 +322,25 @@ def create_urllib3_context(
- ) is not None:
- context.post_handshake_auth = True
-
-- context.verify_mode = cert_reqs
-- if (
-- getattr(context, "check_hostname", None) is not None
-- ): # Platform-specific: Python 3.2
-- # We do our own verification, including fingerprints and alternative
-- # hostnames. So disable it here
-- context.check_hostname = False
-+ def disable_check_hostname():
-+ if (
-+ getattr(context, "check_hostname", None) is not None
-+ ): # Platform-specific: Python 3.2
-+ # We do our own verification, including fingerprints and alternative
-+ # hostnames. So disable it here
-+ context.check_hostname = False
-+
-+ # The order of the below lines setting verify_mode and check_hostname
-+ # matter due to safe-guards SSLContext has to prevent an SSLContext with
-+ # check_hostname=True, verify_mode=NONE/OPTIONAL. This is made even more
-+ # complex because we don't know whether PROTOCOL_TLS_CLIENT will be used
-+ # or not so we don't know the initial state of the freshly created SSLContext.
-+ if cert_reqs == ssl.CERT_REQUIRED:
-+ context.verify_mode = cert_reqs
-+ disable_check_hostname()
-+ else:
-+ disable_check_hostname()
-+ context.verify_mode = cert_reqs
-
- # Enable logging of TLS session keys via defacto standard environment variable
- # 'SSLKEYLOGFILE', if the feature is available (Python 3.8+). Skip empty values.
-@@ -393,7 +422,7 @@ def ssl_wrap_socket(
- try:
- if hasattr(context, "set_alpn_protocols"):
- context.set_alpn_protocols(ALPN_PROTOCOLS)
-- except NotImplementedError:
-+ except NotImplementedError: # Defensive: in CI, we always have set_alpn_protocols
- pass
-
- # If we detect server_hostname is an IP address then the SNI
-@@ -411,7 +440,7 @@ def ssl_wrap_socket(
- "This may cause the server to present an incorrect TLS "
- "certificate, which can cause validation failures. You can upgrade to "
- "a newer version of Python to solve this. For more information, see "
-- "https://urllib3.readthedocs.io/en/latest/advanced-usage.html"
-+ "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
- "#ssl-warnings",
- SNIMissingWarning,
- )
-diff --git a/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/_implementation.py b/third_party/python/urllib3/urllib3/util/ssl_match_hostname.py
-similarity index 92%
-rename from third_party/python/urllib3/urllib3/packages/ssl_match_hostname/_implementation.py
-rename to third_party/python/urllib3/urllib3/util/ssl_match_hostname.py
-index 689208d3c63f1..1dd950c489607 100644
---- a/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/_implementation.py
-+++ b/third_party/python/urllib3/urllib3/util/ssl_match_hostname.py
-@@ -9,7 +9,7 @@
- # ipaddress has been backported to 2.6+ in pypi. If it is installed on the
- # system, use it to handle IPAddress ServerAltnames (this was added in
- # python-3.5) otherwise only do DNS matching. This allows
--# backports.ssl_match_hostname to continue to be used in Python 2.7.
-+# util.ssl_match_hostname to continue to be used in Python 2.7.
- try:
- import ipaddress
- except ImportError:
-@@ -78,7 +78,8 @@ def _dnsname_match(dn, hostname, max_wildcards=1):
-
- def _to_unicode(obj):
- if isinstance(obj, str) and sys.version_info < (3,):
-- obj = unicode(obj, encoding="ascii", errors="strict")
-+ # ignored flake8 # F821 to support python 2.7 function
-+ obj = unicode(obj, encoding="ascii", errors="strict") # noqa: F821
- return obj
-
-
-@@ -111,11 +112,9 @@ def match_hostname(cert, hostname):
- try:
- # Divergence from upstream: ipaddress can't handle byte str
- host_ip = ipaddress.ip_address(_to_unicode(hostname))
-- except ValueError:
-- # Not an IP address (common case)
-- host_ip = None
-- except UnicodeError:
-- # Divergence from upstream: Have to deal with ipaddress not taking
-+ except (UnicodeError, ValueError):
-+ # ValueError: Not an IP address (common case)
-+ # UnicodeError: Divergence from upstream: Have to deal with ipaddress not taking
- # byte strings. addresses should be all ascii, so we consider it not
- # an ipaddress in this case
- host_ip = None
-@@ -123,7 +122,7 @@ def match_hostname(cert, hostname):
- # Divergence from upstream: Make ipaddress library optional
- if ipaddress is None:
- host_ip = None
-- else:
-+ else: # Defensive
- raise
- dnsnames = []
- san = cert.get("subjectAltName", ())
-diff --git a/third_party/python/urllib3/urllib3/util/ssltransport.py b/third_party/python/urllib3/urllib3/util/ssltransport.py
-index 1e41354f5d458..4a7105d17916a 100644
---- a/third_party/python/urllib3/urllib3/util/ssltransport.py
-+++ b/third_party/python/urllib3/urllib3/util/ssltransport.py
-@@ -2,8 +2,8 @@
- import socket
- import ssl
-
--from urllib3.exceptions import ProxySchemeUnsupported
--from urllib3.packages import six
-+from ..exceptions import ProxySchemeUnsupported
-+from ..packages import six
-
- SSL_BLOCKSIZE = 16384
-
-@@ -193,7 +193,7 @@ def _wrap_ssl_read(self, len, buffer=None):
- raise
-
- def _ssl_io_loop(self, func, *args):
-- """ Performs an I/O loop between incoming/outgoing and the socket."""
-+ """Performs an I/O loop between incoming/outgoing and the socket."""
- should_loop = True
- ret = None
-
-diff --git a/third_party/python/urllib3/urllib3/util/timeout.py b/third_party/python/urllib3/urllib3/util/timeout.py
-index ff69593b05b5e..78e18a6272482 100644
---- a/third_party/python/urllib3/urllib3/util/timeout.py
-+++ b/third_party/python/urllib3/urllib3/util/timeout.py
-@@ -2,9 +2,8 @@
-
- import time
-
--# The default socket timeout, used by httplib to indicate that no timeout was
--# specified by the user
--from socket import _GLOBAL_DEFAULT_TIMEOUT
-+# The default socket timeout, used by httplib to indicate that no timeout was; specified by the user
-+from socket import _GLOBAL_DEFAULT_TIMEOUT, getdefaulttimeout
-
- from ..exceptions import TimeoutStateError
-
-@@ -116,6 +115,10 @@ def __repr__(self):
- # __str__ provided for backwards compatibility
- __str__ = __repr__
-
-+ @classmethod
-+ def resolve_default_timeout(cls, timeout):
-+ return getdefaulttimeout() if timeout is cls.DEFAULT_TIMEOUT else timeout
-+
- @classmethod
- def _validate_timeout(cls, value, name):
- """Check that a timeout attribute is valid.
-diff --git a/third_party/python/urllib3/urllib3/util/url.py b/third_party/python/urllib3/urllib3/util/url.py
-index 6ff238fe3cbd0..e5682d3be4293 100644
---- a/third_party/python/urllib3/urllib3/util/url.py
-+++ b/third_party/python/urllib3/urllib3/util/url.py
-@@ -50,7 +50,7 @@
- "(?:(?:%(hex)s:){0,6}%(hex)s)?::",
- ]
-
--UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._!\-~"
-+UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._\-~"
- IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")"
- ZONE_ID_PAT = "(?:%25|%)(?:[" + UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+"
- IPV6_ADDRZ_PAT = r"\[" + IPV6_PAT + r"(?:" + ZONE_ID_PAT + r")?\]"
-@@ -63,12 +63,12 @@
- BRACELESS_IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT[2:-2] + "$")
- ZONE_ID_RE = re.compile("(" + ZONE_ID_PAT + r")\]$")
-
--SUBAUTHORITY_PAT = (u"^(?:(.*)@)?(%s|%s|%s)(?::([0-9]{0,5}))?$") % (
-+_HOST_PORT_PAT = ("^(%s|%s|%s)(?::0*?(|0|[1-9][0-9]{0,4}))?$") % (
- REG_NAME_PAT,
- IPV4_PAT,
- IPV6_ADDRZ_PAT,
- )
--SUBAUTHORITY_RE = re.compile(SUBAUTHORITY_PAT, re.UNICODE | re.DOTALL)
-+_HOST_PORT_RE = re.compile(_HOST_PORT_PAT, re.UNICODE | re.DOTALL)
-
- UNRESERVED_CHARS = set(
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-~"
-@@ -279,6 +279,9 @@ def _normalize_host(host, scheme):
- if scheme in NORMALIZABLE_SCHEMES:
- is_ipv6 = IPV6_ADDRZ_RE.match(host)
- if is_ipv6:
-+ # IPv6 hosts of the form 'a::b%zone' are encoded in a URL as
-+ # such per RFC 6874: 'a::b%25zone'. Unquote the ZoneID
-+ # separator as necessary to return a valid RFC 4007 scoped IP.
- match = ZONE_ID_RE.search(host)
- if match:
- start, end = match.span(1)
-@@ -300,7 +303,7 @@ def _normalize_host(host, scheme):
-
-
- def _idna_encode(name):
-- if name and any([ord(x) > 128 for x in name]):
-+ if name and any(ord(x) >= 128 for x in name):
- try:
- import idna
- except ImportError:
-@@ -331,7 +334,7 @@ def parse_url(url):
- """
- Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is
- performed to parse incomplete urls. Fields not provided will be None.
-- This parser is RFC 3986 compliant.
-+ This parser is RFC 3986 and RFC 6874 compliant.
-
- The parser logic and helper functions are based heavily on
- work done in the ``rfc3986`` module.
-@@ -365,7 +368,9 @@ def parse_url(url):
- scheme = scheme.lower()
-
- if authority:
-- auth, host, port = SUBAUTHORITY_RE.match(authority).groups()
-+ auth, _, host_port = authority.rpartition("@")
-+ auth = auth or None
-+ host, port = _HOST_PORT_RE.match(host_port).groups()
- if auth and normalize_uri:
- auth = _encode_invalid_chars(auth, USERINFO_CHARS)
- if port == "":
-diff --git a/third_party/python/urllib3/urllib3/util/wait.py b/third_party/python/urllib3/urllib3/util/wait.py
-index c280646c7be0b..21b4590b3dc9b 100644
---- a/third_party/python/urllib3/urllib3/util/wait.py
-+++ b/third_party/python/urllib3/urllib3/util/wait.py
-@@ -42,7 +42,6 @@ class NoWayToWaitForSocketError(Exception):
- def _retry_on_intr(fn, timeout):
- return fn(timeout)
-
--
- else:
- # Old and broken Pythons.
- def _retry_on_intr(fn, timeout):
diff --git a/meta-oe/recipes-extended/mozjs/mozjs-115_115.6.0.bb b/meta-oe/recipes-extended/mozjs/mozjs-115_115.8.0.bb
index 4d9bb0e585..4e36acabb4 100644
--- a/meta-oe/recipes-extended/mozjs/mozjs-115_115.6.0.bb
+++ b/meta-oe/recipes-extended/mozjs/mozjs-115_115.8.0.bb
@@ -15,10 +15,9 @@ SRC_URI = "https://archive.mozilla.org/pub/firefox/releases/${PV}esr/source/fire
file://0001-rewrite-cargo-host-linker-in-python3.patch \
file://musl-disable-stackwalk.patch \
file://0001-add-arm-to-list-of-mozinline.patch \
- file://py3.12.patch \
file://armv5.patch \
"
-SRC_URI[sha256sum] = "66d7e6e5129ac8e6fe83e24227dc7bb8dc42650bc53b21838e614de80d22bc66"
+SRC_URI[sha256sum] = "af8086f23efc8492d286671f6035b1a915de6f4ed5c7897e40be0e1cb6b895ea"
S = "${WORKDIR}/firefox-${PV}"