
    [j0                    `   d Z ddlmZ ddlmZ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 ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ ddlmZm Z m!Z! ddl"m#Z# ddl$m%Z% ddl&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Z/d-d Z0d.d"Z1d/d$Z2d0d&Z3d1d(Z4 G d) d*          Z5d+S )2z$Tools to parse mongo client options.    )annotations)TYPE_CHECKINGAnyMappingOptionalSequencecast)_parse_codec_options)common)MongoCredential_build_credentials_tuple)validate_boolean)CompressionSettings)ConfigurationError)_EventListener_EventListeners)PoolOptions)ReadConcern)_ServerModemake_read_preferenceread_pref_mode_from_name)any_server_selector)get_ssl_context)WriteConcern)CodecOptions)AutoEncryptionOpts)
SSLContext)_ServerSelectorusernamestrpassworddatabaseOptional[str]optionsMapping[str, Any]returnOptional[MongoCredential]c                    |                     d| rdnd          }|                     d          }| s|rt          ||| |||          S dS )z!Parse authentication credentials.authmechanismDEFAULTN
authsource)getr   )r   r!   r"   r$   	mechanismsources         Z/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/pymongo/client_options.py_parse_credentialsr0   -   s`     O(-LYYMMI[[&&F b9 b'	68XwX`aaa4    r   c                    d| v r| d         S |                      dd          }t          |          }|                      d          }|                      dd          }t          |||          S )zParse read preference options.read_preferencereadpreferenceprimaryreadpreferencetagsmaxstalenessseconds)r,   r   r   )r$   namemodetagsmax_stalenesss        r/   _parse_read_preferencer=   8   sr    G##());;'33D#D))D;;+,,DKK 5r::MdM:::r1   r   c                    |                      d          }|                      d          }|                      d          }|                      d          }t          ||||          S )zParse write concern options.w
wtimeoutmsjournalfsync)r,   r   )r$   concernwtimeoutjrB   s        r/   _parse_write_concernrF   D   sZ    kk#G{{<((HIAKK  E1e444r1   r   c                J    |                      d          }t          |          S )zParse read concern options.readconcernlevel)r,   r   )r$   rC   s     r/   _parse_read_concernrI   M   s"    kk,--Gwr1   !tuple[Optional[SSLContext], bool]c           	        |                      d          }|t          d|           |                      d          }|                      d          }|                      d          }|                      d          }|                      dd          }|                      d	d          }|                      d
d          }g }	dD ]#}
|
| v r| |
         r|	                    |
           $dD ]#}
|
| v r| |
         s|	                    |
           $|	r,|d}n'|s%t          dd                    |	          z            |rt          |||||||          }||fS d|fS )zParse ssl options.tlsNtlscertificatekeyfiletlscertificatekeyfilepassword	tlscafile
tlscrlfiletlsallowinvalidcertificatesFtlsallowinvalidhostnamestlsdisableocspendpointcheck)rM   rN   rO   rP   )rQ   rR   rS   TzmTLS has not been enabled but the following tls parameters have been set: %s. Please set `tls=True` or remove.z, )r,   r   appendr   joinr   )r$   use_tlscertfile
passphraseca_certscrlfileallow_invalid_certificatesallow_invalid_hostnamesdisable_ocsp_endpoint_checkenabled_tls_optsoptctxs               r/   _parse_ssl_optionsra   S   s   kk%  G((({{233H<==J{{;''Hkk,''G!(-JE!R!R%kk*DeLL")++.KU"S"S ) ) '>>gcl>##C((( ) ) '>>'#,>##C((( 
?GG 	$79=CS9T9TU    
,&#'
 
 +++(((r1   r   c                   t          | |||          }|                    dt          j                  }|                    dt          j                  }|                    dt          j                  }|||k    rt          d          |                    dt          j                  }|                    d          }	|                    dt          j                  }
t          t          t          t                            |                    d	                    }|                    d
          }|                    d          }|                    d          }t          |                    dg           |                    dd                    }t          |          \  }}|                    d          }|                    dt          j                  }t!          |||||	|
||t#          |          |||||||          S )zParse connection pool options.maxpoolsizeminpoolsizemaxidletimemsNz3minPoolSize must be smaller or equal to maxPoolSizeconnecttimeoutmssockettimeoutmswaitqueuetimeoutmsevent_listenersappnamedriver
server_apicompressorszlibcompressionlevelr8   loadbalancedmaxconnecting)max_connectingrl   load_balancedcredentials)r0   r,   r   MAX_POOL_SIZEMIN_POOL_SIZEMAX_IDLE_TIME_SEC
ValueErrorCONNECT_TIMEOUTWAIT_QUEUE_TIMEOUTr	   r   r   r   r   ra   MAX_CONNECTINGr   r   )r   r!   r"   r$   rs   max_pool_sizemin_pool_sizemax_idle_time_secondsconnect_timeoutsocket_timeoutwait_queue_timeoutri   rj   rk   rl   compression_settingsssl_contexttls_allow_invalid_hostnamesrr   rq   s                       r/   _parse_pool_optionsr      s    %Xx7KKKKKv/CDDMKKv/CDDM#KK9QRR ]]%B%BNOOOkk"4f6LMMO[[!233N %96;TUU8H^$<=w{{K\?]?]^^Okk)$$G[[""F\**J.M2&&4JB(O(O  0B'/J/J,K,KK//M[[&2GHHN#((%#!   r1   c                     e Zd ZdZd,d	Zed-d            Zed.d            Zed/d            Zed.d            Z	ed0d            Z
ed0d            Zed1d            Zed0d            Zed2d            Zed3d            Zed4d            Zed5d            Zed6d            Zed7d!            Zed8d#            Zed8d$            Zed9d&            Zed.d'            Zed:d)            Zed;d*            Zd+S )<ClientOptionszRead only configuration options for a MongoClient.

    Should not be instantiated directly by application developers. Access
    a client's options via :attr:`pymongo.mongo_client.MongoClient.options`
    instead.
    r   r    r!   r"   r#   r$   r%   c                   || _         t          |          | _        |                    d          | _        |                    dt
          j                  | _        |                    dt
          j                  | _	        t          ||||          | _        t          |          | _        |                    d          | _        t          |          | _        t#          |          | _        |                    d          | _        |                    dt
          j                  | _        |                    dt
          j                  | _        |                    dt
          j                  | _        |                    d	t4                    | _        |                    d
          | _        |                    d          | _        |                    d          | _        |                    dt
          j                  | _         d S )Ndirectconnectionlocalthresholdmsserverselectiontimeoutms
replicasetconnectheartbeatfrequencymsretrywrites
retryreadsserver_selectorauto_encryption_optsro   	timeoutmsservermonitoringmode)!_ClientOptions__optionsr
   _ClientOptions__codec_optionsr,   !_ClientOptions__direct_connectionr   LOCAL_THRESHOLD_MS"_ClientOptions__local_threshold_msSERVER_SELECTION_TIMEOUT(_ClientOptions__server_selection_timeoutr   _ClientOptions__pool_optionsr=   _ClientOptions__read_preference _ClientOptions__replica_set_namerF   _ClientOptions__write_concernrI   _ClientOptions__read_concern_ClientOptions__connectHEARTBEAT_FREQUENCY#_ClientOptions__heartbeat_frequencyRETRY_WRITES_ClientOptions__retry_writesRETRY_READS_ClientOptions__retry_readsr   _ClientOptions__server_selector$_ClientOptions__auto_encryption_opts_ClientOptions__load_balanced_ClientOptions__timeoutSERVER_MONITORING_MODE&_ClientOptions__server_monitoring_mode)selfr   r!   r"   r$   s        r/   __init__zClientOptions.__init__   s    !3G<<#*;;/A#B#B $+KK0BFD]$^$^! +2++&(G+
 +
' 2(HhPWXX!7!@!@")++l";";3G<<1':: Y//%,[[1GIc%d%d"%kk-9LMM$[[v7IJJ!(->@S!T!T&-kk2H&I&I#&{{>:: [11(/"F$A)
 )
%%%r1   r&   c                    | j         S )z7The original options used to create this ClientOptions.)r   r   s    r/   _optionszClientOptions._options        ~r1   Optional[bool]c                    | j         S )z>Whether to begin discovering a MongoDB topology automatically.)r   r   s    r/   r   zClientOptions.connect   r   r1   r   c                    | j         S )z5A :class:`~bson.codec_options.CodecOptions` instance.)r   r   s    r/   codec_optionszClientOptions.codec_options        ##r1   c                    | j         S )z:Whether to connect to the deployment in 'Single' topology.)r   r   s    r/   direct_connectionzClientOptions.direct_connection   s     ''r1   intc                    | j         S )z&The local threshold for this instance.)r   r   s    r/   local_threshold_msz ClientOptions.local_threshold_ms   s     ((r1   c                    | j         S )z:The server selection timeout for this instance in seconds.)r   r   s    r/   server_selection_timeoutz&ClientOptions.server_selection_timeout   s     ..r1   r   c                    | j         S )N)r   r   s    r/   r   zClientOptions.server_selector   s    %%r1   c                    | j         S )z$The monitoring frequency in seconds.)r   r   s    r/   heartbeat_frequencyz!ClientOptions.heartbeat_frequency   s     ))r1   r   c                    | j         S )z.A :class:`~pymongo.pool.PoolOptions` instance.)r   r   s    r/   pool_optionszClientOptions.pool_options       ""r1   r   c                    | j         S )zA read preference instance.)r   r   s    r/   r3   zClientOptions.read_preference
  s     %%r1   c                    | j         S )zReplica set name or None.)r   r   s    r/   replica_set_namezClientOptions.replica_set_name  s     &&r1   r   c                    | j         S )z8A :class:`~pymongo.write_concern.WriteConcern` instance.)r   r   s    r/   write_concernzClientOptions.write_concern  r   r1   r   c                    | j         S )z6A :class:`~pymongo.read_concern.ReadConcern` instance.)r   r   s    r/   read_concernzClientOptions.read_concern  r   r1   Optional[float]c                    | j         S )z_The configured timeoutMS converted to seconds, or None.

        .. versionadded:: 4.2
        )r   r   s    r/   timeoutzClientOptions.timeout  s     ~r1   boolc                    | j         S )z9If this instance should retry supported write operations.)r   r   s    r/   retry_writeszClientOptions.retry_writes&  r   r1   c                    | j         S )z8If this instance should retry supported read operations.)r   r   s    r/   retry_readszClientOptions.retry_reads+  s     !!r1   Optional[AutoEncryptionOpts]c                    | j         S )z:A :class:`~pymongo.encryption.AutoEncryptionOpts` or None.)r   r   s    r/   r   z"ClientOptions.auto_encryption_opts0  s     **r1   c                    | j         S )z@True if the client was configured to connect to a load balancer.)r   r   s    r/   rr   zClientOptions.load_balanced5  r   r1   list[_EventListeners]c                Z    | j         j        J | j         j                                        S )zThe event listeners registered for this client.

        See :mod:`~pymongo.monitoring` for details.

        .. versionadded:: 4.0
        )r   _event_listenersri   r   s    r/   ri   zClientOptions.event_listeners:  s.     "3???"3CCEEEr1   c                    | j         S )zSThe configured serverMonitoringMode option.

        .. versionadded:: 4.5
        )r   r   s    r/   server_monitoring_modez$ClientOptions.server_monitoring_modeE  s     ,,r1   N)r   r    r!   r    r"   r#   r$   r%   )r&   r%   )r&   r   )r&   r   )r&   r   )r&   r   )r&   r   )r&   r   )r&   r#   )r&   r   )r&   r   )r&   r   )r&   r   )r&   r   )r&   r   )r&   r    )__name__
__module____qualname____doc__r   propertyr   r   r   r   r   r   r   r   r   r3   r   r   r   r   r   r   r   rr   ri   r    r1   r/   r   r      s        
 
 
 
:    X    X $ $ $ X$ ( ( ( X( ) ) ) X) / / / X/ & & & X& * * * X* # # # X# & & & X& ' ' ' X' $ $ $ X$ # # # X#    X # # # X# " " " X" + + + X+ $ $ $ X$ F F F XF - - - X- - -r1   r   N)
r   r    r!   r    r"   r#   r$   r%   r&   r'   )r$   r%   r&   r   )r$   r%   r&   r   )r$   r%   r&   r   )r$   r%   r&   rJ   )
r   r    r!   r    r"   r#   r$   r%   r&   r   )6r   
__future__r   typingr   r   r   r   r   r	   bson.codec_optionsr
   pymongor   pymongo.authr   r   pymongo.commonr   pymongo.compression_supportr   pymongo.errorsr   pymongo.monitoringr   r   pymongo.poolr   pymongo.read_concernr   pymongo.read_preferencesr   r   r   pymongo.server_selectorsr   pymongo.ssl_supportr   pymongo.write_concernr   r   pymongo.encryptionr   pymongo.pyopenssl_contextr   pymongo.topology_descriptionr   r0   r=   rF   rI   ra   r   r   r   r1   r/   <module>r      sm   + * " " " " " " H H H H H H H H H H H H H H H H 3 3 3 3 3 3       B B B B B B B B + + + + + + ; ; ; ; ; ; - - - - - - > > > > > > > > $ $ $ $ $ $ , , , , , ,         
 9 8 8 8 8 8 / / / / / / . . . . . . =//////555555444444<<<<<<   	; 	; 	; 	;5 5 5 5       8) 8) 8) 8)v( ( ( (VR- R- R- R- R- R- R- R- R- R-r1   