o
    sDiE                  
   @  s  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re' Z(e(e(e) e* de$d< noejdkre' e' e) e+ d de$d< nVejdkre, Z-ddej./dpe) d0e1e2e-dd de-d pd  de$d< n(e3e' e* e4 Z5e' d0d d! e5dd" D e) e5d" de$d< e6 &d#r"d0e6 d0e1e2ej7d$d0e1e2ej8 fe$d%< nd0e6 d0e1e2ej8fe$d%< d&Z9d'Z:d(Z;d)Z<dJd,d-Z=dKd/d0Z>dKd1d2Z?dKd3d4Z@dKd5d6ZAdKd7d8ZBdLd<d=ZCdMd>d?ZDd@ZEdNdDdEZFdFGdG G dHdI dIZHdS )OzPool 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 c                 C  s   g | ]}|r|qS  r(   ).0partr(   r(   R/home/alumno/antzosa8961/venv/lib/python3.10/site-packages/pymongo/pool_options.py
<listcomp>W   s    r,      PyPyz(Python %s)platformz/.dockerenvKUBERNETES_SERVICE_HOSTdocker
kubernetesreturndict[str, str]c                  C  s.   i } t t rt| d< t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)	containerr(   r(   r+   get_container_env_infop   s   
r>   boolc                  C  s*   t drdS t d} | r| dS dS )NAWS_LAMBDA_RUNTIME_APITAWS_EXECUTION_ENVAWS_Lambda_F)r   r:   
startswith)envr(   r(   r+   
_is_lambda}   s   


rE   c                   C     t tdS )NFUNCTIONS_WORKER_RUNTIMEr?   r   r:   r(   r(   r(   r+   _is_azure_func      rI   c                   C  s   t tdp
tdS )N	K_SERVICEFUNCTION_NAMErH   r(   r(   r(   r+   _is_gcp_func      rM   c                   C  rF   )NVERCELrH   r(   r(   r(   r+   
_is_vercel   rJ   rP   c                   C  s   t  pt pt pt S N)rE   rI   rM   rP   r(   r(   r(   r+   _is_faas   rN   rR   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   r:   int
ValueError)rS   valr(   r(   r+   _getenv_int   s   

rY   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 rd| d< td}|r|| d< | S )Nr=   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)	r>   rE   rI   rM   rP   countr   r:   rY   )rD   r=   r\   r^   rb   r(   r(   r+   _metadata_env   sH   


rf   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rd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rd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.NrD   r   r   r   r/    r   r   )lenbsonencode_MAX_METADATA_SIZEgetpopr   )	rg   env_nameos_typeencoded_sizeoverflowplatr   driver_versiondriver_namer(   r(   r+   _truncate_metadata   sT   
rx   fooidnac                   @  sX  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dSd$d%Z
dTd)d*ZedUd+d,ZedVd.d/ZedWd1d2ZedXd3d4ZedXd5d6ZedYd7d8ZedZd9d:Zed[d;d<Zed[d=d>ZedZd?d@Zed\dAdBZedYdCdDZed]dEdFZed^dGdHZed_dIdJZed`dKdLZedVdMdNZedadOdPZedbdQdRZdS )c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_sizerV   min_pool_sizemax_idle_time_secondsrU   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< |rn| | t }|rx|| jd< t| j d S )Nr   application{}|{}r   casyncrD   )_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_metadatarf   rx   )selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   r(   r(   r+   __init__*  sH   


zPoolOptions.__init__r   r3   ri   c                 C  s   |j r|j  | jd d  dv rdS t| j}|j r.d|d d |j |d d< |jr@d|d d |j|d d< |jrNd|d |j|d< || _dS )zUpdates the client's metadatar   r   |Nr   r   r/   )	r   lowerr   splitr   r   r   r   r/   )r   r   rg   r(   r(   r+   r   p  s$    


zPoolOptions._update_metadatac                 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`.
        maxPoolSizeminPoolSizeNi  maxIdleTimeMSwaitQueueTimeoutMS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+   r     s   zPoolOptions.max_pool_sizec                 C  r   )zThe minimum required number of concurrent connections that the pool
        will maintain to each connected server. Default is 0.
        )r   r   r(   r(   r+   r        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+   r     r   zPoolOptions.max_connectingc                 C  r   rQ   )r   r   r(   r(   r+   r        zPoolOptions.pause_enabledc                 C  r   )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   r(   r(   r+   r     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+   r     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+   r     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+   r     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+   r     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+   r     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   rQ   )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+   rg     s   
zPoolOptions.metadatac                 C  r   )z'A pymongo.server_api.ServerApi or None.)r   r   r(   r(   r+   r     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)$r   rV   r   rV   r   rU   r   r   r   r   r   rU   r   r   r   r?   r   r   r   r   r   r   r   r   r   rV   r   r?   r   r   r   r   r   r   r   r   )r   r   r3   ri   )r3   r   r3   r   )r3   r   )r3   rV   r3   r?   )r3   rU   )r3   r   )r3   r   )r3   r   )r3   r   )r3   r   )r3   r   )r3   r   )r3   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   rg   r   r   r(   r(   r(   r+   r{     sz    
Fr{   )r3   r4   r   )rS   rT   r3   rU   r   )rg   rh   r3   ri   )Ir   
__future__r   r   r   r/   syspathlibr   typingr   r   r   r   rl   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__rC   system_namemachinereleasemac_vergetwindowsversion_verenvironro   joinmaprT   system_aliasr   _aliasedpython_implementationpypy_version_infoversion_infor7   r;   r9   r<   r>   rE   rI   rM   rP   rR   rY   rf   rn   rx   rm   r{   r(   r(   r(   r+   <module>   s    	


(





	




%

;