2020import msgpack
2121import requests
2222import requests .exceptions
23+ from requests .adapters import HTTPAdapter
2324from six .moves .urllib .parse import urlparse
2425
2526from influxdb .line_protocol import make_lines , quote_ident , quote_literal
@@ -87,6 +88,10 @@ class InfluxDBClient(object):
8788 :param headers: headers to add to Requests, will add 'Content-Type'
8889 and 'Accept' unless these are already present, defaults to {}
8990 :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+
9095 :raises ValueError: if cert is provided but ssl is disabled (set to False)
9196 """
9297
@@ -109,6 +114,7 @@ def __init__(self,
109114 gzip = False ,
110115 session = None ,
111116 headers = None ,
117+ socket_options = None ,
112118 ):
113119 """Construct a new InfluxDBClient object."""
114120 self .__host = host
@@ -128,9 +134,10 @@ def __init__(self,
128134 session = requests .Session ()
129135
130136 self ._session = session
131- adapter = requests . adapters . HTTPAdapter (
137+ adapter = SocketOptionsAdapter (
132138 pool_connections = int (pool_size ),
133- pool_maxsize = int (pool_size )
139+ pool_maxsize = int (pool_size ),
140+ socket_options = socket_options
134141 )
135142
136143 if use_udp :
@@ -626,7 +633,7 @@ def _batches(iterable, size):
626633 # http://code.activestate.com/recipes/303279-getting-items-in-batches/
627634 iterator = iter (iterable )
628635 while True :
629- try : # Try get the first element in the iterator...
636+ try : # Try get the first element in the iterator...
630637 head = (next (iterator ),)
631638 except StopIteration :
632639 return # ...so that we can stop if there isn't one
@@ -1249,3 +1256,14 @@ def _msgpack_parse_hook(code, data):
12491256 timestamp += datetime .timedelta (microseconds = (epoch_ns / 1000 ))
12501257 return timestamp .isoformat () + 'Z'
12511258 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