Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions influxdb_client_3/write_client/_sync/rest_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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,
Expand All @@ -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):
Expand All @@ -152,8 +152,10 @@ 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:
url += '?' + urlencode(query_params)
request_url += '?' + urlencode(query_params)

merged_headers = {}
if self.default_header:
Expand All @@ -164,13 +166,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,
Expand Down
16 changes: 16 additions & 0 deletions tests/test_write_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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', headers={}, 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',
Expand Down