nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1From 38ba4e559a38279417719440174df6ca2bc203c5 Mon Sep 17 00:00:00 2001
2From: Priyanshu Tripathi <priyanshu.tripathi@deshaw.com>
3Date: Fri, 16 Jan 2026 06:50:43 -0500
4Subject: [PATCH] fix: migrate away from deprecated `HTTPResponse.getheader()`
5 method
6
7With urllib3 v2.6.0, `HTTPResponse.getheader()` was removed with the alternative
8being `HTTPResponse.headers`, a dictionary that can be queried with `headers.get()`
9
10See: https://github.com/urllib3/urllib3/pull/3622
11---
12 src/etcd/__init__.py | 2 +-
13 src/etcd/client.py | 2 +-
14 src/etcd/tests/unit/__init__.py | 2 +-
15 src/etcd/tests/unit/test_client.py | 6 +++---
16 src/etcd/tests/unit/test_old_request.py | 6 ------
17 src/etcd/tests/unit/test_request.py | 4 ++--
18 6 files changed, 8 insertions(+), 14 deletions(-)
19
20diff --git a/src/etcd/__init__.py b/src/etcd/__init__.py
21index d716e9b..e85918e 100644
22--- a/src/etcd/__init__.py
23+++ b/src/etcd/__init__.py
24@@ -61,7 +61,7 @@ class EtcdResult(object):
25 self.dir = True
26
27 def parse_headers(self, response):
28- headers = response.getheaders()
29+ headers = response.headers
30 self.etcd_index = int(headers.get("x-etcd-index", 1))
31 self.raft_index = int(headers.get("x-raft-index", 1))
32
33diff --git a/src/etcd/client.py b/src/etcd/client.py
34index a011757..5acea07 100644
35--- a/src/etcd/client.py
36+++ b/src/etcd/client.py
37@@ -975,7 +975,7 @@ class Client(object):
38 )
39
40 def _check_cluster_id(self, response, path):
41- cluster_id = response.getheader("x-etcd-cluster-id")
42+ cluster_id = response.headers.get("x-etcd-cluster-id")
43 if not cluster_id:
44 if self.version_prefix in path:
45 _log.warning("etcd response did not contain a cluster ID")
46diff --git a/src/etcd/tests/unit/__init__.py b/src/etcd/tests/unit/__init__.py
47index a1b95c4..43bc9b5 100644
48--- a/src/etcd/tests/unit/__init__.py
49+++ b/src/etcd/tests/unit/__init__.py
50@@ -22,7 +22,7 @@ class TestClientApiBase(unittest.TestCase):
51 r = mock.create_autospec(urllib3.response.HTTPResponse)()
52 r.status = s
53 r.data = data
54- r.getheader.return_value = cluster_id or "abcd1234"
55+ r.headers = {"x-etcd-cluster-id": cluster_id or "abcd1234"}
56 return r
57
58 def _mock_api(self, status, d, cluster_id=None):
59diff --git a/src/etcd/tests/unit/test_client.py b/src/etcd/tests/unit/test_client.py
60index 37cdee1..64b2650 100644
61--- a/src/etcd/tests/unit/test_client.py
62+++ b/src/etcd/tests/unit/test_client.py
63@@ -121,7 +121,7 @@ class TestClient(TestClientApiBase):
64 """Verify _set_version_info makes the proper call to the server"""
65 data = {"etcdserver": "2.2.3", "etcdcluster": "2.3.0"}
66 self._mock_api(200, data)
67- self.client.api_execute.return_value.getheader.return_value = None
68+ self.client.api_execute.return_value.headers = {}
69 # Create the client and make the call.
70 self.client._set_version_info()
71
72@@ -135,7 +135,7 @@ class TestClient(TestClientApiBase):
73 """Ensure the version property is set on first access."""
74 data = {"etcdserver": "2.2.3", "etcdcluster": "2.3.0"}
75 self._mock_api(200, data)
76- self.client.api_execute.return_value.getheader.return_value = None
77+ self.client.api_execute.return_value.headers = {}
78
79 # Verify the version property is set
80 self.assertEqual("2.2.3", self.client.version)
81@@ -144,7 +144,7 @@ class TestClient(TestClientApiBase):
82 """Ensure the cluster version property is set on first access."""
83 data = {"etcdserver": "2.2.3", "etcdcluster": "2.3.0"}
84 self._mock_api(200, data)
85- self.client.api_execute.return_value.getheader.return_value = None
86+ self.client.api_execute.return_value.headers = {}
87 # Verify the cluster_version property is set
88 self.assertEqual("2.3.0", self.client.cluster_version)
89
90diff --git a/src/etcd/tests/unit/test_old_request.py b/src/etcd/tests/unit/test_old_request.py
91index b660c24..f2a0410 100644
92--- a/src/etcd/tests/unit/test_old_request.py
93+++ b/src/etcd/tests/unit/test_old_request.py
94@@ -17,12 +17,6 @@ class FakeHTTPResponse(object):
95 "x-etcd-cluster-id": "abdef12345",
96 }
97
98- def getheaders(self):
99- return self.headers
100-
101- def getheader(self, header):
102- return self.headers[header]
103-
104
105 class TestClientRequest(unittest.TestCase):
106 def test_set(self):
107diff --git a/src/etcd/tests/unit/test_request.py b/src/etcd/tests/unit/test_request.py
108index 7685dca..1cb7fd1 100644
109--- a/src/etcd/tests/unit/test_request.py
110+++ b/src/etcd/tests/unit/test_request.py
111@@ -381,7 +381,7 @@ class TestClientRequest(TestClientApiInterface):
112
113 def _mock_api(self, status, d, cluster_id=None):
114 resp = self._prepare_response(status, d)
115- resp.getheader.return_value = cluster_id or "abcdef1234"
116+ resp.headers = {"x-etcd-cluster-id": cluster_id or "abcdef1234"}
117 self.client.http.request_encode_body = mock.MagicMock(return_value=resp)
118 self.client.http.request = mock.MagicMock(return_value=resp)
119
120@@ -389,7 +389,7 @@ class TestClientRequest(TestClientApiInterface):
121 resp = self._prepare_response(
122 500, {"errorCode": error_code, "message": msg, "cause": cause}
123 )
124- resp.getheader.return_value = cluster_id or "abcdef1234"
125+ resp.headers = {"x-etcd-cluster-id": cluster_id or "abcdef1234"}
126 self.client.http.request_encode_body = mock.create_autospec(
127 self.client.http.request_encode_body, return_value=resp
128 )
129--
1302.51.0
131