
    nhN                       d Z 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m	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZmZmZmZ ddlmZmZmZ dd	lmZ dd
lmZmZ e	rddl m!Z! ddl"m#Z# 	 ddl$m%Z%m&Z&m'Z'm$Z$ d(dZ(dZ*dZ+dZ,ejZ                  dk(  rG	 ddl.Z/d Z0	  e/jb                  e/jd                  d      5 Z3 e0e3dd      Z4 e0e3dd      Z5ddd       d Z7nd)dZ8d*dZ7	 	 d+	 	 	 	 	 	 	 	 	 d,dZ9d-dZ:d.dZ; G d  d!      Z<d/d"Z=	 	 	 	 	 	 d0d#Z>	 	 	 	 	 	 d1d$Z?d/d%Z@d0d&ZAd2d'ZBy# e)$ r d(dZ(Y w xY w# e)$ r ddl/Z/Y w xY w# 1 sw Y   zxY w# e6$ r dZ4dZ5Y w xY w)3z)Pool utilities and shared helper methods.    )annotationsN)TYPE_CHECKINGAnyNoReturnOptionalUnion)_csot)_getaddrinfo)AutoReconnectConnectionFailureNetworkTimeout_CertificateError)AsyncNetworkingInterfaceNetworkingInterfacePyMongoProtocol)PoolOptions)HAS_SNISSLError)_sslConn)_Address)F_GETFDF_SETFD
FD_CLOEXECfcntlc                T    t        | t              }t        | t        |t        z         y)z8Set the close-on-exec flag on the given file descriptor.N)r   r   r   r   )fdflagss     y/var/www/html/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/venv/lib/python3.12/site-packages/pymongo/pool_shared.py_set_non_inheritable_non_atomicr   2   s    b'"b'5:-.    c                     y)z6Dummy function for platforms that don't provide fcntl.N )r   s    r   r   r   ;   s    r    x   
   	   win32c                z    	 t        j                  | |      \  }}t        |      S # t        t        f$ r |cY S w xY wN)winregQueryValueExintOSError
ValueError)keynamedefaultvalue_s        r   _queryr3   I   sB    	**35HE1u:$ 	 N	s   #& ::z2SYSTEM\CurrentControlSet\Services\Tcpip\ParametersKeepAliveTimei m KeepAliveInterval  c                    t        t        t        dz        }t        t        t        dz        }|t        k  s	|t        k  r$| j                  t        j                  d||f       y y )Nr6      )min_WINDOWS_TCP_IDLE_MS_MAX_TCP_KEEPIDLE_WINDOWS_TCP_INTERVAL_MS_MAX_TCP_KEEPINTVLioctlsocketSIO_KEEPALIVE_VALS)sockidle_msinterval_mss      r   _set_keepalive_timesrD   _   sZ    *,=,DE24F4MN))[;S-SJJv001g{2KL .Tr    c                    t        t        |      rYt        t        |      }	 | j                  t        j                  |      }||kD  r"| j                  t        j                  ||       y y y # t        $ r Y y w xY wr(   )hasattrr?   getattr
getsockoptIPPROTO_TCP
setsockoptr,   )rA   
tcp_option	max_valuesockoptr0   s        r   _set_tcp_optionrN   g   sq    6:&fj1G //&*<*<gFY&OOF$6$6K ' '  s   AA+ +	A76A7c                j    t        | dt               t        | dt               t        | dt               y )NTCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT)rN   r;   r=   _MAX_TCP_KEEPCNTrA   s    r   rD   rD   t   s)    n.?@o/ABm-=>r    c                   | \  }}|	d|||fz  }n| d| }|r||z   }d|vr|t        |      z  }t        |t        j                        rt	        |      |t        |t
              rdt        |      v rt	        |      |t        |      |)z9Convert a socket.error to ConnectionFailure and raise it.z	%s:%d: %s: zconfigured timeouts	timed out)format_timeout_details
isinstancer?   timeoutr   r   strr   )addresserror
msg_prefixtimeout_detailshostportmsgs          r   _raise_connection_failurerc   z   s     JD$T4//b 3C'%o66%(S!u,	E8	$E
)B
 S!u,C e+r    c                    i }t        j                         }| j                  }| j                  }|r|dz  |d<   |r
|s|dz  |d<   |r|dz  |d<   |S )Nr6   	timeoutMSsocketTimeoutMSconnectTimeoutMS)r	   get_timeoutsocket_timeoutconnect_timeout)optionsdetailsrZ   ri   rj   s        r   _get_timeout_detailsrm      si    G!G++N--O&~g%3d%:!"&5&<"#Nr    c                b    d}| r*|dz  }dD ]  }|| v s|d| d| |    dz  } |d d }|dz  }|S )	N z (configured timeouts:)rf   re   rg    rV   zms,)r"   )rl   resultrZ   s      r   rX   rX      sf    F**K 	?G'!AgYb)9(:#>>	? #Mr    c                  .    e Zd ZddZddZedd       Zy)_CancellationContextc                    d| _         y )NF
_cancelledselfs    r   __init__z_CancellationContext.__init__   s	    r    c                    d| _         y)zCancel this context.TNrw   ry   s    r   cancelz_CancellationContext.cancel   s	    r    c                    | j                   S )zWas cancel called?rw   ry   s    r   	cancelledz_CancellationContext.cancelled   s     r    N)returnNone)r   bool)__name__
__module____qualname__r{   r}   propertyr   r"   r    r   ru   ru      s        r    ru   c           
       K   | \  }}|j                  d      rkt        t        d      st        d      t        j                  t        j                        }t        |j                                	 |j                  |       |S t        j                  }t        j                  r|dk7  rt        j                  }d}t        |||t        j                         d{   D ]  }|\  }}	}
}}	 t        j                  ||	t        t        dd      z  |
      }t        |j                                	 |j!                  t        j"                  t        j$                  d	       t'        j(                         }||j*                  }n|dk  rt        j,                  d
      |j/                  |       |j!                  t        j0                  t        j2                  d       t5        |       |j                  |       |c S  ||t        d      # t        $ r |j                           w xY w7 O# t        $ r t        j                  ||	|
      }Y :w xY w# t        $ r}|}|j                          Y d}~d}~ww xY wwzGiven (host, port) and PoolOptions, connect and return a raw socket object.

    Can raise socket.error.

    This is a modified version of create_connection from CPython >= 2.7.
    z.sockAF_UNIXz-UNIX-sockets are not supported on this system	localhostN)familytypeSOCK_CLOEXECr   r8   rW   Tzgetaddrinfo failed)endswithrF   r?   r   r   r   filenoconnectr,   closeAF_INEThas_ipv6	AF_UNSPECr
   SOCK_STREAMrG   rJ   rI   TCP_NODELAYr	   	remainingrj   rZ   
settimeout
SOL_SOCKETSO_KEEPALIVErD   r\   rk   r`   ra   rA   r   errresafsocktypeprotodummysarZ   es                  r   _async_create_connectionr      s     JD$ }}Wvy)#$STT}}V^^,'6	LLK ^^F4;.!!
C!$V&BTBTUU ),&HeUB	6==XPQ0R%RTYZD 	(6	OOF..0B0BAFoo'G!11Ann[11OOG$OOF--v/B/BDI &LLK3< 	 *++c  	JJL	 V  	6 ==Xu5D	6&  	CJJLL	sz   A.I=1H AI=H*I=-)H-I=0C	I9I=H''I=- II=II=	I:I5/I=5I::I=c                  K   t        | |       d{   }|j                  }||j                  |j                         |S | d   }	 t        rOt        j                         }|j                  dt        j                  |j                  ||             d{   }n9t        j                         }|j                  d|j                  |       d{   }|j"                  r>|j$                  s2|j&                  s&	 t)        j*                  j-                         |       j                  |j                         |S 7 +7 7 p# t        $ r |j                           t        t        f$ r4}|j                          t        |      }t!        | |d|       Y d}~d}~ww xY w# t        $ r j                           w xY wwzGiven (host, port) and PoolOptions, return a raw configured socket.

    Can raise socket.error, ConnectionFailure, or _CertificateError.

    Sets socket's SSL and timeout options.
    Nr   server_hostnameSSL handshake failed: r_   hostname)r   _ssl_contextr   ri   r   asyncioget_running_looprun_in_executor	functoolspartialwrap_socketr   r   r,   r   rm   rc   verify_modecheck_hostnametls_allow_invalid_hostnamessslmatch_hostnamegetpeercert)	r\   rk   rA   ssl_contextr`   loopssl_sockexcrl   s	            r   _async_configured_socketr     s     *'7;;D&&K../1:Dc ++-D!11!!+"9"94QUV H
 ++-D!11$8O8OQUVVH 	**33	x335E
 ../OY < W 

 	X c

 'w/!'30HZabbc ! 	NN	sv   GD=4GAE E 9E EE $G;%F#  G E E (F ,*FGF  G#F>>Gc                  	K   t        | |       d{   }|j                  }|j                  	|9t        t	        j
                         j                  	fd|       d{         S | d   }	 t	        j
                         j                  	fd|||       d{   \  }}|j                  r?|j                  s3|j                  s'	 t!        j"                  |j%                  d	      |
       t        |f      S 7 7 7 c# t        $ r j                           t        t        f$ r4}j                          t        |      }t        | |d|       Y d}~d}~ww xY w# t        $ r |j                           w xY ww)zGiven (host, port) and PoolOptions, return a configured AsyncNetworkingInterface.

    Can raise socket.error, ConnectionFailure, or _CertificateError.

    Sets protocol's SSL and timeout options.
    Nc                     t               S NrZ   r   r   s   r   <lambda>z0_configured_protocol_interface.<locals>.<lambda>N  s    8 r    rT   r   c                     t               S r   r   r   s   r   r   z0_configured_protocol_interface.<locals>.<lambda>W  s    OG4 r    )rA   r   r   r   r   peercertr   )r   r   ri   r   r   r   create_connectionr   abortr,   r   rm   rc   r   r   r   r   r   get_extra_info)
r\   rk   rA   r   r`   	transportprotocolr   rl   rZ   s
            @r   _configured_protocol_interfacer   >  s     *'7;;D&&K$$G'**,>>8t ?  
 	
 1:Dc %,$<$<$>$P$P4 	 %Q %
 
	8& 	**33	y77
CdS
 $Y$9::Y <
   	X c 'w/!'30HZabbc ! 	OO	sv   FC>AF"D #F1-D DD &$F&E# 1F FD (E ,*EFE  F#E>>Fc           
        | \  }}|j                  d      rkt        t        d      st        d      t        j                  t        j                        }t        |j                                	 |j                  |       |S t        j                  }t        j                  r|dk7  rt        j                  }d}t        j                  |||t        j                        D ]  }|\  }}	}
}}	 t        j                  ||	t        t        dd      z  |
      }t        |j                                	 |j!                  t        j"                  t        j$                  d	       t'        j(                         }||j*                  }n|dk  rt        j,                  d
      |j/                  |       |j!                  t        j0                  t        j2                  d       t5        |       |j                  |       |c S  ||t        d      # t        $ r |j                           w xY w# t        $ r t        j                  ||	|
      }Y 7w xY w# t        $ r}|}|j                          Y d}~d}~ww xY wr   )r   rF   r?   r   r   r   r   r   r,   r   r   r   r   getaddrinfor   rG   rJ   rI   r   r	   r   rj   rZ   r   r   r   rD   r   s                  r   _create_connectionr   v  s    JD$ }}Wvy)#$STT}}V^^,'6	LLK ^^F4;.!!
C!!$V&BTBTU ),&HeUB	6==XPQ0R%RTYZD 	(6	OOF..0B0BAFoo'G!11Ann[11OOG$OOF--v/B/BDI &LLK3< 	 *++c  	JJL	&  	6 ==Xu5D	6&  	CJJLL	s7   /H -)H*0C	IH'* II	I7I22I7c                   t        | |      }|j                  }||j                  |j                         |S | d   }	 t        r|j                  ||      }n|j                  |      }|j                  r>|j                  s2|j                  s&	 t        j                   j#                         |       j                  |j                         |S # t        $ r |j                           t        t        f$ r4}|j                          t        |      }t        | |d|       Y d}~d}~ww xY w# t        $ r j                           w xY wr   )r   r   r   ri   r   r   r   r   r,   r   rm   rc   r   r   r   r   r   r   r\   rk   rA   r   r`   r   r   rl   s           r   _configured_socketr     s;    gw/D&&K../1:Dc "..tT.JH"..t4H 	**33	x335E
 ../O1  

 	X c

 'w/!'30HZabbc ! 	NN	s#   +C %D/ (D,8*D''D,/E
c                   t        | |      }|j                  }|&|j                  |j                         t	        |      S | d   }	 t
        r|j                  ||      }n|j                  |      }|j                  r>|j                  s2|j                  s&	 t!        j"                  j%                         |       j                  |j                         t	        |      S # t        $ r |j                           t        t        f$ r4}|j                          t        |      }t        | |d|       Y d}~d}~ww xY w# t        $ r j                           w xY w)zGiven (host, port) and PoolOptions, return a NetworkingInterface wrapping a configured socket.

    Can raise socket.error, ConnectionFailure, or _CertificateError.

    Sets socket's SSL and timeout options.
    Nr   r   r   r   r   )r   r   r   ri   r   r   r   r   r   r,   r   rm   rc   r   r   r   r   r   r   r   s           r   _configured_socket_interfacer     sG    gw/D&&K../"4((1:Dc "..tT.JH"..t4H 	**33	x335E
 ../x((1  

 	X c

 'w/!'30HZabbc ! 	NN	s$   +C" %E "(D>
*D99D>E)r   r+   r   r   )rA   socket.socketrK   r[   rL   r+   r   r   )rA   r   r   r   )NN)
r\   r   r]   	Exceptionr^   zOptional[str]r_   Optional[dict[str, float]]r   r   )rk   r   r   zdict[str, float])rl   r   r   r[   )r\   r   rk   r   r   r   )r\   r   rk   r   r   zUnion[socket.socket, _sslConn])r\   r   rk   r   r   r   )r\   r   rk   r   r   r   )C__doc__
__future__r   r   r   r?   r   systypingr   r   r   r   r   pymongor	   pymongo.asynchronous.helpersr
   pymongo.errorsr   r   r   r   pymongo.network_layerr   r   r   pymongo.pool_optionsr   pymongo.ssl_supportr   r   pymongo.pyopenssl_contextr   pymongo.typingsr   r   r   r   r   r   ImportErrorr;   r=   rS   platform_winregr)   r3   OpenKeyHKEY_LOCAL_MACHINEr.   r:   r<   r,   rD   rN   rc   rm   rX   ru   r   r   r   r   r   r   r"   r    r   <module>r      s   0 "    
 
   5  a ` , 12(E99/    <<7 
(V^^%%'\
 	N#)##H '-c3F'M$		NM? !%26	,,, , 0	,
 ,:	 D,N55 +5#5p5;5; +5;5;pD,N.b.)o  EE	E  	N 	N
  (  '#' 	(sN   *D% D4 E 5E
E %	D10D14	E ?E EE 	EE