From 4158db16208d9f15639fe839d29ad3ae235c3674 Mon Sep 17 00:00:00 2001 From: dr-rompecabezas Date: Wed, 5 Mar 2025 16:27:01 -0500 Subject: [PATCH 1/3] Simplify Docker IP determination in middleware.py - Updated `show_toolbar` function in `debug_toolbar/middleware.py` to use `gateway.docker.internal` for Docker IP determination. - Updated `docs/changes.rst` to reflect the change. #2076 --- debug_toolbar/middleware.py | 6 +----- docs/changes.rst | 1 + 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index 598ff3eef..50edd9d5b 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -36,11 +36,7 @@ def show_toolbar(request): # This is a hack for docker installations. It attempts to look # up the IP address of the docker host. # This is not guaranteed to work. - docker_ip = ( - # Convert the last segment of the IP address to be .1 - ".".join(socket.gethostbyname("host.docker.internal").rsplit(".")[:-1]) - + ".1" - ) + docker_ip = docker_ip = socket.gethostbyname('gateway.docker.internal') if request.META.get("REMOTE_ADDR") == docker_ip: return True except socket.gaierror: diff --git a/docs/changes.rst b/docs/changes.rst index 608843e0f..f8fda5948 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -15,6 +15,7 @@ Pending * Added a Makefile target (``make help``) to get a quick overview of each target. * Avoided reinitializing the staticfiles storage during instrumentation. +* Simplify Docker IP determination by using gateway IP. 5.0.1 (2025-01-13) ------------------ From f98419e8c30d3795f2e234f44a09473c076dda84 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 21:46:16 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- debug_toolbar/middleware.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index 50edd9d5b..8531193e5 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -36,7 +36,7 @@ def show_toolbar(request): # This is a hack for docker installations. It attempts to look # up the IP address of the docker host. # This is not guaranteed to work. - docker_ip = docker_ip = socket.gethostbyname('gateway.docker.internal') + docker_ip = docker_ip = socket.gethostbyname("gateway.docker.internal") if request.META.get("REMOTE_ADDR") == docker_ip: return True except socket.gaierror: From 34af476741dc101a9db28b086838f1f9a051cc63 Mon Sep 17 00:00:00 2001 From: dr-rompecabezas Date: Wed, 5 Mar 2025 21:09:45 -0500 Subject: [PATCH 3/3] Update tests to use new Docker gateway IP - Changed the mocked return value of `socket.gethostbyname` to `192.168.65.1` in both `test_integration.py` and `test_integration_async.py`. - Updated the expected call argument to `gateway.docker.internal`. - Hardcoded the `REMOTE_ADDR` value to match the mocked return value. Additionally, removed the duplicate variable assignment in `debug_toolbar/middleware.py`. --- debug_toolbar/middleware.py | 2 +- tests/test_integration.py | 7 +++---- tests/test_integration_async.py | 7 +++---- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index 8531193e5..466e62bd4 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -36,7 +36,7 @@ def show_toolbar(request): # This is a hack for docker installations. It attempts to look # up the IP address of the docker host. # This is not guaranteed to work. - docker_ip = docker_ip = socket.gethostbyname("gateway.docker.internal") + docker_ip = socket.gethostbyname("gateway.docker.internal") if request.META.get("REMOTE_ADDR") == docker_ip: return True except socket.gaierror: diff --git a/tests/test_integration.py b/tests/test_integration.py index 3cc0b1420..da41be85e 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -67,13 +67,12 @@ def test_show_toolbar_INTERNAL_IPS(self): with self.settings(INTERNAL_IPS=[]): self.assertFalse(show_toolbar(self.request)) - @patch("socket.gethostbyname", return_value="127.0.0.255") + @patch("socket.gethostbyname", return_value="192.168.65.1") def test_show_toolbar_docker(self, mocked_gethostbyname): with self.settings(INTERNAL_IPS=[]): - # Is true because REMOTE_ADDR is 127.0.0.1 and the 255 - # is shifted to be 1. + self.request.META["REMOTE_ADDR"] = "192.168.65.1" self.assertTrue(show_toolbar(self.request)) - mocked_gethostbyname.assert_called_once_with("host.docker.internal") + mocked_gethostbyname.assert_called_once_with("gateway.docker.internal") def test_not_iterating_over_INTERNAL_IPS(self): """Verify that the middleware does not iterate over INTERNAL_IPS in some way. diff --git a/tests/test_integration_async.py b/tests/test_integration_async.py index c6fb88ca5..4fd116e6a 100644 --- a/tests/test_integration_async.py +++ b/tests/test_integration_async.py @@ -54,13 +54,12 @@ async def test_show_toolbar_INTERNAL_IPS(self): with self.settings(INTERNAL_IPS=[]): self.assertFalse(show_toolbar(self.request)) - @patch("socket.gethostbyname", return_value="127.0.0.255") + @patch("socket.gethostbyname", return_value="192.168.65.1") async def test_show_toolbar_docker(self, mocked_gethostbyname): with self.settings(INTERNAL_IPS=[]): - # Is true because REMOTE_ADDR is 127.0.0.1 and the 255 - # is shifted to be 1. + self.request.META["REMOTE_ADDR"] = "192.168.65.1" self.assertTrue(show_toolbar(self.request)) - mocked_gethostbyname.assert_called_once_with("host.docker.internal") + mocked_gethostbyname.assert_called_once_with("gateway.docker.internal") async def test_not_iterating_over_INTERNAL_IPS(self): """