From 32ebf47613206aa56a8dab39f22cb7a6fc16f295 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:42:49 +0000 Subject: [PATCH 1/3] Initial plan From 77293ca3e7e49c1858099bccf674946b6186a0a0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:46:15 +0000 Subject: [PATCH 2/3] Fix RestClient proxy manager usage for proxied writes --- .../write_client/_sync/rest_client.py | 13 +++++++------ tests/test_write_api.py | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/influxdb_client_3/write_client/_sync/rest_client.py b/influxdb_client_3/write_client/_sync/rest_client.py index 76afba9..af94f43 100644 --- a/influxdb_client_3/write_client/_sync/rest_client.py +++ b/influxdb_client_3/write_client/_sync/rest_client.py @@ -8,7 +8,7 @@ import ssl import sys from typing import Dict -from urllib.parse import urlencode +from urllib.parse import urlencode, urljoin from influxdb_client_3.write_client.rest import ApiException @@ -121,7 +121,7 @@ def __init__(self, proxy_headers=proxy_headers, ssl_context=ssl_context, **addition_pool_args - ).connection_from_url(url=base_url) + ) else: self.pool_manager = urllib3.PoolManager( num_pools=pools_size, @@ -133,7 +133,7 @@ def __init__(self, key_password=cert_key_password, ssl_context=ssl_context, **addition_pool_args - ).connection_from_url(url=base_url) + ) def request(self, method, url, query_params=None, headers=None, body=None, timeout=None, **urlopen_kw): @@ -152,8 +152,9 @@ def request(self, method, url, query_params=None, headers=None, :meth:`urllib3.request.RequestMethods.request` """ + request_url = url if url.startswith(("http://", "https://")) else urljoin(self.base_url, url) if query_params: - url += '?' + urlencode(query_params) + request_url += '?' + urlencode(query_params) merged_headers = {} if self.default_header: @@ -164,13 +165,13 @@ def request(self, method, url, query_params=None, headers=None, effective_timeout = timeout if timeout is not None else self.timeout if self.debug: - RestClient.log_request(method, url) + RestClient.log_request(method, request_url) RestClient.log_headers(merged_headers, '>>>') RestClient.log_body(body, '>>>') try: r = self.pool_manager.request( - method, url, + method, request_url, body=body, headers=merged_headers, timeout=effective_timeout, diff --git a/tests/test_write_api.py b/tests/test_write_api.py index 7c04385..314fecd 100644 --- a/tests/test_write_api.py +++ b/tests/test_write_api.py @@ -11,6 +11,7 @@ from influxdb_client_3 import InfluxDBClient3, InfluxDBError from influxdb_client_3.exceptions import InfluxDBPartialWriteError from influxdb_client_3.version import VERSION +from influxdb_client_3.write_client._sync.rest_client import RestClient from influxdb_client_3.write_client.rest import ApiException _package = "influxdb3-python" @@ -295,6 +296,21 @@ def test_request_arg_timeout(self, mock_request): self.assertEqual(0.1, self.received_timeout_total) self.received_timeout_total = None + @mock.patch("influxdb_client_3.write_client._sync.rest_client.urllib3.ProxyManager") + def test_rest_client_proxy_uses_proxy_manager_instance(self, proxy_manager_cls): + manager = mock.Mock() + manager.request.return_value = response.HTTPResponse(status=200, reason='OK', body=b'') + proxy_manager_cls.return_value = manager + + rest = RestClient(base_url='http://localhost:8181', proxy='http://proxy:3128') + self.assertIs(rest.pool_manager, manager) + + rest.request(method='GET', url='/ping') + + manager.request.assert_called_once() + args, _ = manager.request.call_args + self.assertEqual(('GET', 'http://localhost:8181/ping'), args[:2]) + def test_should_gzip(self): client = InfluxDBClient3( host='http://localhost:8181', From 00596e0e26a694cbd138125dfacb9efb11a81f1a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:48:22 +0000 Subject: [PATCH 3/3] Preserve proxy manager behavior in RestClient requests --- influxdb_client_3/write_client/_sync/rest_client.py | 1 + tests/test_write_api.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/influxdb_client_3/write_client/_sync/rest_client.py b/influxdb_client_3/write_client/_sync/rest_client.py index af94f43..3516029 100644 --- a/influxdb_client_3/write_client/_sync/rest_client.py +++ b/influxdb_client_3/write_client/_sync/rest_client.py @@ -152,6 +152,7 @@ def request(self, method, url, query_params=None, headers=None, :meth:`urllib3.request.RequestMethods.request` """ + # Keep support for absolute URLs while constructing full URLs for relative paths. request_url = url if url.startswith(("http://", "https://")) else urljoin(self.base_url, url) if query_params: request_url += '?' + urlencode(query_params) diff --git a/tests/test_write_api.py b/tests/test_write_api.py index 314fecd..a1fe40a 100644 --- a/tests/test_write_api.py +++ b/tests/test_write_api.py @@ -299,7 +299,7 @@ def test_request_arg_timeout(self, mock_request): @mock.patch("influxdb_client_3.write_client._sync.rest_client.urllib3.ProxyManager") def test_rest_client_proxy_uses_proxy_manager_instance(self, proxy_manager_cls): manager = mock.Mock() - manager.request.return_value = response.HTTPResponse(status=200, reason='OK', body=b'') + manager.request.return_value = response.HTTPResponse(status=200, reason='OK', headers={}, body=b'') proxy_manager_cls.return_value = manager rest = RestClient(base_url='http://localhost:8181', proxy='http://proxy:3128')