1313# permissions and limitations under the License.
1414
1515import contextlib
16+ import copy
1617import os
1718import platform
1819import socket
@@ -280,15 +281,15 @@ class PoolOptions(object):
280281 '__connect_timeout' , '__socket_timeout' ,
281282 '__wait_queue_timeout' , '__wait_queue_multiple' ,
282283 '__ssl_context' , '__ssl_match_hostname' , '__socket_keepalive' ,
283- '__event_listeners' , '__appname' , '__metadata' ,
284+ '__event_listeners' , '__appname' , '__driver' , ' __metadata' ,
284285 '__compression_settings' )
285286
286287 def __init__ (self , max_pool_size = 100 , min_pool_size = 0 ,
287288 max_idle_time_seconds = None , connect_timeout = None ,
288289 socket_timeout = None , wait_queue_timeout = None ,
289290 wait_queue_multiple = None , ssl_context = None ,
290291 ssl_match_hostname = True , socket_keepalive = True ,
291- event_listeners = None , appname = None ,
292+ event_listeners = None , appname = None , driver = None ,
292293 compression_settings = None ):
293294
294295 self .__max_pool_size = max_pool_size
@@ -303,11 +304,31 @@ def __init__(self, max_pool_size=100, min_pool_size=0,
303304 self .__socket_keepalive = socket_keepalive
304305 self .__event_listeners = event_listeners
305306 self .__appname = appname
307+ self .__driver = driver
306308 self .__compression_settings = compression_settings
307- self .__metadata = _METADATA . copy ( )
309+ self .__metadata = copy . deepcopy ( _METADATA )
308310 if appname :
309311 self .__metadata ['application' ] = {'name' : appname }
310312
313+ # Combine the "driver" MongoClient option with PyMongo's info, like:
314+ # {
315+ # 'driver': {
316+ # 'name': 'PyMongo|MyDriver',
317+ # 'version': '3.7.0|1.2.3',
318+ # },
319+ # 'platform': 'CPython 3.6.0|MyPlatform'
320+ # }
321+ if driver :
322+ if driver .name :
323+ self .__metadata ['driver' ]['name' ] = "%s|%s" % (
324+ _METADATA ['driver' ]['name' ], driver .name )
325+ if driver .version :
326+ self .__metadata ['driver' ]['version' ] = "%s|%s" % (
327+ _METADATA ['driver' ]['version' ], driver .version )
328+ if driver .platform :
329+ self .__metadata ['platform' ] = "%s|%s" % (
330+ _METADATA ['platform' ], driver .platform )
331+
311332 @property
312333 def max_pool_size (self ):
313334 """The maximum allowable number of concurrent connections to each
@@ -395,6 +416,12 @@ def appname(self):
395416 """
396417 return self .__appname
397418
419+ @property
420+ def driver (self ):
421+ """Driver name and version, for sending with ismaster in handshake.
422+ """
423+ return self .__driver
424+
398425 @property
399426 def compression_settings (self ):
400427 return self .__compression_settings
0 commit comments