
    i                    v   S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
JrJrJrJr  SSKJr  SSKJr  SSKJr  SSKJr  S	r\" S
\S\4   S9rSS jrSrSr\\4       SS jjr " S S5      r        SS jr\R>                  S:  a  \R@                  r \RB                  r!gSS jr SS jr!g)z2Miscellaneous pieces that need to be synchronized.    )annotationsN)AnyCallableTypeVarcast)_csot)MAX_ADAPTIVE_RETRIES)OperationFailure)_REAUTHENTICATION_REQUIRED_CODETF.)boundc                f   ^  [         R                  " T 5      SU 4S jj5       n[        [        U5      $ )Nc                 t  > UR                  SS5      nSSKJn  SSKJn   T" U 0 UD6$ ! [
         a  nU(       a  e UR                  [        :X  ab  S nU  H5  n[        Xt5      (       a  Un  O"[        Xs5      (       d  M)  UR                  n  O   U(       a  UR                  SS9  Oe T" U 0 UD6s S nA$ e S nAff = f)N	no_reauthFr   )_BulkWriteContext)
ConnectionT)reauthenticate)poppymongo.messager   pymongo.synchronous.poolr   r
   coder   
isinstanceconnauthenticate)	argskwargsr   r   r   excr   argfuncs	           R/home/ubuntu/wiki/venv/lib/python3.13/site-packages/pymongo/synchronous/helpers.pyinner_handle_reauth.<locals>.inner.   s    JJ{E2	57	((( 	xx:: C!#22"!#99"xx   %%T%:T,V,,)	s'   ) 
B7AB2</B2+B71B22B7)r   r   r   r   returnr   )	functoolswrapsr   r   )r   r!   s   ` r    _handle_reauthr&   -   s,    __T : 5>    g?
   c                V    [         R                   " 5       nU[        USU -  -  U5      -  $ )N   )randommin)attemptinitial_delay	max_delayjitters       r    _backoffr1   S   s*     ]]_FCG4i@@@r'   c                  J    \ rS rSrSr\\\4     SS jjrS	S jr	S
S jr
Srg)_RetryPolicyZ   z>A retry limiter that performs exponential backoff with jitter.c                (    Xl         X l        X0l        g Nattemptsbackoff_initialbackoff_max)selfr8   r9   r:   s       r    __init___RetryPolicy.__init__]   s     !.&r'   c                ^    [        [        SUS-
  5      U R                  U R                  5      $ )z2Return the backoff duration for the given attempt.r      )r1   maxr9   r:   )r;   r-   s     r    backoff_RetryPolicy.backoffg   s(    Aw{+T-A-A4CSCSTTr'   c                    XR                   :  a  g[        R                  " 5       (       a0  [        R                  " 5       U-   [        R
                  " 5       :  a  gg)z[Return if we have retry attempts remaining and the next backoff would not exceed a timeout.FT)r8   r   get_timeouttime	monotonicget_deadline)r;   r-   delays      r    should_retry_RetryPolicy.should_retryk   sA    ]]"~~%'%*<*<*>>r'   r7   N)r8   intr9   floatr:   rL   )r-   rK   r#   rL   )r-   rK   rH   rL   r#   bool)__name__
__module____qualname____firstlineno____doc__r	   _BACKOFF_INITIAL_BACKOFF_MAXr<   rA   rI   __static_attributes__ r'   r    r3   r3   Z   s<    H -!1)	'' ' 	'U	r'   r3   c                    [         (       d(  [        R                  " 5       nUR                  " X40 UD6$ [        R                  " X40 UD6$ r6   )_IS_SYNCasyncioget_running_loopgetaddrinfosocket)hostportr   loops       r    _getaddrinfor`   w   sC     8'')5f55!!$777r'   )   r(   c                "    U R                  5       $ zhCompatibility function until we drop 3.9 support: https://docs.python.org/3/library/functions.html#next.)__next__clss    r    nextrg          ||~r'   c                "    U R                  5       $ rc   )__iter__re   s    r    iterrk      rh   r'   )r   r   r#   r   )r-   rK   r.   rL   r/   rL   r#   rL   )r]   r   r^   r   r   r   r#   zlist[tuple[socket.AddressFamily, socket.SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]])rf   r   r#   r   )"rR   
__future__r   rY   builtinsr$   r+   r\   sysrE   typingr   r   r   r   pymongor   pymongo.commonr	   pymongo.errorsr
   pymongo.helpers_sharedr   rX   r   r&   rS   rT   r1   r3   r`   version_inforg   rk   rV   r'   r    <module>ru      s    9 "      
    / C CxS)*D   *:lAA!&AFKA
A :8
88$'88$ w==D==Dr'   