From 8d10219036ab18462c0a8e35a5aae80e0d284c57 Mon Sep 17 00:00:00 2001 From: Steve Kowalik Date: Fri, 10 Apr 2026 11:36:31 +1000 Subject: [PATCH] Support Python 3.14 partial() changes functools.partial() was changed in Python 3.14 to be a method descriptor, which means we need to wrap it in staticmethod now. This change does appear to be backward compatible, so I haven't guarded it with a version check. --- httpretty/core.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/httpretty/core.py b/httpretty/core.py index 69686458..2cea6a89 100644 --- a/httpretty/core.py +++ b/httpretty/core.py @@ -1852,7 +1852,7 @@ def apply_patch_socket(): extract_into_urllib3() if requests_urllib3_connection is not None: - urllib3_wrap = partial(fake_wrap_socket, old_requests_ssl_wrap_socket) + urllib3_wrap = staticmethod(partial(fake_wrap_socket, old_requests_ssl_wrap_socket)) requests_urllib3_connection.ssl_wrap_socket = urllib3_wrap requests_urllib3_connection.__dict__['ssl_wrap_socket'] = urllib3_wrap @@ -1867,12 +1867,12 @@ def apply_patch_socket(): socks.__dict__['socksocket'] = fakesock.socket if ssl: - new_wrap = partial(fake_wrap_socket, old_ssl_wrap_socket) + new_wrap = staticmethod(partial(fake_wrap_socket, old_ssl_wrap_socket)) ssl.wrap_socket = new_wrap ssl.SSLSocket = FakeSSLSocket ssl.SSLContext = old_sslcontext_class try: - ssl.SSLContext.wrap_socket = partial(fake_wrap_socket, old_ssl_wrap_socket) + ssl.SSLContext.wrap_socket = staticmethod(partial(fake_wrap_socket, old_ssl_wrap_socket)) except AttributeError: pass