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()