
    _i_J                    B   U 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mZ ddl	m
Z
mZmZmZ ddlZddlmZ ddlmZmZmZmZmZmZ e
r$ddlmZ dd	lmZ dd
lmZ ddlmZ ddl m!Z! ddl"m#Z# ddediZ$de%d<   ej        &                    d          r5 ej'                    Z(e(e( ej)                     ej*                    de$d<   nej        dk    rF ej'                     ej'                     ej)                     ej+                    d         de$d<   nEej        dk    rt ej,                    Z-ddej.        /                    d          p ej)                    d0                     e1e2e-dd                             de-d         pd z   de$d<   nej        &                    d          r$ ej3                    d         \  Z(Z-Z4e(e(e4e-de$d<   n ej5         ej'                     ej*                     ej6                              Z7 ej'                    d 0                    d! e7dd"         D                        ej)                    e7d"         de$d<    ej8                    &                    d#          rpd 0                     ej8                    d0                     e1e2ej9                            d$d0                     e1e2ej:                            z  f          e$d%<   nej        &                    d          r}d 0                     ej8                    d0                     e1e2ej:                            d&d 0                     ej'                     ej*                    f          z  f          e$d%<   nId 0                     ej8                    d0                     e1e2ej:                            f          e$d%<   d'Z;d(Z<d)Z=d*Z>dBd-Z?dCd/Z@dCd0ZAdCd1ZBdCd2ZCdCd3ZDdDd7ZEdEd8ZFd9ZGdFd=ZHd>I                    d?            G d@ dA          ZJdS )GzPool options for AsyncMongoClient/MongoClient.

.. seealso:: This module is compatible with both the synchronous and asynchronous PyMongo APIs.
    )annotationsN)Path)TYPE_CHECKINGAnyMutableMappingOptional)__version__)MAX_CONNECTINGMAX_IDLE_TIME_SECMAX_POOL_SIZEMIN_POOL_SIZEWAIT_QUEUE_TIMEOUThas_c)MongoCredential)CompressionSettings)
DriverInfo)_EventListeners)
SSLContext)	ServerApidriverPyMongo)nameversiondict[str, Any]	_METADATAlinux)typer   architecturer   osdarwinwin32WindowsPROCESSOR_ARCHITECTURE.   z-SP0java c                    g | ]}||S  r+   ).0parts     7D:\Nbitz\venv\Lib\site-packages\pymongo/pool_options.py
<listcomp>r/   b   s    @@@44@$@@@       PyPyz(Python %s)platformz(%s)z/.dockerenvKUBERNETES_SERVICE_HOSTdocker
kubernetesreturndict[str, str]c                     i } t          t                                                    r
t          | d<   t	          j        t                    r
t          | d<   | S )zReturns the runtime and orchestrator of a container.
    If neither value is present, the metadata client.env.container field will be omitted.runtimeorchestrator)r   DOCKER_ENV_PATHexistsRUNTIME_NAME_DOCKERr   getenvENV_VAR_K8SORCHESTRATOR_NAME_K8S)	containers    r.   get_container_env_inforC      sQ     IO##%% 32	)	y :$9	.!r0   boolc                     t          j        d          rdS t          j        d          } | r|                     d          S dS )NAWS_LAMBDA_RUNTIME_APITAWS_EXECUTION_ENVAWS_Lambda_F)r   r?   
startswith)envs    r.   
_is_lambdarK      sI    	y)** t
)'
(
(C
 -~~m,,,5r0   c                 D    t          t          j        d                    S )NFUNCTIONS_WORKER_RUNTIMErD   r   r?   r+   r0   r.   _is_azure_funcrO      s    	455666r0   c                 l    t          t          j        d          pt          j        d                    S )N	K_SERVICEFUNCTION_NAMErN   r+   r0   r.   _is_gcp_funcrS      s)    	+&&D")O*D*DEEEr0   c                 D    t          t          j        d                    S )NVERCELrN   r+   r0   r.   
_is_vercelrV      s    	(##$$$r0   c                 r    t                      p)t                      pt                      pt                      S N)rK   rO   rS   rV   r+   r0   r.   _is_faasrY      s)    <<M>++M|~~MMr0   keystrOptional[int]c                t    t          j        |           }|sdS 	 t          |          S # t          $ r Y dS w xY w)zMLike os.getenv but returns an int, or None if the value is missing/malformed.N)r   r?   int
ValueError)rZ   vals     r.   _getenv_intra      sN    
)C..C t3xx   tts   ) 
77c                    i } t                      }|r|| d<   t                      t                      t                      t	                      f                    d          dk    r| S t                      r7d| d<   t          j        d          }|r|| d<   t          d          }||| d	<   nt                      rd
| d<   nt                      rMd| d<   t          j        d          }|r|| d<   t          d          }||| d	<   t          d          }||| d<   n.t	                      r d| d<   t          j        d          }|r|| d<   | S )NrB   T   z
aws.lambdar   
AWS_REGIONregionAWS_LAMBDA_FUNCTION_MEMORY_SIZE	memory_mbz
azure.funczgcp.funcFUNCTION_REGIONFUNCTION_MEMORY_MBFUNCTION_TIMEOUT_SECtimeout_secvercelVERCEL_REGION)	rC   rK   rO   rS   rV   countr   r?   ra   )rJ   rB   re   rg   rk   s        r.   _metadata_envro      sx   C&((I %$Kn&&
EKKDQQUVVV
|| #"F<(( 	#"CM ABB	 (C			 #"F	 # F,-- 	#"CM 455	 (C!"899"!,C	 #F?++ 	#"CMJr0   i   metadataMutableMapping[str, Any]Nonec                   t          t          j        |                     t          k    rdS |                     di                               d          }|rd|i| d<   t          t          j        |                     t          k    rdS |                     di                               d          }|rd|i| d<   t          t          j        |                     t          k    rdS |                     dd           t          t          j        |                     }|t          k    rdS |t          z
  }|                     dd          }|r|d|          }|r|| d<   n|                     dd           t          t          j        |                     }|t          k    rdS |t          z
  }|                     di           }|r)|                    d	          d|          }t          |          t          t          d         d	                   k    r|| d         d	<   nt          d         d	         | d         d	<   t          t          j        |                     }|t          k    rdS |t          z
  }|                    d          d|          }t          |          t          t          d         d                   k    r|| d         d<   dS t          d         d         | d         d<   dS dS )
zPerform metadata truncation.NrJ   r   r   r   r3    r   r   )lenbsonencode_MAX_METADATA_SIZEgetpopr   )	rp   env_nameos_typeencoded_sizeoverflowplatr   driver_versiondriver_names	            r.   _truncate_metadatar      s   
4;x  !!%777||E2&&**622H -!8,
4;x  !!%777ll4$$((00G + '*
4;x  !!%777LLt{8,,--L)))00H<<
B''D  JhYJ '#Z&&&t{8,,--L)))00H\\(B''F EI..z	z:~#i&9)&D"E"EEE,:HXy)),5h,?	,JHXy)4;x0011---F"44jj((8)4{s9X#6v#>????)4HXv&&&)28)<V)DHXv&&&!E Er0   fooidnac                     e Zd ZdZdZeeeddedddddde	dddddfd>d$Z
d?d(Zed@d)            ZedAd+            ZedBd-            ZedCd.            ZedCd/            ZedDd0            ZedEd1            ZedFd2            ZedFd3            ZedEd4            ZedGd5            ZedDd6            ZedHd7            ZedId8            ZedJd9            ZedKd:            ZedAd;            ZedLd<            ZedMd=            ZdS )NPoolOptionsak  Read only connection pool options for an AsyncMongoClient/MongoClient.

    Should not be instantiated directly by application developers. Access
    a client's pool options via
    :attr:`~pymongo.client_options.ClientOptions.pool_options` instead::

      pool_opts = client.options.pool_options
      pool_opts.max_pool_size
      pool_opts.min_pool_size

    )__max_pool_size__min_pool_size__max_idle_time_seconds__connect_timeout__socket_timeout__wait_queue_timeout__ssl_context__tls_allow_invalid_hostnames__event_listeners	__appname__driver
__metadata__compression_settings__max_connecting__pause_enabled__server_api__load_balanced__credentialsNFTmax_pool_sizer^   min_pool_sizemax_idle_time_secondsr\   connect_timeoutOptional[float]socket_timeoutwait_queue_timeoutssl_contextOptional[SSLContext]tls_allow_invalid_hostnamesrD   event_listenersOptional[_EventListeners]appnameOptional[str]r   Optional[DriverInfo]compression_settingsOptional[CompressionSettings]max_connectingpause_enabled
server_apiOptional[ServerApi]load_balancedOptional[bool]credentialsOptional[MongoCredential]is_syncc                   || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        || _        || _        || _        || _        t#          j        t&                    | _        |
rd|
i| j        d<   t+                      r5d                    | j        d         d         d          | j        d         d<   |s5d                    | j        d         d         d          | j        d         d<   |r|                     |           t1                      }|r
|| j        d<   t3          | j                   d S )Nr   application{}|{}r   casyncrJ   )_PoolOptions__max_pool_size_PoolOptions__min_pool_size#_PoolOptions__max_idle_time_seconds_PoolOptions__connect_timeout_PoolOptions__socket_timeout _PoolOptions__wait_queue_timeout_PoolOptions__ssl_context)_PoolOptions__tls_allow_invalid_hostnames_PoolOptions__event_listeners_PoolOptions__appname_PoolOptions__driver"_PoolOptions__compression_settings_PoolOptions__max_connecting_PoolOptions__pause_enabled_PoolOptions__server_api_PoolOptions__load_balanced_PoolOptions__credentialscopydeepcopyr   _PoolOptions__metadatar   format_update_metadataro   r   )selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rJ   s                       r.   __init__zPoolOptions.__init__=  s   *  -,'<$!0 .$6!(-H*!0 &:# .,&,(-	22 	?.4g->DOM* 77 	07)&11 1DOH%f-  	07)&11 1DOH%f-  	*!!&)))oo 	)%(DOE"4?+++++r0   r   r7   rr   c                ,   |j         rS|j                                         | j        d         d                                                             d          v rdS t	          j        | j                  }|j         r0d                    |d         d         |j                   |d         d<   |j        r0d                    |d         d         |j                  |d         d<   |j        r$d                    |d         |j                  |d<   || _        dS )zUpdates the client's metadatar   r   |Nr   r   r3   )	r   lowerr   splitr   r   r   r   r3   )r   r   rp   s      r.   r   zPoolOptions._update_metadata  s   ; 	6;,,..$/(2KF2S2Y2Y2[2[2a2a3
 3
 
 
 F=11; 	)0"6** *HXv& > 	,3NN"9-- -HXy) ? 	Y#*>>(:2F#X#XHZ "r0   c                    | j         S )z;A :class:`~pymongo.auth.MongoCredentials` instance or None.)r   r   s    r.   _credentialszPoolOptions._credentials       !!r0   r   c                >   i }| j         t          k    r
| j         |d<   | j        t          k    r
| j        |d<   | j        t
          k    r| j        J | j        dz  |d<   | j        t          k    r| j        J | j        dz  |d<   | j        t          k    r
| j        |d<   |S )zqThe non-default options this pool was created with.

        Added for CMAP's :class:`PoolCreatedEvent`.
        maxPoolSizeminPoolSizeNi  maxIdleTimeMSwaitQueueTimeoutMSmaxConnecting)
r   r   r   r   r   r   r   r   r   r
   )r   optss     r.   non_default_optionszPoolOptions.non_default_options  s     =00"&"6D=00"&"6D'+<<</;;;$($@4$GD!$(:::,888)-)BT)ID%& N22$($9D!r0   floatc                    | j         S )aQ  The maximum allowable number of concurrent connections to each
        connected server. Requests to a server will block if there are
        `maxPoolSize` outstanding connections to the requested server.
        Defaults to 100. Cannot be 0.

        When a server's pool has reached `max_pool_size`, operations for that
        server block waiting for a socket to be returned to the pool. If
        ``waitQueueTimeoutMS`` is set, a blocked operation will raise
        :exc:`~pymongo.errors.ConnectionFailure` after a timeout.
        By default ``waitQueueTimeoutMS`` is not set.
        )r   r   s    r.   r   zPoolOptions.max_pool_size  s     ##r0   c                    | j         S )zThe minimum required number of concurrent connections that the pool
        will maintain to each connected server. Default is 0.
        )r   r   s    r.   r   zPoolOptions.min_pool_size  s    
 ##r0   c                    | j         S )zgThe maximum number of concurrent connection creation attempts per
        pool. Defaults to 2.
        )r   r   s    r.   r   zPoolOptions.max_connecting  s    
 $$r0   c                    | j         S rX   )r   r   s    r.   r   zPoolOptions.pause_enabled  s    ##r0   c                    | j         S )zThe maximum number of seconds that a connection can remain
        idle in the pool before being removed and replaced. Defaults to
        `None` (no limit).
        )r   r   s    r.   r   z!PoolOptions.max_idle_time_seconds  s     ++r0   c                    | j         S )z>How long a connection can take to be opened before timing out.)r   r   s    r.   r   zPoolOptions.connect_timeout       %%r0   c                    | j         S )zBHow long a send or receive on a socket can take before timing out.)r   r   s    r.   r   zPoolOptions.socket_timeout  s     $$r0   c                    | j         S )zhHow long a thread will wait for a socket from the pool if the pool
        has no free sockets.
        )r   r   s    r.   r   zPoolOptions.wait_queue_timeout  s    
 ((r0   c                    | j         S )zAn SSLContext instance or None.)r   r   s    r.   _ssl_contextzPoolOptions._ssl_context  r   r0   c                    | j         S )z If True skip ssl.match_hostname.)r   r   s    r.   r   z'PoolOptions.tls_allow_invalid_hostnames  s     11r0   c                    | j         S )z2An instance of pymongo.monitoring._EventListeners.)r   r   s    r.   _event_listenerszPoolOptions._event_listeners  r   r0   c                    | j         S )zAThe application name, for sending with hello in server handshake.)r   r   s    r.   r   zPoolOptions.appname  s     ~r0   c                    | j         S )z=Driver name and version, for sending with hello in handshake.)r   r   s    r.   r   zPoolOptions.driver  s     }r0   c                    | j         S rX   )r   r   s    r.   _compression_settingsz!PoolOptions._compression_settings  s    **r0   c                4    | j                                         S )zCA dict of metadata about the application, driver, os, and platform.)r   r   r   s    r.   rp   zPoolOptions.metadata  s     ##%%%r0   c                    | j         S )z'A pymongo.server_api.ServerApi or None.)r   r   s    r.   r   zPoolOptions.server_api  s       r0   c                    | j         S )z6True if this Pool is configured in load balanced mode.)r   r   s    r.   r   zPoolOptions.load_balanced  s     ##r0   )$r   r^   r   r^   r   r\   r   r   r   r   r   r\   r   r   r   rD   r   r   r   r   r   r   r   r   r   r^   r   rD   r   r   r   r   r   r   r   r   )r   r   r7   rr   )r7   r   r7   r   )r7   r   )r7   r^   r7   rD   )r7   r\   )r7   r   )r7   r   )r7   r   )r7   r   )r7   r   )r7   r   )r7   r   )r7   r   ) __name__
__module____qualname____doc__	__slots__r   r   r   r   r
   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp   r   r   r+   r0   r.   r   r     s       
 
I. +*/@+/*.,>,0,159!%'+>B,"*.(,15"&'D, D, D, D, D,L# # # #0 " " " X"    X( $ $ $ X$ $ $ $ X$ % % % X% $ $ $ X$ , , , X, & & & X& % % % X% ) ) ) X) " " " X" 2 2 2 X2 & & & X&    X    X + + + X+ & & & X& ! ! ! X! $ $ $ X$ $ $r0   r   )r7   r8   r   )rZ   r[   r7   r\   r   )rp   rq   r7   rr   )Kr   
__future__r   r   r   r3   syspathlibr   typingr   r   r   r   rv   pymongor	   pymongo.commonr
   r   r   r   r   r   pymongo.auth_sharedr   pymongo.compression_supportr   pymongo.driver_infor   pymongo.monitoringr   pymongo.pyopenssl_contextr   pymongo.server_apir   r   __annotations__rI   system_namemachinereleasemac_vergetwindowsversion_verenvironry   joinmapr[   java_ver_archsystem_aliasr   _aliasedpython_implementationpypy_version_infoversion_infor<   r@   r>   rA   rC   rK   rO   rS   rV   rY   ra   ro   rx   r   rw   r   r+   r0   r.   <module>r     sZ     # " " " " "  				  



       ? ? ? ? ? ? ? ? ? ? ? ?                        -333333??????......222222444444,,,,,, &	k'R'RS	 S S S S<7## 3
 HOE((**#8#%% IdOO 	\X!!!!((** $8#%%a( IdOO 	\W 3 ""D
'?@@VDTHDTDVDV88CCT"1"X..//2IRC2I2II IdOO 	\V$$ **,,R0E4  IdOO %x$_X_%6%68H8H8J8JL\HL\L^L^__H!!@@8BQB<@@@AA((**A;	 IdO "8!##..v66 HH*H*,,HHSSc34455CHHSSc.>%?%?@@@	
 Ij 	\V$$ HH*H*,,HHSSc.//00SXXx002B(2B2D2DEFFF	
 Ij  HH	'	'	)	)388CCS=M4N4N+O+OP Ij  ' $ 
 
 
 
   7 7 7 7F F F F% % % %N N N N   " " " "J  4E 4E 4E 4Ev V   ~$ ~$ ~$ ~$ ~$ ~$ ~$ ~$ ~$ ~$r0   