Ë
    Ü_ËiËì  ã                  óÎ  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZmZmZmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+ d d	l,m-Z-m.Z. d d
l/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z: d dl;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZDmEZE d dlFmGZG d dlHmIZI d dlJmKZK d dlLmMZM d dlNmOZO d dlPmQZQ d dlRmSZS erLd dlmTZT d dlUmVZV d dlWmXZXmYZYmZZZ d dl[m\Z\m]Z] d dl^m_Z_ d dlFm`Z` d dlambZb d dlNmcZc d dldmeZemfZf d d lgmhZhmiZi d d!ljmkZk d"Zl G d#„ d$«      Zm G d%„ d&e'«      Zn G d'„ d(«      Zo G d)„ d*«      Zp G d+„ d,«      Zqy)-é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚ	GeneratorÚMappingÚMutableMappingÚNoReturnÚOptionalÚSequenceÚUnion)ÚDEFAULT_CODEC_OPTIONS)Ú_csotÚhelpers_shared)ÚMAX_BSON_SIZEÚMAX_MESSAGE_SIZEÚMAX_WIRE_VERSIONÚMAX_WRITE_BATCH_SIZEÚORDERED_TYPES)	ÚAutoReconnectÚConfigurationErrorÚDocumentTooLargeÚExecutionTimeoutÚInvalidOperationÚNotPrimaryErrorÚOperationFailureÚPyMongoErrorÚWaitQueueTimeoutError)ÚHelloÚHelloCompat)Ú_get_timeout_detailsÚformat_timeout_details)Ú
_cond_waitÚ_create_conditionÚ_create_lock)Ú_CONNECTION_LOGGERÚ_ConnectionStatusMessageÚ
_debug_logÚ _verbose_connection_error_reason)ÚConnectionCheckOutFailedReasonÚConnectionClosedReason)ÚNetworkingInterfaceÚreceive_messageÚsendall)ÚPoolOptions)Ú	SSLErrorsÚ_CancellationContextÚ_configured_socket_interfaceÚ_raise_connection_failure)ÚReadPreference)Ú_add_to_command)ÚSERVER_TYPE)ÚSocketChecker)Ú_validate_session_write_concern)Ú_handle_reauth)Úcommand)ÚCodecOptions)ÚObjectId)ÚSnappyContextÚZlibContextÚZstdContext)Ú_OpMsgÚ_OpReply)ÚReadConcern)Ú_ServerMode)Ú_AuthContext)ÚClientSession)ÚMongoClientÚ_MongoClientErrorHandler)Ú_AddressÚ_CollationIn)ÚWriteConcernTc                  óà  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d$d„Zd%d„Z	 	 	 	 	 	 d&d„Zd'd„Zd'd„Zd'd„Z	d(d„Z
d)d	„Z	 	 	 	 	 	 d*d
„Zd(d„Zeej                   eddddddddddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+d„«       Zd,d„Zd-d„Zd.d„Zd/d„Z	 	 	 	 	 	 	 	 d0d„Zd1d2d„Z	 	 	 	 	 	 d3d„Zd4d„Zd'd„Zd5d„Z	 	 	 	 	 	 	 	 d6d„Zd7d„Zd'd„Zd8d„Z d9d„Z!d:d„Z"d;d „Z#d;d!„Z$d<d"„Z%d=d#„Z&y)>Ú
Connectiona  Store a connection with some metadata.

    :param conn: a raw connection object
    :param pool: a Pool instance
    :param address: the server's (host, port)
    :param id: the id of this socket in it's pool
    :param is_sdam: SDAM connections do not call hello on creation
    c                ó
  — t        j                  |«      | _        || _        || _        || _        || _        d| _        t        j                  «       | _
        d| _        d| _        t        | _        t        | _        t"        | _        t&        | _        d| _        d| _        d| _        d| _        |j2                  j4                  | _        |j8                  | _        |j:                  | _        |j2                  j<                  | _        d | _         tC        «       | _"        d | _#        d | _$        d | _%        |jL                  | _'        | jN                  jQ                  «       | _)        d| _*        tW        «       | _,        |j2                  | _        d| _-        d | _.        d | _/        d| _0        d| _1        d| _2        | j2                  jf                  | _4        d| _5        |jl                  | _6        t        j                  «       | _7        d | _8        y )NFg        )9ÚweakrefÚrefÚpool_refÚconnÚaddressÚidÚis_sdamÚclosedÚtimeÚ	monotonicÚlast_checkin_timeÚperformed_handshakeÚis_writabler   Úmax_wire_versionr   Úmax_bson_sizer   Úmax_message_sizer   Úmax_write_batch_sizeÚsupports_sessionsÚhello_okÚ	is_mongosÚop_msg_enabledÚoptsÚ_event_listenersÚ	listenersÚenabled_for_cmapÚenabled_for_loggingÚ_compression_settingsÚcompression_settingsÚcompression_contextr6   Úsocket_checkerÚoidc_token_gen_idÚnegotiated_mechsÚauth_ctxÚgenÚpool_genÚget_overallÚ
generationÚreadyr0   Úcancel_contextÚmore_to_comeÚ
service_idÚserver_connection_idÚ
pinned_txnÚpinned_cursorÚactiveÚsocket_timeoutÚlast_timeoutÚconnect_rttÚ
_client_idÚcreation_timeÚ_cluster_time)ÚselfrP   ÚpoolrQ   rR   rS   s         ú[/var/www/pod-logistic/pod-api/venv/lib/python3.12/site-packages/pymongo/synchronous/pool.pyÚ__init__zConnection.__init__y   s¥  € ô  Ÿ™ DÓ)ˆŒØˆŒ	ØˆŒØˆŒØˆŒØˆŒÜ!%§¡Ó!1ˆÔØ#(ˆÔ Ø!&ˆÔÜ 0ˆÔÜ*ˆÔÜ 0ˆÔÜ$8ˆÔ!Ø!&ˆÔØ#ˆŒØˆŒØ#ˆÔØŸ™×3Ñ3ˆŒØ $× 5Ñ 5ˆÔØ#'×#;Ñ#;ˆÔ Ø$(§I¡I×$CÑ$CˆÔ!ØY]ˆÔ Ü-:«_ˆÔØ04ˆÔà59ˆÔØ04ˆŒð Ÿ™ˆŒØŸ-™-×3Ñ3Ó5ˆŒØˆŒ
Ü4HÓ4JˆÔØ—I‘IˆŒ	Ø"'ˆÔà.2ˆŒØ37ˆÔ!ð  ˆŒØ"ˆÔØˆŒØ ŸI™I×4Ñ4ˆÔØˆÔØŸ/™/ˆŒÜ!Ÿ^™^Ó-ˆÔà!ˆÕó    c                ó|   — || j                   k(  ry|| _         | j                  j                  j                  |«       y)z?Cache last timeout to avoid duplicate calls to conn.settimeout.N)r{   rP   Úget_connÚ
settimeout)r€   Útimeouts     r‚   Úset_conn_timeoutzConnection.set_conn_timeout´   s3   € à�d×'Ñ'Ò'ØØ#ˆÔØ�	‰	×Ñ×%Ñ% gÕ.r„   c                óÈ  — t        j                  «       }|€2| j                  s%| j                  | j                  j
                  «       y t        j                  «       }|€| j                  }||z
  }|dk  rIt        | j                  «      }t        |«      }d|d›d|d›d|› �}t        |dd|ddœ| j                  «      ‚|�t        |dz  «      |d	<   | j                  |«       |S )
Nr   z5operation would exceed time limit, remaining timeout:z.5fz <= network round trip time:ú é2   ©ÚokÚerrmsgÚcodeéè  Ú	maxTimeMS)r   Ú	remainingrt   r‰   rb   rz   Úget_rttr|   r    r!   r   rZ   Úint)	r€   ÚclientÚcmdrˆ   ÚrttÚmax_time_msÚtimeout_detailsÚ	formattedr�   s	            r‚   Úapply_timeoutzConnection.apply_timeout»   sÿ   € ô —/‘/Ó#ˆØˆ?à×$Ò$Ø×%Ñ% d§i¡i×&>Ñ&>Ô?Øä�m‰m‹oˆØˆ;Ø×"Ñ"ˆCØ ‘mˆØ˜Š?Ü2°4·9±9Ó=ˆOÜ.¨Ó?ˆIàLÈWÐUXÈMÐYuÐvyÐz}Ðu~Ð~ð  AJð  @Kð  LˆFÜ"ØØØ F°BÑ7Ø×%Ñ%ó	ð ð ˆ?Ü" ;°Ñ#5Ó6ˆC�ÑØ×Ñ˜gÔ&Øˆr„   c                ó.   — d| _         | j                  rJ ‚y ©NT)rw   rx   ©r€   s    r‚   Úpin_txnzConnection.pin_txnÚ   s   € ØˆŒØ×%Ò%Ð%Ð%Ð%r„   c                ó.   — d| _         | j                  rJ ‚y rž   )rx   rw   rŸ   s    r‚   Ú
pin_cursorzConnection.pin_cursorÞ   s   € Ø!ˆÔØ—?’?Ð"Ð"�?r„   c                óŠ   — | j                  «       }|r|j                  | «       y | j                  t        j                  «       y ©N)rO   ÚcheckinÚ
close_connr*   ÚSTALE)r€   r�   s     r‚   ÚunpinzConnection.unpinâ   s/   € Ø�}‰}‹ˆÙØ�L‰L˜Õà�O‰OÔ2×8Ñ8Õ9r„   c                óÌ   — | j                   j                  s"| j                  s| j                   j                  rd| _        t
        j                  diS t
        j                  dddiS )NTé   ÚhelloOk)rb   Ú
server_apir_   Úload_balancedra   r   ÚCMDÚ
LEGACY_CMDrŸ   s    r‚   Ú	hello_cmdzConnection.hello_cmdé   sO   € ð �9‰9×Ò 4§=¢=°D·I±I×4KÒ4KØ"&ˆDÔÜ—O‘O QÐ'Ð'ä×*Ñ*¨A¨y¸$Ð?Ð?r„   c                ó&   — | j                  d d «      S r¤   )Ú_hellorŸ   s    r‚   ÚhellozConnection.helloò   s   € Ø�{‰{˜4 Ó&Ð&r„   c                ó  — | j                  «       }| j                   }d}|rad| _        | j                  j                  |d<   | j                  r| j                  j
                  |d<   | j                  j                  rbd|d<   n\|�Z||d<   |€J ‚t        |dz  «      |d<   d}| j                  j                  r(| j                  | j                  j                  |z   «       | j                  j                  }|r€|j                  d	k(  r+|j                  r|j                  d
z   |j                  z   |d<   ddlm} |j                   j#                  || j$                  «      }|r|j'                  «       }	|	�|	|d<   nd }|rt)        j*                  «       }
| j-                  d|d|¬«      }|rt)        j*                  «       
z
  | _        t1        ||¬«      }|j2                  | _        |j4                  | _        |j6                  | _        |j8                  | _        |j:                  | _        |j<                  d uxr |j>                  | _         |j<                  | _        |jB                  | _!        |jD                  tF        jH                  tF        jJ                  tF        jL                  tF        jN                  tF        jP                  fv | _)        |jD                  tF        jT                  k(  | _+        |jD                  tF        jX                  k(  | _-        |r8| j                  r,| j                  j]                  |j
                  «      }|| _/        d| _0        |jb                  | _2        |r|jf                  | _4        |r(|jk                  |«       |jm                  «       r|| _7        | j                  j                  rR|jp                  sts        d«      ‚|jp                  | _8        | jt                  jw                  | jp                  «      | _<        |S )NFTr–   ÚcompressionÚloadBalancedÚtopologyVersionr‘   ÚmaxAwaitTimeMSÚDEFAULTú.ÚsaslSupportedMechsr   ©ÚauthÚspeculativeAuthenticateÚadmin)Úpublish_eventsÚexhaust_allowed)Ú	awaitablez`Driver attempted to initialize in load balancing mode, but the server does not support this mode)=r°   rX   rb   Úmetadatarh   Úcompressorsr­   r•   Úconnect_timeoutr‰   Ú_credentialsÚ	mechanismÚusernameÚsourceÚpymongo.synchronousr½   rC   Úfrom_credentialsrQ   Úspeculate_commandrU   rV   r9   r|   r   rY   rZ   r[   r\   r]   Úlogical_session_timeout_minutesÚis_readabler^   r_   Úserver_typer5   Ú	RSPrimaryÚRSSecondaryÚ	RSArbiterÚRSOtherÚRSGhostÚis_replÚ
StandaloneÚis_standaloneÚMongosr`   Úget_compression_contextri   ra   Úconnection_idrv   Úsasl_supported_mechsrl   Úparse_responseÚspeculate_succeededrm   ru   r   ro   Úgetrq   )r€   Útopology_versionÚheartbeat_frequencyr—   Úperforming_handshakerÂ   Úcredsr½   rm   Úspeculative_authenticateÚstartÚdocr³   Úctxs                 r‚   r²   zConnection._helloõ   sv  € ð
 �n‰nÓˆØ#'×#;Ñ#;Ð;ÐØˆ	ÙØ'+ˆDÔ$Ø ŸI™I×.Ñ.ˆC�‰MØ×(Ò(Ø%)×%>Ñ%>×%JÑ%J��MÑ"Ø�y‰y×&Ò&Ø&*��NÒ#ØÐ)Ø%5ˆCÐ!Ñ"Ø&Ð2Ð2Ð2Ü$'Ð(;¸dÑ(BÓ$CˆCÐ Ñ!ØˆIà�y‰y×(Ò(Ø×%Ñ% d§i¡i×&?Ñ&?ÐBUÑ&UÔVà—	‘	×&Ñ&ˆÙØ�‰ )Ò+°·²Ø,1¯L©L¸3Ñ,>ÀÇÁÑ,O�Ð(Ñ)Ý0à×(Ñ(×9Ñ9¸%ÀÇÁÓNˆHÙØ+3×+EÑ+EÓ+GÐ(Ø+Ð7Ø5M�CÐ1Ò2àˆHáÜ—N‘NÓ$ˆEØ�l‰l˜7 C¸ÈyˆlÓYˆÙÜ#Ÿ~™~Ó/°%Ñ7ˆDÔÜ�c YÔ/ˆØ ×,Ñ,ˆÔØ %× 6Ñ 6ˆÔØ"×0Ñ0ˆÔØ %× 6Ñ 6ˆÔØ$)×$>Ñ$>ˆÔ!à×1Ñ1¸Ð=ÒSÀ%×BSÑBSð 	Ôð ?D×>cÑ>cˆÔ,ØŸ™ˆŒØ×(Ñ(Ü×!Ñ!Ü×#Ñ#Ü×!Ñ!Ü×ÑÜ×Ñð-
ð 
ˆŒð #×.Ñ.´+×2HÑ2HÑHˆÔØ×*Ñ*¬k×.@Ñ.@Ñ@ˆŒÙ D×$=Ò$=Ø×+Ñ+×CÑCÀE×DUÑDUÓVˆCØ'*ˆDÔ$à"ˆÔØ$)×$7Ñ$7ˆÔ!ÙØ$)×$>Ñ$>ˆDÔ!ÙØ×#Ñ# EÔ*Ø×+Ñ+Ô-Ø (�”Ø�9‰9×"Ò"Ø×#Ò#Ü(ðAóð ð $×.Ñ.ˆDŒOØ"Ÿm™m×/Ñ/°·±Ó@ˆDŒOØˆr„   c                ó´   — | j                  d «      }|j                  | _        |j                  «       }|d   }t        j                  || j
                  «       |S ©Nr   )r,   rt   Úunpack_responser   Ú_check_command_responserZ   )r€   ÚreplyÚunpacked_docsÚresponse_docs       r‚   Ú_next_replyzConnection._next_replyJ  sT   € Ø×$Ñ$ TÓ*ˆØ!×.Ñ.ˆÔØ×-Ñ-Ó/ˆØ$ QÑ'ˆÜ×.Ñ.¨|¸T×=RÑ=RÔSØÐr„   TNFc                óÀ  — | j                  ||«       t        ||«      }t        |t        «      st	        |«      }|�|j
                  s|
�t        d«      ‚| j                  |«       |r|j                  |||| «       | j                  |||«       |r| j                  nd}t        |xr |j
                   «      }| j                  r| j                  |«       	 t        | ||| j                  ||||||| j                   || j"                  ||	|
| j$                  | j                  ||||¬«      S # t&        t(        f$ r ‚ t*        $ r}| j-                  |«       Y d}~yd}~ww xY w)a­  Execute a command or raise an error.

        :param dbname: name of the database on which to run the command
        :param spec: a command document as a dict, SON, or mapping object
        :param read_preference: a read preference
        :param codec_options: a CodecOptions instance
        :param check: raise OperationFailure if there are errors
        :param allowable_errors: errors to ignore if `check` is True
        :param read_concern: The read concern for this command.
        :param write_concern: The write concern for this command.
        :param parse_write_concern_error: Whether to parse the
            ``writeConcernError`` field in the command response.
        :param collation: The collation for this command.
        :param session: optional ClientSession instance.
        :param client: optional MongoClient for gossipping $clusterTime.
        :param retryable_write: True if this command is a retryable write.
        :param publish_events: Should we publish events for this command?
        :param user_fields: Response fields that should be decoded
            using the TypeDecoders from codec_options, passed to
            bson._decode_all_selective.
        Nz3Collation is unsupported for unacknowledged writes.)Úparse_write_concern_errorÚ	collationÚcompression_ctxÚ
use_op_msgÚunacknowledgedÚuser_fieldsrÁ   Úwrite_concern)Úvalidate_sessionr7   Ú
isinstancer   ÚdictÚacknowledgedr   Úadd_server_apiÚ	_apply_toÚsend_cluster_timerd   Úboolra   Ú_raise_if_not_writabler9   r`   rQ   r[   ri   r   r   ÚBaseExceptionr2   )r€   ÚdbnameÚspecÚread_preferenceÚcodec_optionsÚcheckÚallowable_errorsÚread_concernrö   rð   rñ   Úsessionr–   Úretryable_writerÀ   rõ   rÁ   rd   rô   Úerrors                       r‚   r9   zConnection.commandR  si  € ðR 	×Ñ˜f gÔ.Ü1°'¸=ÓIˆô ˜$¤Ô.Ü˜“:ˆDàÐ%¨×)CÒ)CÀyÐGXÜ$Ð%ZÓ[Ð[à×Ñ˜DÔ!ÙØ×Ñ˜d O°_ÀdÔKØ×Ñ˜t W¨fÔ5Ù&4�D—N’N¸$ˆ	Ü˜mÒN°M×4NÑ4NÐ0NÓOˆØ×ÒØ×'Ñ'¨Ô7ð	2ÜØØØØ—‘ØØØØØØ Ø—‘ØØ×"Ñ"ØØ*CØ#Ø $× 8Ñ 8Ø×.Ñ.Ø-Ø'Ø /Ø+ô-ð øô0 !¤/Ð2ò 	Øäò 	2Ø×*Ñ*¨5×1Ñ1ûð	2ús   ÃAD* Ä*EÅEÅEc                óþ   — | j                   �)|| j                   kD  rt        d|| j                   fz  «      ‚	 t        | j                  j                  |«       y# t
        $ r}| j                  |«       Y d}~yd}~ww xY w)z}Send a raw BSON message or raise ConnectionFailure.

        If a network exception is raised, the socket is closed.
        NzfBSON document too large (%d bytes) - the connected server supports BSON document sizes up to %d bytes.)r[   r   r-   rP   r†   r   r2   )r€   ÚmessageÚmax_doc_sizer
  s       r‚   Úsend_messagezConnection.send_message¬  s~   € ð
 ×ÑÐ)¨l¸T×=OÑ=OÒ.OÜ"ð?ØBNÐPT×PbÑPbÐAcñdóð ð
	2Ü�D—I‘I×&Ñ&¨Õ0øäò 	2Ø×*Ñ*¨5×1Ñ1ûð	2ús   · A Á	A<Á!A7Á7A<c                ó€   — 	 t        | || j                  «      S # t        $ r}| j                  |«       Y d}~yd}~ww xY w)zzReceive a raw BSON message or raise ConnectionFailure.

        If any exception is raised, the socket is closed.
        N)r,   r\   r   r2   )r€   Ú
request_idr
  s      r‚   r,   zConnection.receive_message½  s=   € ð
	2Ü" 4¨°T×5JÑ5JÓKÐKøäò 	2Ø×*Ñ*¨5×1Ñ1ûð	2ús   ‚ ™	=¢8¸=c                óB   — |r| j                   st        dddddœ«      ‚yy)z^Raise NotPrimaryError on unacknowledged write if this socket is not
        writable.
        znot primaryr   i{'  r�   N)rY   r   )r€   rô   s     r‚   rÿ   z!Connection._raise_if_not_writableÈ  s+   € ñ  $×"2Ò"2ä! -¸À]Ð\aÑ1bÓcÐcð #3ˆ>r„   c                óJ   — | j                  d«       | j                  ||«       y)zÐSend unack OP_MSG.

        Can raise ConnectionFailure or InvalidDocument.

        :param msg: bytes, an OP_MSG message.
        :param max_doc_size: size in bytes of the largest document in `msg`.
        TN)rÿ   r  )r€   Úmsgr  s      r‚   Úunack_writezConnection.unack_writeÐ  s"   € ð 	×#Ñ# DÔ)Ø×Ñ˜#˜|Õ,r„   c                ó®   — | j                  |d«       | j                  |«      }|j                  |«      }t        j                  || j
                  «       |S )zÐSend "insert" etc. command, returning response as a dict.

        Can raise ConnectionFailure or OperationFailure.

        :param request_id: an int.
        :param msg: bytes, the command message.
        r   )r  r,   Úcommand_responser   rê   rZ   )r€   r  r  r  rë   Úresults         r‚   Úwrite_commandzConnection.write_commandÛ  sQ   € ð 	×Ñ˜#˜qÔ!Ø×$Ñ$ ZÓ0ˆØ×'Ñ'¨Ó6ˆô 	×.Ñ.¨v°t×7LÑ7LÔMØˆr„   c           	     ó¨  — |r| j                   rd| _        d| _        | j                  �s)| j                  j                  }|rddlm} |j                  || |¬«       d| _        t        j                  «       | j                  z
  }| j                  r?| j                  €J ‚| j                  j                  | j                  | j                  |«       | j                   rwt#        j$                  t&        j(                  «      rSt+        t"        t,        j.                  | j0                  | j                  d   | j                  d   | j                  |¬«       yyyy)	zhAuthenticate to the server if needed.

        Can raise ConnectionFailure or OperationFailure.
        NFr   r¼   )ÚreauthenticateTrª   ©r  ÚclientIdÚ
serverHostÚ
serverPortÚdriverConnectionIdÚ
durationMS)rX   rm   rr   rb   rÆ   rÊ   r½   ÚauthenticaterU   rV   r~   re   rd   Úpublish_connection_readyrQ   rR   rf   r%   ÚisEnabledForÚloggingÚDEBUGr'   r&   Ú
CONN_READYr}   )r€   r  râ   r½   Údurations        r‚   r!  zConnection.authenticateí  s  € ñ Ø×'Ò'à $�”ØˆDŒJØ�z‹zØ—I‘I×*Ñ*ˆEÙÝ4à×!Ñ! %¨¸nÐ!ÔMØˆDŒJÜ—~‘~Ó'¨$×*<Ñ*<Ñ<ˆHØ×$Ò$Ø—~‘~Ð1Ð1Ð1Ø—‘×7Ñ7¸¿¹ÀdÇgÁgÈxÔXØ×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×?Ñ?Ø!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™Ø'+§w¡wØ'öð -[Ð'ð r„   c                ó<   — |r|j                   |urt        d«      ‚yy)zƒValidate this session before use with client.

        Raises error if the client is not the one that created the session.
        z9Can only use session with the MongoClient that started itN)Ú_clientr   )r€   r–   r  s      r‚   r÷   zConnection.validate_session  s)   € ñ Ø�‰ fÑ,Ü&Ð'bÓcÐcð -ð r„   c                óô  — | j                   ry| j                  «        |rÙ| j                  r?| j                  €J ‚| j                  j	                  | j
                  | j                  |«       | j                  r�t        j                  t        j                  «      r]t        t        t        j                  | j                  | j
                  d   | j
                  d   | j                  t!        |«      |¬«       yyyy)z$Close this connection with a reason.Nr   rª   ©r  r  r  r  r  Úreasonr
  )rT   Ú_close_connre   rd   Úpublish_connection_closedrQ   rR   rf   r%   r#  r$  r%  r'   r&   ÚCONN_CLOSEDr}   r(   )r€   r,  s     r‚   r¦   zConnection.close_conn  s¿   € à�;Š;ØØ×ÑÔÙØ×$Ò$Ø—~‘~Ð1Ð1Ð1Ø—‘×8Ñ8¸¿¹ÀtÇwÁwÐPVÔWØ×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×@Ñ@Ø!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™Ø'+§w¡wÜ;¸FÓCØ ö	ð -[Ð'ð	 r„   c                ó´   — | j                   ryd| _         | j                  j                  «        	 | j                  j	                  «        y# t
        $ r Y yw xY w)zClose this connection.NT)rT   rs   ÚcancelrP   ÚcloseÚ	ExceptionrŸ   s    r‚   r-  zConnection._close_conn/  sJ   € à�;Š;ØØˆŒØ×Ñ×"Ñ"Ô$ð	Ø�I‰I�O‰OÕøÜò 	Ùð	ús   °A Á	AÁAc                ó    — t         r/| j                  j                  | j                  j                  «      S | j                  j                  «       S )z?Return True if we know socket has been closed, False otherwise.)Ú_IS_SYNCrj   Úsocket_closedrP   r†   Ú
is_closingrŸ   s    r‚   Úconn_closedzConnection.conn_closed<  s9   € åØ×&Ñ&×4Ñ4°T·Y±Y×5GÑ5GÓHÐHà—9‘9×'Ñ'Ó)Ð)r„   c                ó.   — |r|j                  ||«       yy)zAdd $clusterTime.N)Ú_send_cluster_time)r€   r9   r  r–   s       r‚   rý   zConnection.send_cluster_timeC  s   € ñ Ø×%Ñ% g¨wÕ7ð r„   c                ór   — | j                   j                  r!t        || j                   j                  «       yy)zAdd server_api parameters.N)rb   r¬   r4   )r€   r9   s     r‚   rû   zConnection.add_server_apiM  s(   € à�9‰9×ÒÜ˜G T§Y¡Y×%9Ñ%9Õ:ð  r„   c                ó6   — t        j                  «       | _        y r¤   ©rU   rV   rW   rŸ   s    r‚   Úupdate_last_checkin_timez#Connection.update_last_checkin_timeR  s   € Ü!%§¡Ó!1ˆÕr„   c                ó   — || _         y r¤   )rY   )r€   rY   s     r‚   Úupdate_is_writablezConnection.update_is_writableU  s
   € Ø&ˆÕr„   c                óD   — t        j                  «       | j                  z
  S )z9Seconds since this socket was last checked into its pool.r=  rŸ   s    r‚   Úidle_time_secondszConnection.idle_time_secondsX  s   € ä�~‰~Ó $×"8Ñ"8Ñ8Ð8r„   c                óú   — | j                   rd }nt        j                  }| j                  |«       t	        |t
        t        gt        ¢­«      r.t        | j                  «      }t        | j                  ||¬«       y ‚ )N©rš   )rr   r*   ÚERRORr¦   rø   ÚIOErrorÚOSErrorr/   r    rb   r2   rQ   )r€   r
  r,  Údetailss       r‚   r2   z$Connection._raise_connection_failure\  s\   € ð  �:Š:Ø‰Fä+×1Ñ1ˆFØ�‰˜Ôä�eœg¤wÐ;´Ñ;Ô<Ü*¨4¯9©9Ó5ˆGÜ% d§l¡l°EÈ7ÖSàr„   c                ó4   — | j                   |j                   k(  S r¤   )rP   ©r€   Úothers     r‚   Ú__eq__zConnection.__eq__x  s   € Ø�y‰y˜EŸJ™JÑ&Ð&r„   c                ó   — | |k(   S r¤   © rJ  s     r‚   Ú__ne__zConnection.__ne__{  s   € Ø˜5‘=Ð Ð r„   c                ó,   — t        | j                  «      S r¤   )ÚhashrP   rŸ   s    r‚   Ú__hash__zConnection.__hash__~  s   € Ü�D—I‘I‹Ðr„   c                ó„   — dj                  t        | j                  «      | j                  xr dxs dt	        | «      «      S )NzConnection({}){} at {}z CLOSEDÚ )ÚformatÚreprrP   rT   rR   rŸ   s    r‚   Ú__repr__zConnection.__repr__�  s8   € Ø'×.Ñ.Ü�—‘‹OØ�K‰KÒ%˜IÒ+¨Üˆt‹Hó
ð 	
r„   )
rP   r+   r�   ÚPoolrQ   ztuple[str, int]rR   r•   rS   rþ   )rˆ   úOptional[float]ÚreturnÚNone)r–   zMongoClient[Any]r—   z"Optional[MutableMapping[str, Any]]rZ  rY  ©rZ  r[  )rZ  údict[str, Any])rZ  úHello[dict[str, Any]])rß   zOptional[Any]rà   úOptional[int]rZ  r^  )"r  Ústrr  úMutableMapping[str, Any]r  rB   r  úCodecOptions[Mapping[str, Any]]r  rþ   r  z#Optional[Sequence[Union[str, int]]]r  zOptional[ReadConcern]rö   zOptional[WriteConcern]rð   rþ   rñ   zOptional[_CollationIn]r  úOptional[ClientSession]r–   úOptional[MongoClient[Any]]r	  rþ   rÀ   rþ   rõ   zOptional[Mapping[str, Any]]rÁ   rþ   rZ  r]  )r  Úbytesr  r•   rZ  r[  )r  r_  rZ  zUnion[_OpReply, _OpMsg])rô   rþ   rZ  r[  )r  re  r  r•   rZ  r[  )r  r•   r  re  r  rb  rZ  r]  )F)r  rþ   rZ  r[  )r–   rd  r  rc  rZ  r[  )r,  zOptional[str]rZ  r[  ©rZ  rþ   )r9   ra  r  rc  r–   rd  rZ  r[  )r9   ra  rZ  r[  )rY   rþ   rZ  r[  )rZ  Úfloat)r
  r   rZ  r	   )rK  r   rZ  rþ   ©rZ  r•   )rZ  r`  )'Ú__name__Ú
__module__Ú__qualname__Ú__doc__rƒ   r‰   rœ   r    r¢   r¨   r°   r³   r²   rî   r8   r3   ÚPRIMARYr   r9   r  r,   rÿ   r  r  r!  r÷   r¦   r-  r8  rý   rû   r>  r@  rB  r2   rL  rO  rR  rW  rN  r„   r‚   rK   rK   o   sn  „ ñð9"à!ð9"ð ð9"ð !ð	9"ð
 ð9"ð ó9"óv/ðØ&ðØ-Oðà	óó>&ó#ó:ó@ó'ðSà'ðSð +ðSð 
ó	Sójð ð
 (6×'=Ñ'=Ø9NØØ@DØ.2Ø04Ø*/Ø,0Ø+/Ø-1Ø %Ø#Ø37Ø %ð#W2àðW2ð 'ðW2ð %ð	W2ð
 7ðW2ð ðW2ð >ðW2ð ,ðW2ð .ðW2ð $(ðW2ð *ðW2ð )ðW2ð +ðW2ð ðW2ð ðW2ð  1ð!W2ð" ð#W2ð$ 
ò%W2ó ðW2ór2ó"	2ódó	-ðØðØ$)ðØ:Yðà	óô$ ðD	dØ0ð	dØ;Rð	dà	ó	dóó*ó*ð8à)ð8ð )ð8ð +ð	8ð
 
ó8ó;ó
2ó'ó9óó8'ó!óô
r„   rK   c                  ó   — e Zd ZdZy)Ú_PoolClosedErrorzZInternal error raised when a thread tries to get a connection from a
    closed pool.
    N)ri  rj  rk  rl  rN  r„   r‚   ro  ro  ‰  s   „ òr„   ro  c                  ó4   — e Zd Zdd„Zdd„Zd	d„Zd
d„Zdd„Zy)Ú_PoolGenerationc                óN   — t        j                  t        «      | _        d| _        y rè   )ÚcollectionsÚdefaultdictr•   Ú_generationsÚ_generationrŸ   s    r‚   rƒ   z_PoolGeneration.__init__�  s   € ä1<×1HÑ1HÌÓ1MˆÔàˆÕr„   c                ó<   — |€| j                   S | j                  |   S )z,Get the generation for the given service_id.©rv  ru  ©r€   ru   s     r‚   rÞ   z_PoolGeneration.get–  s%   € àÐØ×#Ñ#Ð#Ø× Ñ  Ñ,Ð,r„   c                ó   — | j                   S )z"Get the Pool's overall generation.)rv  rŸ   s    r‚   rp   z_PoolGeneration.get_overallœ  s   € à×ÑÐr„   c                ó²   — | xj                   dz  c_         |€)| j                  D ]  }| j                  |xx   dz  cc<   Œ y| j                  |xx   dz  cc<   y)z2Increment the generation for the given service_id.rª   Nrx  ry  s     r‚   Úincz_PoolGeneration.inc   s\   € à×Ò˜AÑÕØÐØ"×/Ñ/ò 3�
Ø×!Ñ! *Ó-°Ñ2Ô-ñ3ð ×Ñ˜jÓ)¨QÑ.Ô)r„   c                ó*   — || j                  |«      k7  S )z?Return if the given generation for a given service_id is stale.)rÞ   ©r€   rn   ru   s      r‚   Ústalez_PoolGeneration.stale©  s   € à�d—h‘h˜zÓ*Ñ*Ð*r„   Nr\  )ru   úOptional[ObjectId]rZ  r•   rh  )ru   r€  rZ  r[  ©rn   r•   ru   r€  rZ  rþ   )ri  rj  rk  rƒ   rÞ   rp   r|  r  rN  r„   r‚   rq  rq  �  s   „ óó-ó ó/ô+r„   rq  c                  ó   — e Zd ZdZdZdZy)Ú	PoolStaterª   é   é   N)ri  rj  rk  ÚPAUSEDÚREADYÚCLOSEDrN  r„   r‚   rƒ  rƒ  ®  s   „ Ø€FØ€EØ�Fr„   rƒ  c                  ó  — e Zd Z	 	 d	 	 	 	 	 	 	 dd„Zdd„Zedd„«       Z	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Z	 d	 	 	 	 	 dd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd d„Zej                   	 d	 	 	 d!d„«       Zd"d„Z	 d	 	 	 	 	 d#d„Zd$d„Zd%d„Zd&d„Zdd„Zy)'rX  Nc                óè  — |j                   rt        j                  | _        nt        j                  | _        d| _        t        j                  «       | _        t        «       | _
        t        «       | _        t        | j                  «      | _        d| _        d| _        d| _        t%        «       | _        t)        j*                  «       | _        || _        || _        || _        | j2                   xr: | j0                  j4                  duxr  | j0                  j4                  j6                  | _        | j2                   | _        t        | j                  «      | _        d| _        | j0                  j>                  | _        | j>                  stA        d«      | _        t        | j                  «      | _        | j0                  jB                  | _"        d| _#        || _$        | j6                  r\| j0                  j4                  €J ‚| j0                  j4                  jK                  | j.                  | j0                  jL                  «       | j8                  r~tO        jP                  tR        jT                  «      r[tW        tN        ftX        jZ                  | jH                  | j.                  d   | j.                  d   dœ| j0                  jL                  ¤Ž d| _.        t        «       | _/        d| _0        d| _1        y)z¯
        :param address: a (hostname, port) tuple
        :param options: a PoolOptions instance
        :param is_sdam: whether to call hello for each new Connection
        rª   r   NÚinf©r  r  r  r  )2Úpause_enabledrƒ  r†  Ústater‡  Ú_check_interval_secondsrs  ÚdequeÚconnsÚsetÚactive_contextsr$   Úlockr#   Ú_max_connecting_condÚactive_socketsÚnext_connection_idrY   rq  rn   ÚosÚgetpidÚpidrQ   rb   rS   rc   re   rf   Ú	size_condÚrequestsÚmax_pool_sizerg  Úmax_connectingÚ_max_connectingÚ_pendingr}   Úpublish_pool_createdÚnon_default_optionsr%   r#  r$  r%  r'   r&   ÚPOOL_CREATEDÚoperation_countÚ_Pool__pinned_socketsÚncursorsÚntxns)r€   rQ   ÚoptionsrS   Ú	client_ids        r‚   rƒ   zPool.__init__µ  sH  € ð × Ò Ü"×)Ñ)ˆD�Jä"Ÿ™ˆDŒJð ()ˆÔ$ô 5@×4EÑ4EÓ4GˆŒ
Ü:=»%ˆÔÜ “NˆŒ	Ü$5°d·i±iÓ$@ˆÔ!ØˆÔà"#ˆÔà+/ˆÔô
 #Ó$ˆŒÜ—9‘9“;ˆŒØˆŒØˆŒ	ØˆŒð —‘Ðò <Ø—	‘	×*Ñ*°$Ð6ò<à—	‘	×*Ñ*×;Ñ;ð 	Ôð
 (,§|¡|Ð#3ˆÔ ô
 +¨4¯9©9Ó5ˆŒØˆŒØ!ŸY™Y×4Ñ4ˆÔØ×!Ò!Ü!& u£ˆDÔô %6°d·i±iÓ$@ˆÔ!Ø#Ÿy™y×7Ñ7ˆÔØˆŒØ#ˆŒØ× Ò Ø—9‘9×-Ñ-Ð9Ð9Ð9Ø�I‰I×&Ñ&×;Ñ;Ø—‘˜dŸi™i×;Ñ;ôð ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"ðä0×=Ñ=ØŸ™ØŸ<™<¨™?ØŸ<™<¨™?ñð —)‘)×/Ñ/òð %&ˆÔô 25³ˆÔØˆŒØˆ�
r„   c           	     ó:  — | j                   5  | j                  t        j                  k7  rÝt        j                  | _        | j                  rG| j
                  j                  €J ‚| j
                  j                  j                  | j                  «       | j                  rit        j                  t        j                  «      rFt        t        t        j                   | j"                  | j                  d   | j                  d   ¬«       d d d «       y # 1 sw Y   y xY w)Nr   rª   rŒ  )r”  rŽ  rƒ  r‡  re   rb   rc   Úpublish_pool_readyrQ   rf   r%   r#  r$  r%  r'   r&   Ú
POOL_READYr}   rŸ   s    r‚   rr   z
Pool.ready  sÃ   € à�Y‰Yñ 	Ø�z‰zœYŸ_™_Ò,Ü&Ÿ_™_�”
Ø×(Ò(ØŸ9™9×5Ñ5ÐAÐAÐAØ—I‘I×.Ñ.×AÑAÀ$Ç,Á,ÔOØ×+Ò+Ô0B×0OÑ0OÔPW×P]ÑP]Ô0^ÜÜ*Ü 8× CÑ CØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?õ÷	÷ 	ñ 	ús   �C;DÄDc                ó<   — | j                   t        j                  k(  S r¤   )rŽ  rƒ  rˆ  rŸ   s    r‚   rT   zPool.closed  s   € à�z‰zœY×-Ñ-Ñ-Ð-r„   c                ó–  — | j                   }| j                  5  | j                  r
	 d d d «       y | j                  j                  r:|r8| j                  j
                  s"| j                   t        j                  c}| _         | j                  j                  |«       t        j                  «       }| j                  |k7  r|| _        d| _        d| _        |€'| j                  t!        j"                  «       c}| _        ntt!        j"                  «       }t!        j"                  «       }	| j                  D ]4  }
|
j$                  |k(  r|j'                  |
«       Œ$|	j'                  |
«       Œ6 |}|	| _        |rt        j(                  | _         | j*                  j-                  «        | j                  j-                  «        |r!| j.                  D ]  }|j1                  «        Œ d d d «       | j                  j2                  }|�rt4        sAt7        j8                  D �
cg c]!  }
|
j;                  t<        j>                  «      ‘Œ# c}
ddiŽ n&D ]!  }
|
j;                  t<        j>                  «       Œ# | j@                  r|€J ‚|jC                  | jD                  «       | jF                  rktI        jJ                  tL        jN                  «      rGtQ        tH        tR        j>                  | jT                  | jD                  d   | jD                  d   ¬«       y y y |t        j                  k7  r¤| j@                  r"|€J ‚|jW                  | jD                  ||¬«       | jF                  rjtI        jJ                  tL        jN                  «      rGtQ        tH        tR        jX                  | jT                  | jD                  d   | jD                  d   |¬«       t4        sAt7        j8                  D �
cg c]!  }
|
j;                  t<        jZ                  «      ‘Œ# c}
ddiŽ y D ]!  }
|
j;                  t<        jZ                  «       Œ# y # 1 sw Y   �ŒXxY wc c}
w c c}
w )Nr   Úreturn_exceptionsTrª   rŒ  )ru   Úinterrupt_connections)r  r  r  r  Ú	serviceId).rŽ  r›  rT   rb   r�  r­   rƒ  r†  rn   r|  r˜  r™  rš  r–  r¤  r‘  rs  r�  ru   Úappendrˆ  r•  Ú
notify_allr“  r1  rc   r5  ÚasyncioÚgatherr¦   r*   ÚPOOL_CLOSEDre   Úpublish_pool_closedrQ   rf   r%   r#  r$  r%  r'   r&   r}   Úpublish_pool_clearedÚPOOL_CLEAREDr§   )r€   r2  Úpauseru   r°  Ú	old_stateÚnewpidÚsocketsÚdiscardÚkeeprP   Úcontextrd   s                r‚   Ú_resetzPool._reset   sx  € ð —J‘Jˆ	Ø�^‰^ñ  	%Ø�{Š{Ø÷ 	%ð  	%ð �y‰y×&Ò&©5¸¿¹×9PÒ9PØ(,¯
©
´I×4DÑ4DÐ%�	˜4œ:Ø�H‰H�L‰L˜Ô$Ü—Y‘Y“[ˆFØ�x‰x˜6Ò!Ø!�”Ø&'�Ô#Ø'(�Ô$ØÐ!Ø&*§j¡j´+×2CÑ2CÓ2EÐ#�˜�ä-8×->Ñ->Ó-@�Ü*5×*;Ñ*;Ó*=�Ø ŸJ™Jò *�DØ—‘¨*Ò4ØŸ™ tÕ,àŸ™ DÕ)ð	*ð
 "�Ø!�”
áÜ&×-Ñ-�”
à×%Ñ%×0Ñ0Ô2Ø�N‰N×%Ñ%Ô'á$Ø#×3Ñ3ò %�GØ—N‘NÕ$ð%÷? 	%ðD —I‘I×.Ñ.ˆ	ò ÝÜ—‘ØV]Ö^Èd�d—o‘oÔ&<×&HÑ&HÕIÒ^ðà&*óð
 $ò H�DØ—O‘OÔ$:×$FÑ$FÕGðHà×$Ò$Ø Ð,Ð,Ð,Ø×-Ñ-¨d¯l©lÔ;Ø×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×@Ñ@Ø!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™öð -[Ð'ð œI×,Ñ,Ò,Ø×(Ò(Ø$Ð0Ð0Ð0Ø×2Ñ2ØŸ™Ø#-Ø.Cð 3ô ð
 ×+Ò+Ô0B×0OÑ0OÔPW×P]ÑP]Ô0^ÜÜ*Ü 8× EÑ EØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?Ø",õõ Ü—‘ØPWÖXÈ�d—o‘oÔ&<×&BÑ&BÕCÒXðà&*óð
 $ò B�DØ—O‘OÔ$:×$@Ñ$@ÕAñB÷e 	%ñ  	%üòR _ùòJ Ys   ™P4°F.P4È&QÏ&QÐ4P>c                ó®   — || _         | j                  5  | j                  D ]  }|j                  | j                   «       Œ 	 ddd«       y# 1 sw Y   yxY w)zXUpdates the is_writable attribute on all sockets currently in the
        Pool.
        N)rY   r”  r‘  r@  )r€   rY   Ú_sockets      r‚   r@  zPool.update_is_writable}  sO   € ð 'ˆÔØ�Y‰Yñ 	=ØŸ:™:ò =�Ø×*Ñ*¨4×+;Ñ+;Õ<ñ=÷	=÷ 	=ñ 	=ús   ”-AÁAc                ó,   — | j                  d||¬«       y )NF)r2  ru   r°  ©rÁ  )r€   ru   r°  s      r‚   Úresetz
Pool.reset†  s   € ð 	�‰˜%¨JÐNcˆÕdr„   c                ó*   — | j                  dd¬«       y )NF)r2  rº  rÅ  rŸ   s    r‚   Úreset_without_pausezPool.reset_without_pause‹  s   € Ø�‰˜% uˆÕ-r„   c                ó(   — | j                  d¬«       y )NT)r2  rÅ  rŸ   s    r‚   r2  z
Pool.closeŽ  s   € Ø�‰˜$ˆÕr„   c                ó:   — | j                   j                  ||«      S r¤   )rn   r  r~  s      r‚   Ústale_generationzPool.stale_generation‘  s   € Ø�x‰x�~‰~˜c :Ó.Ð.r„   c                óè  — | j                   5  | j                  t        j                  k7  r
	 ddd«       y	 ddd«       | j                  j
                  ��.g }| j                   5  | j                  rž| j                  d   j                  «       | j                  j
                  kD  rj|j                  | j                  j                  «       «       | j                  r5| j                  d   j                  «       | j                  j
                  kD  rŒjddd«       t        sAt        j                  |D �cg c]!  }|j                  t        j                  «      ‘Œ# c}ddiŽ n&|D ]!  }|j                  t        j                  «       Œ# 	 | j                   5  t#        | j                  «      | j$                  z   | j                  j&                  k\  r
	 ddd«       y| j(                  | j                  j&                  k\  r
	 ddd«       y| xj(                  dz  c_        ddd«       d}	 | j*                  5  | j,                  | j.                  k\  r”	 ddd«       |rD| j*                  5  | xj,                  dz  c_        | j*                  j1                  «        ddd«       | j                   5  | xj(                  dz  c_        | j                   j1                  «        ddd«       y| xj,                  dz  c_        d}ddd«       | j3                  «       }d}| j                   5  | j4                  j7                  «       |k7  rd}|s@| j                  j9                  |«       | j:                  j=                  |j>                  «       ddd«       |r«|j                  t        j@                  «       	 |rD| j*                  5  | xj,                  dz  c_        | j*                  j1                  «        ddd«       | j                   5  | xj(                  dz  c_        | j                   j1                  «        ddd«       y	 |rD| j*                  5  | xj,                  dz  c_        | j*                  j1                  «        ddd«       | j                   5  | xj(                  dz  c_        | j                   j1                  «        ddd«       �Œ8# 1 sw Y   �ŒˆxY w# 1 sw Y   �Œ½xY wc c}w # 1 sw Y   �ŒÇxY w# 1 sw Y   �Œ\xY w# 1 sw Y   yxY w# 1 sw Y   �ŒxY w# 1 sw Y   �Œ–xY w# 1 sw Y   �Œ;xY w# 1 sw Y   yxY w# 1 sw Y   ŒÇxY w# 1 sw Y   Œ�xY w# |rQ| j*                  5  | xj,                  dz  c_        | j*                  j1                  «        ddd«       n# 1 sw Y   nxY w| j                   5  | xj(                  dz  c_        | j                   j1                  «        ddd«       w # 1 sw Y   w xY wxY w)zôRemoves stale sockets then adds new ones if pool is too small and
        has not been reset. The `reference_generation` argument specifies the
        `generation` at the point in time this operation was requested on the
        pool.
        Néÿÿÿÿr¯  Trª   F)!r”  rŽ  rƒ  r‡  rb   Úmax_idle_time_secondsr‘  rB  r²  Úpopr5  r´  rµ  r¦   r*   ÚIDLEr›  Úlenr–  Úmin_pool_sizerœ  r•  r   rŸ  ÚnotifyÚconnectrn   rp   Ú
appendleftr“  r¾  rs   r§   )r€   Úreference_generationÚclose_connsrP   Úincrementedr¦   s         r‚   Úremove_stale_socketszPool.remove_stale_sockets”  sÐ  € ð �Y‰Yñ 	Ø�z‰zœYŸ_™_Ò,Ø÷	ð 	Ø,÷	ð �9‰9×*Ñ*Ñ6ØˆKØ—‘ñ 9à—J’JØŸ
™
 2™×8Ñ8Ó:¸T¿Y¹Y×=\Ñ=\Ò\à×&Ñ& t§z¡z§~¡~Ó'7Ô8ð —J’JØŸ
™
 2™×8Ñ8Ó:¸T¿Y¹Y×=\Ñ=\Ó\÷9õ Ü—‘ØOZÖ[Àt�d—o‘oÔ&<×&AÑ&AÕBÒ[ðà&*óð
 (ò A�DØ—O‘OÔ$:×$?Ñ$?Õ@ðAð Ø—‘ñ #ä�t—z‘z“? T×%8Ñ%8Ñ8¸D¿I¹I×<SÑ<SÒSØ÷#ð #ð —=‘= D§I¡I×$;Ñ$;Ò;Ø÷#ð #ð —’ Ñ"•÷#ð  ˆKð,Ø×.Ñ.ñ 'ð —}‘}¨×(<Ñ(<Ò<Ø÷	'ñ* à×2Ñ2ñ ;ØŸš¨Ñ*�Ø×1Ñ1×8Ñ8Ô:÷;ð —^‘^ñ ,Ø—M’M QÑ&•MØ—N‘N×)Ñ)Ô+÷,ð ,ð- —M’M QÑ&•MØ"&�K÷'ð —|‘|“~�Ø"�
Ø—Y‘Yñ Jð —x‘x×+Ñ+Ó-Ð1EÒEØ%)˜
Ù%ØŸ
™
×-Ñ-¨dÔ3Ø×,Ñ,×4Ñ4°T×5HÑ5HÔI÷Jñ Ø—O‘OÔ$:×$@Ñ$@ÔAØáà×2Ñ2ñ ;ØŸš¨Ñ*�Ø×1Ñ1×8Ñ8Ô:÷;ð —^‘^ñ ,Ø—M’M QÑ&•MØ—N‘N×)Ñ)Ô+÷,ð ,ð ñ à×2Ñ2ñ ;ØŸš¨Ñ*�Ø×1Ñ1×8Ñ8Ô:÷;ð —^‘^ñ ,Ø—M’M QÑ&•MØ—N‘N×)Ñ)Ô+÷,ñK ÷+	ñ 	ú÷9ñ 9üò \÷#ñ #ú÷@;ñ ;ú÷,ð ,ú÷7'ñ 'ú÷Jñ Jú÷;ñ ;ú÷,ð ,ú÷	;ð ;ú÷,ð ,ûñ à×2Ñ2ñ ;ØŸš¨Ñ*�Ø×1Ñ1×8Ñ8Ô:÷;÷ ;ñ ;úð —^‘^ñ ,Ø—M’M QÑ&•MØ—N‘N×)Ñ)Ô+÷,÷ ,ñ ,ýs÷   �R<Á#B*S	Ä/&SÆ;SÇ$SÈSÈ!U È-TÉU É0S(Ê"0S5ËTË2&U ÌA"TÍ:)U Î20TÏ60T(Ð>0T4Ò0U Ò<SÓ	SÓS%Ó(S2Ó5S>ÔTÔU ÔTÔU ÔT%Ô(T1Ô4T=Õ U	ÕW1Õ0VÖ	W1ÖVÖW1Ö,0W%×	W1×%W.×*W1c                ó²  — | j                   5  | j                  }| xj                  dz  c_        t        «       }| j                  j	                  |«       ddd«       | j
                  j                  }| j                  r |€J ‚|j                  | j                  «       | j                  rjt        j                  t        j                  «      rGt        t        t         j"                  | j$                  | j                  d   | j                  d   ¬«       	 t'        | j                  | j
                  «      }tC        || | j                  | jD                  «      }| j                   5  | j                  j	                  |jF                  «       | j                  j+                  «       ddd«       jH                  r|jF                  jK                  «        	 | jD                  s!|jM                  «        |jN                  | _'        |r|jQ                  |d¬«       |jS                  «        |r/|jV                  jX                  j[                  |j\                  «       |S # 1 sw Y   �ŒxY w# t(        $ �re}| j                   5  | j                  j+                  «       ddd«       n# 1 sw Y   nxY w| j                  r/|€J ‚|j-                  | j                  t.        j0                  «       | j                  r‘t        j                  t        j                  «      rnt        t        t         j2                  | j$                  | j                  d   | j                  d   t5        t.        j0                  «      t.        j0                  ¬«       t7        |t8        t:        gt<        ¢­«      r-t?        | j
                  «      }tA        | j                  ||¬«       ‚ d}~ww xY w# 1 sw Y   �Œ5xY w# t(        $ rh | j                   5  | j                  j+                  |jF                  «       ddd«       n# 1 sw Y   nxY w|jU                  t.        j0                  «       ‚ w xY w)	zÝConnect to Mongo and return a new Connection.

        Can raise ConnectionFailure.

        Note that the pool does not keep a reference to the socket -- you
        must call checkin() when you're done with it.
        rª   Nr   ©r  r  r  r  r  r+  rD  F)Úcompleted_handshake)/r”  r—  r0   r“  Úaddrb   rc   re   Úpublish_connection_createdrQ   rf   r%   r#  r$  r%  r'   r&   ÚCONN_CREATEDr}   r1   r   r¾  r.  r*   rE  r/  r(   rø   rF  rG  r/   r    r2   rK   rS   rs   Ú	cancelledr1  r³   rY   Úcontribute_socketr!  r¦   r–   Ú	_topologyÚreceive_cluster_timer   )	r€   ÚhandlerÚconn_idÚtmp_contextrd   Únetworking_interfacer
  rH  rP   s	            r‚   rÔ  zPool.connectÙ  sc  € ð �Y‰Yñ 	2Ø×-Ñ-ˆGØ×#Ò# qÑ(Õ#ä.Ó0ˆKØ× Ñ ×$Ñ$ [Ô1÷	2ð —I‘I×.Ñ.ˆ	Ø× Ò ØÐ(Ð(Ð(Ø×0Ñ0°·±¸wÔGØ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×=Ñ=ØŸ™ØŸ<™<¨™?ØŸ<™<¨™?Ø#*õð	Ü#?ÀÇÁÈdÏiÉiÓ#XÐ ô6 Ð.°°d·l±lÀGÈTÏ\É\ÓZˆØ�Y‰Yñ 	6Ø× Ñ ×$Ñ$ T×%8Ñ%8Ô9Ø× Ñ ×(Ñ(¨Ô5÷	6ð × Ò Ø×Ñ×&Ñ&Ô(ð	Ø—<’<Ø—
‘
”Ø#'×#3Ñ#3�Ô ÙØ×)Ñ)¨$ÀEÐ)ÔJà×ÑÔñ Ø�N‰N×$Ñ$×9Ñ9¸$×:LÑ:LÔMàˆ÷S	2ñ 	2ûô0 ó 	Ø—‘ñ :Ø×$Ñ$×,Ñ,¨[Ô9÷:÷ :ñ :úà×$Ò$Ø Ð,Ð,Ð,Ø×3Ñ3Ø—L‘L 'Ô+A×+GÑ+Gôð ×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×@Ñ@Ø!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™Ø'.Ü;Ô<R×<XÑ<XÓYÜ0×6Ñ6õ	ô ˜%¤'¬7Ð!?´YÑ!?Ô@Ü.¨t¯y©yÓ9�Ü)¨$¯,©,¸ÈwÕWàûð/	ú÷4	6ñ 	6ûô ò 	Ø—‘ñ BØ×$Ñ$×,Ñ,¨T×-@Ñ-@ÔA÷B÷ Bñ Búà�O‰OÔ2×8Ñ8Ô9Øð		úso   �AIÄ I& Å$AOÇAO% ÉI#É&
OÉ0OÉ<J!Ê	OÊ!J*	Ê&D*OÏOÏO"Ï%QÏ:&P)Ð 	QÐ)P2	Ð.(Qc           	   #  ó”  K  — | j                   j                  }t        j                  «       }| j                  r|€J ‚|j                  | j                  «       | j                  rit        j                  t        j                  «      rFt        t        t        j                  | j                  | j                  d   | j                  d   ¬«       | j!                  ||¬«      }t        j                  «       |z
  }| j                  r+|€J ‚|j#                  | j                  |j$                  |«       | j                  rut        j                  t        j                  «      rRt        t        t        j&                  | j                  | j                  d   | j                  d   |j$                  |¬«       	 | j(                  5  | j*                  j-                  |j.                  «       ddd«       |–— |j2                  rF| j(                  5  | j@                  j-                  |«       | xjB                  dz  c_!        ddd«       y|j4                  rF| j(                  5  | j@                  j-                  |«       | xjD                  dz  c_"        ddd«       y|j<                  r| j?                  |«       yy# 1 sw Y   ŒÐxY w# t0        $ rg |j2                  xs |j4                  }|r*t7        j8                  «       \  }}}	|j;                  ||«       |s|j<                  r| j?                  |«       ‚ w xY w# 1 sw Y   yxY w# 1 sw Y   yxY w­w)aý  Get a connection from the pool. Use with a "with" statement.

        Returns a :class:`Connection` object wrapping a connected
        :class:`socket.socket`.

        This method should always be used in a with-statement::

            with pool.get_conn() as connection:
                connection.send_message(msg)
                data = connection.receive_message(op_code, request_id)

        Can raise ConnectionFailure or OperationFailure.

        :param handler: A _MongoClientErrorHandler.
        Nr   rª   rŒ  ©rä  r  )#rb   rc   rU   rV   re   Ú$publish_connection_check_out_startedrQ   rf   r%   r#  r$  r%  r'   r&   ÚCHECKOUT_STARTEDr}   Ú	_get_connÚpublish_connection_checked_outrR   ÚCHECKOUT_SUCCEEDEDr”  r“  rÝ  rs   r   rw   rx   ÚsysÚexc_infoÚhandlery   r¥   r¥  r§  r¦  )
r€   rä  rd   Úcheckout_started_timerP   r'  ÚpinnedÚexc_typeÚexc_valÚ_s
             r‚   ÚcheckoutzPool.checkout,  s˜  è ø€ ð& —I‘I×.Ñ.ˆ	Ü $§¡Ó 0ÐØ× Ò ØÐ(Ð(Ð(Ø×:Ñ:¸4¿<¹<ÔHØ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×AÑAØŸ™ØŸ<™<¨™?ØŸ<™<¨™?õð �~‰~Ð3¸Wˆ~ÓEˆä—>‘>Ó#Ð&;Ñ;ˆØ× Ò ØÐ(Ð(Ð(Ø×4Ñ4°T·\±\À4Ç7Á7ÈHÔUØ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×CÑCØŸ™ØŸ<™<¨™?ØŸ<™<¨™?Ø#'§7¡7Ø#õð	Ø—‘ñ >Ø×$Ñ$×(Ñ(¨×)<Ñ)<Ô=÷>àŠJð  �?Š?Ø—‘ñ  Ø×%Ñ%×)Ñ)¨$Ô/Ø—
’
˜a‘•
÷ ð  ð ×ÒØ—‘ñ #Ø×%Ñ%×)Ñ)¨$Ô/Ø—’ Ñ"•÷#ð #ð �[Š[Ø�L‰L˜Õð ÷5>ð >ûô ò 	ð
 —_‘_Ò:¨×(:Ñ(:ˆFÙô (+§|¡|£~Ñ$�˜' 1Ø—‘˜x¨Ô1Ù˜dŸkškØ—‘˜TÔ"Øð	ú÷ ð  ú÷#ð #üsg   ‚F-MÆ0J= Æ<&J1Ç"J= Ç.MÈ1L0È7!MÉ1L<Ê	(MÊ1J:Ê6J= Ê=A0L-Ì-MÌ0L9Ì5MÌ<MÍMc           
     ó´  — | j                   t        j                  k7  �r:|�r t        j                  «       |z
  }| j
                  rW| j                  j                  €J ‚| j                  j                  j                  | j                  t        j                  |«       | j                  rzt        j                  t        j                   «      rWt#        t        t$        j&                  | j(                  | j                  d   | j                  d   dt        j                  |¬«       t+        | j                  «      }t-        | j                  t/        d«      |¬«       y y )Nr   rª   ú<An error occurred while trying to establish a new connection©r  r  r  r  r,  r
  r   zconnection pool pausedrD  )rŽ  rƒ  r‡  rU   rV   re   rb   rc   Ú#publish_connection_check_out_failedrQ   r)   Ú
CONN_ERRORrf   r%   r#  r$  r%  r'   r&   ÚCHECKOUT_FAILEDr}   r    r2   r   )r€   rò  Ú
emit_eventr'  rH  s        r‚   Ú_raise_if_not_readyzPool._raise_if_not_ready{  s   € Ø�:‰:œŸ™Ó(ÚÜŸ>™>Ó+Ð.CÑC�Ø×(Ò(ØŸ9™9×5Ñ5ÐAÐAÐAØ—I‘I×.Ñ.×RÑRØŸ™Ô&D×&OÑ&OÐQYôð ×+Ò+Ô0B×0OÑ0OÔPW×P]ÑP]Ô0^ÜÜ*Ü 8× HÑ HØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?Ø]Ü<×GÑGØ#+õ	ô +¨4¯9©9Ó5ˆGÜ%Ø—‘œmÐ,DÓEÐW^öð+ )r„   c                ó  — | j                   t        j                  «       k7  r| j                  «        | j                  �rt        j                  «       |z
  }| j                  rW| j                  j                  €J ‚| j                  j                  j                  | j                  t        j                  |«       | j                  rzt        j                   t"        j$                  «      rWt'        t        t(        j*                  | j,                  | j                  d   | j                  d   dt        j                  |¬«       t/        d«      ‚| j0                  5  | xj2                  dz  c_        ddd«       t5        j6                  «       rt5        j8                  «       }nD| j                  j:                  r,t        j                  «       | j                  j:                  z   }nd}| j<                  5  | j?                  |d¬«       | j@                  | jB                  k  s¢|r|t        j                  «       z
  nd}tE        | j<                  |«      sD| j@                  | jB                  k  r| j<                  jG                  «        | jI                  |«       | j?                  |d¬«       | j@                  | jB                  k  sŒ¢| xj@                  dz  c_         ddd«       d}d	}d	}	 | j0                  5  | xjJ                  dz  c_%        d}ddd«       |�€–| jL                  5  | j?                  |d	¬«       | jN                  sÕ| jP                  | jR                  k  s¼|r|t        j                  «       z
  nd}tE        | jL                  |«      sR| jN                  s| jP                  | jR                  k  r| jL                  jG                  «        d}| jI                  |«       | j?                  |d	¬«       | jN                  s| jP                  | jR                  k  sŒ¼	 | jN                  jU                  «       }ddd«       |r| jY                  |«      r[d}�Œ>	 | j[                  |¬
«      }| jL                  5  | xjP                  dz  c_(        | jL                  jG                  «        ddd«       |€�Œ–d|_3        |S # 1 sw Y   �ŒDxY w# 1 sw Y   �ŒìxY w# 1 sw Y   �ŒÆxY w# tV        $ r | xjP                  dz  c_(        Y ŒÊw xY w# 1 sw Y   ŒÏxY w# 1 sw Y   ŒmxY w# | jL                  5  | xjP                  dz  c_(        | jL                  jG                  «        ddd«       w # 1 sw Y   w xY wxY w# t\        $ �rŽ |r|j_                  t`        jb                  «       | j<                  5  | xj@                  dz  c_         |r| xjJ                  dz  c_%        | j<                  jG                  «        ddd«       n# 1 sw Y   nxY w|�s t        j                  «       |z
  }| j                  rW| j                  j                  €J ‚| j                  j                  j                  | j                  t        jd                  |«       | j                  rzt        j                   t"        j$                  «      rWt'        t        t(        j*                  | j,                  | j                  d   | j                  d   dt        jd                  |¬«       ‚ w xY w)z8Get or create a Connection. Can raise ConnectionFailure.Nr   rª   zConnection pool was closedrú  z?Attempted to check out a connection from closed connection poolT)rþ  Fré  rù  )4rš  r˜  r™  rÈ  rT   rU   rV   re   rb   rc   rû  rQ   r)   r¶  rf   r%   r#  r$  r%  r'   r&   rý  r}   ro  r”  r¤  r   Úget_timeoutÚget_deadlineÚwait_queue_timeoutr›  rÿ  rœ  r�  r"   rÓ  Ú_raise_wait_queue_timeoutr–  r•  r‘  r   rŸ  ÚpopleftÚ
IndexErrorÚ	_perishedrÔ  r   r¦   r*   rE  rü  ry   )	r€   rò  rä  r'  Údeadlinerˆ   rP   rØ  Úemitted_events	            r‚   rì  zPool._get_conn•  sš  € ð �8‰8”r—y‘y“{Ò"Ø×$Ñ$Ô&à�;‹;Ü—~‘~Ó'Ð*?Ñ?ˆHØ×$Ò$Ø—y‘y×1Ñ1Ð=Ð=Ð=Ø—	‘	×*Ñ*×NÑNØ—L‘LÔ"@×"LÑ"LÈhôð ×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×DÑDØ!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™Ø7Ü8×DÑDØ'õ	ô #ØQóð ð �Y‰Yñ 	&Ø× Ò  AÑ%Õ ÷	&ô ×ÑÔÜ×)Ñ)Ó+‰HØ�Y‰Y×)Ò)Ü—~‘~Ó'¨$¯)©)×*FÑ*FÑF‰HàˆHà�^‰^ñ 	Ø×$Ñ$Ð%:ÀtÐ$ÔLØ—}‘} t×'9Ñ'9Ò9Ù9A˜(¤T§^¡^Ó%5Ò5Àt�Ü! $§.¡.°'Ô:ð —}‘} t×'9Ñ'9Ò9ØŸ™×-Ñ-Ô/Ø×2Ñ2Ð3HÔIØ×(Ñ(Ð)>È4Ð(ÔPð —}‘} t×'9Ñ'9Ó9ð �MŠM˜QÑ�M÷	ð ˆØˆØˆð@	Ø—‘ñ #Ø×#Ò# qÑ(Õ#Ø"�÷#ð ‘,ð ×.Ñ.ñ +Ø×,Ñ,Ð-BÈuÐ,ÔUØ#Ÿzšz¨T¯]©]¸T×=QÑ=QÒ-QÙAI (¬T¯^©^Ó-=Ò"=Èt˜Ü)¨$×*CÑ*CÀWÔMð  $Ÿzšz¨T¯]©]¸T×=QÑ=QÒ-QØ $× 9Ñ 9× @Ñ @Ô BØ,0˜MØ ×:Ñ:Ð;PÔQØ×0Ñ0Ð1FÐSXÐ0ÔYð  $Ÿzšz¨T¯]©]¸T×=QÑ=QÓ-Qð+Ø#Ÿz™z×1Ñ1Ó3˜÷+ñ" Ø—~‘~ dÔ+Ø#˜Ù ð?Ø#Ÿ|™|°G˜|Ó<˜à!×6Ñ6ñ ?Ø ŸMšM¨QÑ.�MØ ×5Ñ5×<Ñ<Ô>÷?ð9 ’,ð| ˆŒØˆ÷	&ñ 	&ú÷	ñ 	ú÷$#ñ #ûô* &ò +ØŸš¨Ñ*Ÿð+ú÷+ð +ú÷2?ð ?û˜T×6Ñ6ñ ?Ø ŸMšM¨QÑ.�MØ ×5Ñ5×<Ñ<Ô>÷?÷ ?ñ ?þô ó 	Ùà—‘Ô 6× <Ñ <Ô=Ø—‘ñ (Ø—’ Ñ"•ÙØ×'Ò'¨1Ñ,Õ'Ø—‘×%Ñ%Ô'÷	(÷ (ñ (úò !ÜŸ>™>Ó+Ð.CÑC�Ø×(Ò(ØŸ9™9×5Ñ5ÐAÐAÐAØ—I‘I×.Ñ.×RÑRØŸ™Ô&D×&OÑ&OÐQYôð ×+Ò+Ô0B×0OÑ0OÔPW×P]ÑP]Ô0^ÜÜ*Ü 8× HÑ HØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?Ø]Ü<×GÑGØ#+õ	ð ð9	úsÜ   ÅR.Ç-CR;Ê<R;Ë U& Ë,SÌU& ÌC4S9ÐSÐ+U& ÑT ÑU& Ñ)0TÒ
U& Ò.R8Ò;SÓSÓU& ÓS6Ó3S9Ó5S6Ó6S9Ó9TÓ>U& ÔTÔ
U& ÔU#Ô0UÕ	U#ÕU ÕU#Õ#U& Õ&7[>ÖAW-×$	[>×-W6	×2D[>c                ón  — |j                   }|j                  }d|_        d|_         d|_        | j                  j	                  |«       | j
                  j                  }| j                  5  | j                  j	                  |j                  «       ddd«       | j                  r*|€J ‚|j                  | j                  |j                  «       | j                  rtt        j                   t"        j$                  «      rQt'        t        t(        j*                  | j,                  | j                  d   | j                  d   |j                  ¬«       | j.                  t1        j2                  «       k7  r| j5                  «        �nò| j6                  r!|j9                  t:        j<                  «       �nÅ|j6                  rï| j                  r9|€J ‚|j?                  | j                  |j                  t:        j@                  «       | j                  �rgt        j                   t"        j$                  «      �rCt'        t        t(        jB                  | j,                  | j                  d   | j                  d   |j                  tE        t:        j@                  «      t:        j@                  ¬«       nÊd}| j                  5  | jG                  |jH                  |jJ                  «      rd}ni|jM                  «        |jO                  tQ        | jR                  «      «       | jT                  jW                  |«       | jX                  j[                  «        ddd«       |r|j9                  t:        j\                  «       | j^                  5  |r| xj`                  dz  c_0        n|r| xjb                  dz  c_1        | xjd                  dz  c_2        | xjf                  dz  c_3        | xjh                  dz  c_4        | j^                  j[                  «        ddd«       y# 1 sw Y   �ŒƒxY w# 1 sw Y   ŒÕxY w# 1 sw Y   yxY w)z†Return the connection to the pool, or if it's closed discard it.

        :param conn: The connection to check into the pool.
        FNr   rª   rÛ  r+  T)5rw   rx   ry   r¥  r¾  rb   rc   r”  r“  rs   re   Úpublish_connection_checked_inrQ   rR   rf   r%   r#  r$  r%  r'   r&   Ú	CHECKEDINr}   rš  r˜  r™  rÈ  rT   r¦   r*   r¶  r.  rE  r/  r(   rË  rq   ru   r>  r@  rþ   rY   r‘  rÕ  r•  rÓ  r§   r›  r§  r¦  rœ  r–  r¤  )r€   rP   ÚtxnÚcursorrd   r¦   s         r‚   r¥   zPool.checkin  s  € ð
 �o‰oˆØ×#Ñ#ˆØˆŒØˆŒØ"ˆÔØ×Ñ×%Ñ% dÔ+Ø—I‘I×.Ñ.ˆ	Ø�Y‰Yñ 	>Ø× Ñ ×(Ñ(¨×)<Ñ)<Ô=÷	>à× Ò ØÐ(Ð(Ð(Ø×3Ñ3°D·L±LÀ$Ç'Á'ÔJØ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×:Ñ:ØŸ™ØŸ<™<¨™?ØŸ<™<¨™?Ø#'§7¡7õð �8‰8”r—y‘y“{Ò"Ø×$Ñ$Ö&à�{Š{Ø—‘Ô 6× BÑ BÖCØ—’à×(Ò(Ø$Ð0Ð0Ð0Ø×7Ñ7ØŸ™ d§g¡gÔ/E×/KÑ/Kôð ×+Ó+Ô0B×0OÑ0OÔPW×P]ÑP]Õ0^ÜÜ*Ü 8× DÑ DØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?Ø+/¯7©7Ü?Ô@V×@\Ñ@\Ó]Ü4×:Ñ:ö	ð #�
Ø—Y‘Yñ 
;ð ×,Ñ,¨T¯_©_¸d¿o¹oÔNØ%)™
à×5Ñ5Ô7Ø×/Ñ/´°T×5EÑ5EÓ0FÔGØŸ
™
×-Ñ-¨dÔ3à×1Ñ1×8Ñ8Ô:÷
;ñ Ø—O‘OÔ$:×$@Ñ$@ÔAà�^‰^ñ 	$ÙØ—
’
˜a‘–
ÙØ—’ Ñ"•Ø�MŠM˜QÑ�MØ×Ò 1Ñ$ÕØ× Ò  AÑ%Õ Ø�N‰N×!Ñ!Ô#÷	$ð 	$÷k	>ñ 	>ú÷N
;ð 
;ú÷	$ð 	$ús&   Á+&PÊ8BPÎ B	P+ÐPÐP(Ð+P4c                ó  — |j                  «       }| j                  j                  �9|| j                  j                  kD  r |j                  t        j
                  «       y| j                  �N| j                  dk(  s|| j                  kD  r0|j                  «       r |j                  t        j                  «       y| j                  |j                  |j                  «      r |j                  t        j                  «       yy)a©  Return True and close the connection if it is "perished".

        This side-effecty function checks if this socket has been idle for
        for longer than the max idle time, or if the socket has been closed by
        some external network error, or if the socket's generation is outdated.

        Checking sockets lets us avoid seeing *some*
        :class:`~pymongo.errors.AutoReconnect` exceptions on server
        hiccups, etc. We only check if the socket was closed by an external
        error if it has been > 1 second since the socket was checked into the
        pool, to keep performance reasonable - we can't avoid AutoReconnects
        completely anyway.
        Tr   F)rB  rb   rÎ  r¦   r*   rÐ  r�  r8  rE  rË  rq   ru   r§   )r€   rP   rB  s      r‚   r  zPool._perisheda  sÈ   € ð !×2Ñ2Ó4Ðð �I‰I×+Ñ+Ð7Ø! D§I¡I×$CÑ$CÒCà�O‰OÔ2×7Ñ7Ô8Øà×'Ñ'Ð3Ø×(Ñ(¨AÒ-Ð1BÀT×EaÑEaÒ1aà×ÑÔ!Ø—‘Ô 6× <Ñ <Ô=Øà× Ñ  §¡°$·/±/ÔBØ�O‰OÔ2×8Ñ8Ô9Øàr„   c           
     ó„  — | j                   j                  }t        j                  «       |z
  }| j                  r/|€J ‚|j                  | j                  t        j                  |«       | j                  rzt        j                  t        j                  «      rWt        t        t        j                   | j"                  | j                  d   | j                  d   dt        j                  |¬«       t%        j&                  «       xs | j                   j(                  }| j                   j*                  rl| j,                  | j.                  z
  | j0                  z
  }t3        dj5                  | j                   j6                  | j.                  | j0                  ||«      «      ‚t3        d| j                   j6                  › d|› �«      ‚)Nr   rª   zBWait queue timeout elapsed without a connection becoming availablerú  zÌTimeout waiting for connection from the connection pool. maxPoolSize: {}, connections in use by cursors: {}, connections in use by transactions: {}, connections in use by other operations: {}, timeout: {}zMTimed out while checking out a connection from connection pool. maxPoolSize: z, timeout: )rb   rc   rU   rV   re   rû  rQ   r)   ÚTIMEOUTrf   r%   r#  r$  r%  r'   r&   rý  r}   r   r  r  r­   r–  r¦  r§  r   rU  r�  )r€   rò  rd   r'  rˆ   Ú	other_opss         r‚   r  zPool._raise_wait_queue_timeout…  sm  € Ø—I‘I×.Ñ.ˆ	Ü—>‘>Ó#Ð&;Ñ;ˆØ× Ò ØÐ(Ð(Ð(Ø×9Ñ9Ø—‘Ô<×DÑDÀhôð ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×@Ñ@ØŸ™ØŸ<™<¨™?ØŸ<™<¨™?Ø[Ü4×<Ñ<Ø#õ	ô ×#Ñ#Ó%ÒE¨¯©×)EÑ)EˆØ�9‰9×"Ò"Ø×+Ñ+¨d¯m©mÑ;¸d¿j¹jÑHˆIÜ'ð7÷ 8>±vØ—I‘I×+Ñ+Ø—M‘MØ—J‘JØØó8ó	ð ô $ðØ ŸI™I×3Ñ3Ð4°KÀ¸yðJó
ð 	
r„   c                óV   — t         r#| j                  D ]  }|j                  d «       Œ y y r¤   )r5  r‘  r¦   )r€   rP   s     r‚   Ú__del__zPool.__del__¬  s+   € õ ØŸ
™
ò &�Ø—‘ Õ%ñ&ð r„   )FN)rQ   rG   r¨  r.   rS   rþ   r©  r€  r\  rf  )TNF)
r2  rþ   rº  rþ   ru   r€  r°  rþ   rZ  r[  )rY   zOptional[bool]rZ  r[  )NF)ru   r€  r°  rþ   rZ  r[  r�  )rÖ  r•   rZ  r[  r¤   )rä  ú"Optional[_MongoClientErrorHandler]rZ  rK   )rä  r  rZ  zGenerator[Connection, None])rò  rg  rþ  rþ   rZ  r[  )rò  rg  rä  r  rZ  rK   )rP   rK   rZ  r[  )rP   rK   rZ  rþ   )rò  rg  rZ  r	   )ri  rj  rk  rƒ   rr   ÚpropertyrT   rÁ  r@  rÆ  rÈ  r2  rË  rÙ  rÔ  Ú
contextlibÚcontextmanagerr÷  rÿ  rì  r¥   r  r  r  rN  r„   r‚   rX  rX  ´  sc  „ ð
 Ø(,ðTàðTð ðTð ð	Tð
 &óTólð" ò.ó ð.ð Ø)-Ø&+ð[Bàð[Bð ð[Bð 'ð	[Bð
  $ð[Bð 
ó[Bóz=ð TYðeØ,ðeØLPðeà	óeó
.ó ó/óC,ôJQðf ×Ñà<@ðLØ9ðLà	$òLó ðLó\ð6 [_ðØ%*ðØ5Wðà	óóBI$óV"óH%
ôN&r„   rX  )rÚ
__future__r   r´  rs  r  r$  r˜  rï  rU   rM   Útypingr   r   r   r   r   r	   r
   r   r   Úbsonr   Úpymongor   r   Úpymongo.commonr   r   r   r   r   Úpymongo.errorsr   r   r   r   r   r   r   r   r   Úpymongo.hellor   r   Úpymongo.helpers_sharedr    r!   Úpymongo.lockr"   r#   r$   Úpymongo.loggerr%   r&   r'   r(   Úpymongo.monitoringr)   r*   Úpymongo.network_layerr+   r,   r-   Úpymongo.pool_optionsr.   Úpymongo.pool_sharedr/   r0   r1   r2   Úpymongo.read_preferencesr3   Úpymongo.server_apir4   Úpymongo.server_typer5   Úpymongo.socket_checkerr6   Ú"pymongo.synchronous.client_sessionr7   Úpymongo.synchronous.helpersr8   Úpymongo.synchronous.networkr9   r:   Úbson.objectidr;   Úpymongo.compression_supportr<   r=   r>   Úpymongo.messager?   r@   Úpymongo.read_concernrA   rB   Úpymongo.synchronous.authrC   rD   Ú pymongo.synchronous.mongo_clientrE   rF   Úpymongo.typingsrG   rH   Úpymongo.write_concernrI   r5  rK   ro  rq  rƒ  rX  rN  r„   r‚   ú<module>r6     s  ðõ #ã Û Û Û Û 	Û 
Û Û ÷
÷ 
õ 
õ 'ß )÷õ ÷
÷ 
õ 
÷ -ß O÷ñ ÷
ó ÷÷ PÑ OÝ ,÷ó õ 4Ý .Ý +Ý 0Ý NÝ 6Ý /áÝ!Ý&÷ñ ÷
 1Ý0Ý4Ý5Ý@ßVß6Ý2ð €÷W
ñ W
ôt�|ô ÷+ñ +÷>ñ ÷~&ò ~&r„   