Skip to content

Commit 42a7c28

Browse files
committed
Update truststore to 0.10.1
1 parent 7e9c87a commit 42a7c28

File tree

5 files changed

+42
-4
lines changed

5 files changed

+42
-4
lines changed

news/truststore.vendor.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Upgrade truststore to 0.10.1

src/pip/_vendor/truststore/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
# Detect Python runtimes which don't implement SSLObject.get_unverified_chain() API
99
# This API only became public in Python 3.13 but was available in CPython and PyPy since 3.10.
10-
if _sys.version_info < (3, 13):
10+
if _sys.version_info < (3, 13) and _sys.implementation.name not in ("cpython", "pypy"):
1111
try:
1212
import ssl as _ssl
1313
except ImportError:
@@ -33,4 +33,4 @@
3333
del _api, _sys # type: ignore[name-defined] # noqa: F821
3434

3535
__all__ = ["SSLContext", "inject_into_ssl", "extract_from_ssl"]
36-
__version__ = "0.10.0"
36+
__version__ = "0.10.1"

src/pip/_vendor/truststore/_api.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import sys
66
import typing
77

8-
import _ssl # type: ignore[import-not-found]
8+
import _ssl
99

1010
from ._ssl_constants import (
1111
_original_SSLContext,
@@ -43,6 +43,23 @@ def inject_into_ssl() -> None:
4343
except ImportError:
4444
pass
4545

46+
# requests starting with 2.32.0 added a preloaded SSL context to improve concurrent performance;
47+
# this unfortunately leads to a RecursionError, which can be avoided by patching the preloaded SSL context with
48+
# the truststore patched instance
49+
# also see https://github.com/psf/requests/pull/6667
50+
try:
51+
from pip._vendor.requests import adapters as requests_adapters
52+
53+
preloaded_context = getattr(requests_adapters, "_preloaded_ssl_context", None)
54+
if preloaded_context is not None:
55+
setattr(
56+
requests_adapters,
57+
"_preloaded_ssl_context",
58+
SSLContext(ssl.PROTOCOL_TLS_CLIENT),
59+
)
60+
except ImportError:
61+
pass
62+
4663

4764
def extract_from_ssl() -> None:
4865
"""Restores the :class:`ssl.SSLContext` class to its original state"""

src/pip/_vendor/vendor.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ rich==13.9.4
1515
resolvelib==1.0.1
1616
setuptools==70.3.0
1717
tomli==2.2.1
18-
truststore==0.10.0
18+
truststore==0.10.1
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
diff --git a/src/pip/_vendor/truststore/_api.py b/src/pip/_vendor/truststore/_api.py
2+
index 47b7a63ab..d09d3096f 100644
3+
--- a/src/pip/_vendor/truststore/_api.py
4+
+++ b/src/pip/_vendor/truststore/_api.py
5+
@@ -48,12 +48,12 @@ def inject_into_ssl() -> None:
6+
# the truststore patched instance
7+
# also see https://github.com/psf/requests/pull/6667
8+
try:
9+
- import requests.adapters
10+
+ from pip._vendor.requests import adapters as requests_adapters
11+
12+
- preloaded_context = getattr(requests.adapters, "_preloaded_ssl_context", None)
13+
+ preloaded_context = getattr(requests_adapters, "_preloaded_ssl_context", None)
14+
if preloaded_context is not None:
15+
setattr(
16+
- requests.adapters,
17+
+ requests_adapters,
18+
"_preloaded_ssl_context",
19+
SSLContext(ssl.PROTOCOL_TLS_CLIENT),
20+
)

0 commit comments

Comments
 (0)