20
20
import msgpack
21
21
import requests
22
22
import requests .exceptions
23
+ from requests .adapters import HTTPAdapter
23
24
from six .moves .urllib .parse import urlparse
24
25
25
26
from influxdb .line_protocol import make_lines , quote_ident , quote_literal
@@ -87,6 +88,10 @@ class InfluxDBClient(object):
87
88
:param headers: headers to add to Requests, will add 'Content-Type'
88
89
and 'Accept' unless these are already present, defaults to {}
89
90
:type headers: dict
91
+ :param socket_options: use custom tcp socket options, If not specified, then defaults are loaded from
92
+ ``HTTPConnection.default_socket_options``
93
+ :type socket_options: list
94
+
90
95
:raises ValueError: if cert is provided but ssl is disabled (set to False)
91
96
"""
92
97
@@ -109,6 +114,7 @@ def __init__(self,
109
114
gzip = False ,
110
115
session = None ,
111
116
headers = None ,
117
+ socket_options = None ,
112
118
):
113
119
"""Construct a new InfluxDBClient object."""
114
120
self .__host = host
@@ -128,9 +134,10 @@ def __init__(self,
128
134
session = requests .Session ()
129
135
130
136
self ._session = session
131
- adapter = requests . adapters . HTTPAdapter (
137
+ adapter = SocketOptionsAdapter (
132
138
pool_connections = int (pool_size ),
133
- pool_maxsize = int (pool_size )
139
+ pool_maxsize = int (pool_size ),
140
+ socket_options = socket_options
134
141
)
135
142
136
143
if use_udp :
@@ -626,7 +633,7 @@ def _batches(iterable, size):
626
633
# http://code.activestate.com/recipes/303279-getting-items-in-batches/
627
634
iterator = iter (iterable )
628
635
while True :
629
- try : # Try get the first element in the iterator...
636
+ try : # Try get the first element in the iterator...
630
637
head = (next (iterator ),)
631
638
except StopIteration :
632
639
return # ...so that we can stop if there isn't one
@@ -1249,3 +1256,14 @@ def _msgpack_parse_hook(code, data):
1249
1256
timestamp += datetime .timedelta (microseconds = (epoch_ns / 1000 ))
1250
1257
return timestamp .isoformat () + 'Z'
1251
1258
return msgpack .ExtType (code , data )
1259
+
1260
+
1261
+ class SocketOptionsAdapter (HTTPAdapter ):
1262
+ def __init__ (self , * args , ** kwargs ):
1263
+ self .socket_options = kwargs .pop ("socket_options" , None )
1264
+ super (SocketOptionsAdapter , self ).__init__ (* args , ** kwargs )
1265
+
1266
+ def init_poolmanager (self , * args , ** kwargs ):
1267
+ if self .socket_options is not None :
1268
+ kwargs ["socket_options" ] = self .socket_options
1269
+ super (SocketOptionsAdapter , self ).init_poolmanager (* args , ** kwargs )
0 commit comments