1From 8e96b1e312d473429fbd08bc867376e9932ad42a Mon Sep 17 00:00:00 2001 2From: Carl Smedstad <carl.smedstad@protonmail.com> 3Date: Mon, 30 Dec 2024 19:08:26 +0100 4Subject: [PATCH] Mock socket.shutdown for compatibility with urllib3 >= 2.3 5 6Version 2.3.0 of urllib3 gets the attribute socket.shutdown which 7HTTPretty does no mock. See the following call stack: 8 9 /usr/lib/python3.13/site-packages/requests/sessions.py:602: in get 10 return self.request("GET", url, **kwargs) 11 /usr/lib/python3.13/site-packages/requests/sessions.py:589: in request 12 resp = self.send(prep, **send_kwargs) 13 /usr/lib/python3.13/site-packages/requests/sessions.py:703: in send 14 r = adapter.send(request, **kwargs) 15 /usr/lib/python3.13/site-packages/requests/adapters.py:667: in send 16 resp = conn.urlopen( 17 /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:787: in urlopen 18 response = self._make_request( 19 /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:534: in _make_request 20 response = conn.getresponse() 21 /usr/lib/python3.13/site-packages/urllib3/connection.py:513: in getresponse 22 _shutdown = getattr(self.sock, "shutdown", None) 23--- 24 httpretty/core.py | 3 +++ 25 1 file changed, 3 insertions(+) 26 27diff --git a/httpretty/core.py b/httpretty/core.py 28index 69686458..de7e091a 100644 29--- a/httpretty/core.py 30+++ b/httpretty/core.py 31@@ -861,6 +861,9 @@ def recv_into(self, *args, **kwargs): 32 def recvfrom(self, *args, **kwargs): 33 return self.forward_and_trace('recvfrom', *args, **kwargs) 34 35+ def shutdown(self, *args, **kwargs): 36+ return self.forward_and_trace('shutdown', *args, **kwargs) 37+ 38 def recv(self, buffersize=0, *args, **kwargs): 39 if not self._read_buf: 40 self._read_buf = io.BytesIO()