o
    šhG  ã                
   @  sp  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
rkd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¡rŽe '¡ Z(e(e(e )¡ e *¡ dœe$d< nˆejdkr§e '¡ e '¡ e )¡ e +¡ d dœe$d< noejdkrÕe ,¡ Z-ddej. /d¡p»e )¡ d 0e1e2e-dd… ƒ¡de-d pÌd›  dœe$d< nAej &d¡rîe 3¡ d \Z(Z-Z4e(e(e4e-dœe$d< n(e 5e '¡ e *¡ e 6¡ ¡Z7e '¡ d  0d!d"„ e7dd#… D ƒ¡e )¡ e7d# dœe$d< e 8¡  &d$¡r;d  0e 8¡ d 0e1e2ej9ƒ¡d%d 0e1e2ej:ƒ¡ f¡e$d&< n8ej &d¡rad  0e 8¡ d 0e1e2ej:ƒ¡d'd  0e '¡ e *¡ f¡ f¡e$d&< nd  0e 8¡ d 0e1e2ej:ƒ¡f¡e$d&< d(Z;d)Z<d*Z=d+Z>dLd.d/„Z?dMd1d2„Z@dMd3d4„ZAdMd5d6„ZBdMd7d8„ZCdMd9d:„ZDdNd>d?„ZEdOd@dA„ZFdBZGdPdFdG„ZHdH IdI¡ G dJdK„ dKƒZJdS )QzPool 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ÚdriverZPyMongo)ÚnameÚversionúdict[str, Any]Ú	_METADATAÚlinux)Útyper   Úarchitecturer   ÚosÚdarwinÚwin32ÚWindowsÚPROCESSOR_ARCHITECTUREÚ.é   z-SPéÿÿÿÿÚ0Újavaú c                 C  s   g | ]}|r|‘qS © r(   )Ú.0Úpartr(   r(   úG/var/www/html/venv/lib/python3.10/site-packages/pymongo/pool_options.pyÚ
<listcomp>b   s    r,   é   ÚPyPyz(Python %s)Úplatformz(%s)z/.dockerenvZKUBERNETES_SERVICE_HOSTÚdockerZ
kubernetesÚreturnúdict[str, str]c                  C  s.   i } t tƒ ¡ rt| d< t t¡rt| d< | S )zŽReturns the runtime and orchestrator of a container.
    If neither value is present, the metadata client.env.container field will be omitted.ÚruntimeZorchestrator)r   ÚDOCKER_ENV_PATHÚexistsÚRUNTIME_NAME_DOCKERr   ÚgetenvÚENV_VAR_K8SÚORCHESTRATOR_NAME_K8S)Ú	containerr(   r(   r+   Úget_container_env_infoƒ   s   
r;   Úboolc                  C  s*   t  d¡rdS t  d¡} | r|  d¡S dS )NZAWS_LAMBDA_RUNTIME_APITZAWS_EXECUTION_ENVZAWS_Lambda_F)r   r7   Ú
startswith)Úenvr(   r(   r+   Ú
_is_lambda   s   


r?   c                   C  ó   t t d¡ƒS )NZFUNCTIONS_WORKER_RUNTIME©r<   r   r7   r(   r(   r(   r+   Ú_is_azure_func™   ó   rB   c                   C  s   t t d¡p
t d¡ƒS )NZ	K_SERVICEZFUNCTION_NAMErA   r(   r(   r(   r+   Ú_is_gcp_func   ó   rD   c                   C  r@   )NZVERCELrA   r(   r(   r(   r+   Ú
_is_vercel¡   rC   rF   c                   C  s   t ƒ ptƒ ptƒ ptƒ S ©N)r?   rB   rD   rF   r(   r(   r(   r+   Ú_is_faas¥   rE   rH   ÚkeyÚstrúOptional[int]c                 C  s2   t  | ¡}|s	dS zt|ƒW S  ty   Y dS w )zMLike os.getenv but returns an int, or None if the value is missing/malformed.N)r   r7   ÚintÚ
ValueError)rI   Úvalr(   r(   r+   Ú_getenv_int©   s   

ÿrO   c                  C  s
  i } t ƒ }|r|| d< tƒ tƒ tƒ tƒ f d¡dkr| S tƒ r<d| d< t d¡}|r.|| d< tdƒ}|d ur:|| d	< | S tƒ rEd
| d< | S tƒ rqd| d< t d¡}|rW|| d< tdƒ}|d urc|| d	< tdƒ}|d uro|| d< | S tƒ rƒd| d< t d¡}|rƒ|| d< | S )Nr:   Té   z
aws.lambdar   Z
AWS_REGIONÚregionZAWS_LAMBDA_FUNCTION_MEMORY_SIZEÚ	memory_mbz
azure.funczgcp.funcZFUNCTION_REGIONZFUNCTION_MEMORY_MBZFUNCTION_TIMEOUT_SECÚtimeout_secZvercelZVERCEL_REGION)	r;   r?   rB   rD   rF   Úcountr   r7   rO   )r>   r:   rQ   rR   rS   r(   r(   r+   Ú_metadata_env´   sH   
îð
û
rU   i   ÚmetadataúMutableMapping[str, Any]ÚNonec           	      C  sæ  t t | ¡ƒtkrdS |  di ¡ d¡}|rd|i| d< t t | ¡ƒtkr'dS |  di ¡ d¡}|r8d|i| d< t t | ¡ƒtkrCdS |  dd¡ t t | ¡ƒ}|tkrVdS |t }|  dd¡}|ri|d| … }|rp|| d< n|  dd¡ t t | ¡ƒ}|tkrƒdS |t }|  di ¡}|rñ| d	¡d| … }t |ƒt td d	 ƒkr¬|| d d	< n
td d	 | d d	< t t | ¡ƒ}|tkrÃdS |t }| 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.Nr>   r   r   r   r/   Ú r   r   )ÚlenÚbsonÚencodeÚ_MAX_METADATA_SIZEÚgetÚpopr   )	rV   Úenv_nameZos_typeZencoded_sizeÚoverflowÚplatr   Zdriver_versionZdriver_namer(   r(   r+   Ú_truncate_metadataÝ   sT   
ðrc   ZfooÚidnac                   @  sN  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dOd$d%„Z
edPd'd(„ƒZedQd*d+„ƒZedRd-d.„ƒZedSd/d0„ƒZedSd1d2„ƒZedTd3d4„ƒZedUd5d6„ƒZedVd7d8„ƒZedVd9d:„ƒZedUd;d<„ƒZedWd=d>„ƒZedTd?d@„ƒZedXdAdB„ƒZedYdCdD„ƒZedZdEdF„ƒZed[dGdH„ƒZedQdIdJ„ƒZed\dKdL„ƒZed]dMdN„ƒZdS )^Ú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

    )Z__max_pool_sizeZ__min_pool_sizeZ__max_idle_time_secondsZ__connect_timeoutZ__socket_timeoutZ__wait_queue_timeoutZ__ssl_contextZ__tls_allow_invalid_hostnamesZ__event_listenersZ	__appnameZ__driverZ
__metadataZ__compression_settingsZ__max_connectingZ__pause_enabledZ__server_apiZ__load_balancedZ__credentialsNFTÚmax_pool_sizerL   Úmin_pool_sizeÚmax_idle_time_secondsrK   Úconnect_timeoutúOptional[float]Úsocket_timeoutÚwait_queue_timeoutÚssl_contextúOptional[SSLContext]Útls_allow_invalid_hostnamesr<   Ú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                 C  s`  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _t t¡| _|
rBd|
i| jd< tƒ rUd | jd d d¡| jd d< |sgd | jd d d¡| jd d< |rŸ|jr}d | jd d |j¡| jd d< |jrd td d |j¡| jd d< |jrŸd td |j¡| jd< tƒ }|r©|| jd	< t| jƒ d S )
Nr   Zapplicationz{}|{}r   ÚcÚasyncr   r/   r>   )Ú_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   Úformatr   r   r/   rU   rc   )Úselfrf   rg   rh   ri   rk   rl   rm   ro   rp   rr   r   ru   rw   rx   ry   r{   r}   r   r>   r(   r(   r+   Ú__init__=  s^   
þþþ
þ
zPoolOptions.__init__r1   c                 C  ó   | j S )z;A :class:`~pymongo.auth.MongoCredentials` instance or None.)r’   ©r—   r(   r(   r+   Ú_credentialsŽ  ó   zPoolOptions._credentialsr   c                 C  s   i }| j tkr| j |d< | jtkr| j|d< | jtkr)| jdus"J ‚| jd |d< | jtkr<| jdus5J ‚| jd |d< | jt	krF| j|d< |S )zqThe non-default options this pool was created with.

        Added for CMAP's :class:`PoolCreatedEvent`.
        ZmaxPoolSizeZminPoolSizeNiè  ZmaxIdleTimeMSZwaitQueueTimeoutMSZmaxConnecting)
r‚   r   rƒ   r   r„   r
   r‡   r   rŽ   r	   )r—   Úoptsr(   r(   r+   Únon_default_options“  s   







zPoolOptions.non_default_optionsÚfloatc                 C  r™   )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š   r(   r(   r+   rf   ¨  s   zPoolOptions.max_pool_sizec                 C  r™   )zŠThe minimum required number of concurrent connections that the pool
        will maintain to each connected server. Default is 0.
        )rƒ   rš   r(   r(   r+   rg   ·  ó   zPoolOptions.min_pool_sizec                 C  r™   )zgThe maximum number of concurrent connection creation attempts per
        pool. Defaults to 2.
        )rŽ   rš   r(   r(   r+   rw   ¾  r    zPoolOptions.max_connectingc                 C  r™   rG   )r   rš   r(   r(   r+   rx   Å  ó   zPoolOptions.pause_enabledc                 C  r™   )z¦The 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š   r(   r(   r+   rh   É  s   z!PoolOptions.max_idle_time_secondsc                 C  r™   )z>How long a connection can take to be opened before timing out.)r…   rš   r(   r(   r+   ri   Ñ  rœ   zPoolOptions.connect_timeoutc                 C  r™   )zBHow long a send or receive on a socket can take before timing out.)r†   rš   r(   r(   r+   rk   Ö  rœ   zPoolOptions.socket_timeoutc                 C  r™   )zhHow long a thread will wait for a socket from the pool if the pool
        has no free sockets.
        )r‡   rš   r(   r(   r+   rl   Û  r    zPoolOptions.wait_queue_timeoutc                 C  r™   )zAn SSLContext instance or None.)rˆ   rš   r(   r(   r+   Ú_ssl_contextâ  rœ   zPoolOptions._ssl_contextc                 C  r™   )z If True skip ssl.match_hostname.)r‰   rš   r(   r(   r+   ro   ç  rœ   z'PoolOptions.tls_allow_invalid_hostnamesc                 C  r™   )z2An instance of pymongo.monitoring._EventListeners.)rŠ   rš   r(   r(   r+   Ú_event_listenersì  rœ   zPoolOptions._event_listenersc                 C  r™   )zAThe application name, for sending with hello in server handshake.)r‹   rš   r(   r(   r+   rr   ñ  rœ   zPoolOptions.appnamec                 C  r™   )z=Driver name and version, for sending with hello in handshake.)rŒ   rš   r(   r(   r+   r   ö  rœ   zPoolOptions.driverc                 C  r™   rG   )r   rš   r(   r(   r+   Ú_compression_settingsû  r¡   z!PoolOptions._compression_settingsc                 C  s
   | j  ¡ S )zCA dict of metadata about the application, driver, os, and platform.)r•   r“   rš   r(   r(   r+   rV   ÿ  s   
zPoolOptions.metadatac                 C  r™   )z'A pymongo.server_api.ServerApi or None.)r   rš   r(   r(   r+   ry     rœ   zPoolOptions.server_apic                 C  r™   )z6True if this Pool is configured in load balanced mode.)r‘   rš   r(   r(   r+   r{   	  rœ   zPoolOptions.load_balanced)$rf   rL   rg   rL   rh   rK   ri   rj   rk   rj   rl   rK   rm   rn   ro   r<   rp   rq   rr   rs   r   rt   ru   rv   rw   rL   rx   r<   ry   rz   r{   r|   r}   r~   r   r|   )r1   r~   ©r1   r   )r1   rŸ   )r1   rL   ©r1   r<   )r1   rK   )r1   rj   )r1   rn   )r1   rq   )r1   rs   )r1   rt   )r1   rv   )r1   rz   )r1   r|   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   r
   r   r	   r˜   Úpropertyr›   rž   rf   rg   rw   rx   rh   ri   rk   rl   r¢   ro   r£   rr   r   r¤   rV   ry   r{   r(   r(   r(   r+   re     sx    íQre   )r1   r2   r¦   )rI   rJ   r1   rK   r¥   )rV   rW   r1   rX   )Krª   Ú
__future__r   r“   r   r/   ÚsysÚpathlibr   Útypingr   r   r   r   r[   Zpymongor   Zpymongo.commonr	   r
   r   r   r   r   Zpymongo.auth_sharedr   Zpymongo.compression_supportr   Zpymongo.driver_infor   Zpymongo.monitoringr   Zpymongo.pyopenssl_contextr   Zpymongo.server_apir   r   Ú__annotations__r=   ÚsystemÚ_nameÚmachineÚreleaseÚmac_verÚgetwindowsversionÚ_verÚenvironr^   ÚjoinÚmaprJ   Újava_verZ_archÚsystem_aliasr   Z_aliasedÚpython_implementationÚpypy_version_infoÚversion_infor4   r8   r6   r9   r;   r?   rB   rD   rF   rH   rO   rU   r]   rc   r\   re   r(   r(   r(   r+   Ú<module>   sª    	û

ú
(úù
üý
ÿý
ÿÿ


	




%

;