
    hW%                         d 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l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 d Zd Zd Zd Zd Z d Z! G d de"      Z#y)z$Tools to parse mongo client options.    )_parse_codec_options)_build_credentials_tuple)validate_boolean)common)CompressionSettings)ConfigurationError)_EventListeners)PoolOptions)ReadConcern)make_read_preferenceread_pref_mode_from_name)any_server_selector)get_ssl_context)WriteConcernc                 z    |j                  d| rdnd      }|j                  d      }| s|rt        ||| |||      S y)z!Parse authentication credentials.authmechanismDEFAULTN
authsource)getr   )usernamepassworddatabaseoptions	mechanismsources         Y/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/pymongo/client_options.py_parse_credentialsr   !   sH    O(YMI[[&F9'vx7HF 	F    c                     d| v r| d   S | j                  dd      }t        |      }| j                  d      }| j                  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*   +   s`    G#());;'3D#D)D;;+,DKK 5r:MdM::r   c                     | j                  d      }| j                  d      }| j                  d      }| j                  d      }t        ||||      S )zParse write concern options.w
wtimeoutmsjournalfsync)r   r   )r   concernwtimeoutjr/   s        r   _parse_write_concernr3   7   sK    kk#G{{<(HIAKK E1e44r   c                 :    | j                  d      }t        |      S )zParse read concern options.readconcernlevel)r   r   )r   r0   s     r   _parse_read_concernr6   @   s    kk,-Gwr   c           
      6   | j                  d      }|t        d|       | j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  dd	      }| j                  d
      }| j                  dd	      }	| D 
cg c]  }
|
j                  d      r| |
   r|
 }}
|du r|rt        ddj	                  |      z        |r|d	}|d	u rt        ||||||||	      }||fS d|fS c c}
w )zParse ssl options.sslNssl_certfilessl_keyfilessl_pem_passphrasessl_ca_certsssl_cert_reqsssl_match_hostnameTssl_crlfilessl_check_ocsp_endpointssl_Fzmssl has not been enabled but the following ssl parameters have been set: %s. Please set `ssl=True` or remove.z, )r   r   
startswithr   joinr   )r   use_sslcertfilekeyfile
passphraseca_certs	cert_reqsmatch_hostnamecrlfilecheck_ocsp_endpointkssl_kwarg_keysctxs                r   _parse_ssl_optionsrP   F   sJ   kk% G({{>*Hkk-(G12J{{>*HO,I[[!5t<Nkk-(G!++&?F!( >Af-'!*  >N >%N  "H $(99^#<"= > 	>
 '/$! N""/>s   .Dc                    | j                  dt        j                        }| j                  dt        j                        }| j                  dt        j                        }|||kD  rt        d      | j                  dt        j                        }| j                  dd      }| j                  d      }| j                  d	t        j                        }| j                  d
      }| j                  d      }	| j                  d      }
| j                  d      }t        | j                  dg       | j                  dd            }t        |       \  }}t        ||||||||||t        |	      |
||      S )zParse connection pool options.maxpoolsizeminpoolsizemaxidletimemsz3minPoolSize must be smaller or equal to maxPoolSizeconnecttimeoutmssocketkeepaliveTsockettimeoutmswaitqueuetimeoutmswaitqueuemultipleevent_listenersappnamedrivercompressorszlibcompressionlevelr%   )r   r   MAX_POOL_SIZEMIN_POOL_SIZEMAX_IDLE_TIME_SEC
ValueErrorCONNECT_TIMEOUTWAIT_QUEUE_TIMEOUTr   rP   r
   r	   )r   max_pool_sizemin_pool_sizemax_idle_time_secondsconnect_timeoutsocket_keepalivesocket_timeoutwait_queue_timeoutwait_queue_multiplerZ   r[   r\   compression_settingsssl_contextr>   s                  r   _parse_pool_optionsro   o   sb   KKv/C/CDMKKv/C/CDM#KK113 ]]%BNOOkk"4f6L6LMO{{#4d;[[!23N f779!++&9:kk"34Okk)$G[["F.M2&*B/1 '9&A#K#}$,&)+>"$68H&7+	- 	-r   c                   &   e Zd Zd Zd Zed        Zed        Zed        Zed        Z	ed        Z
ed        Zed        Zed	        Zed
        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zy)ClientOptionsc                 0   || _         t        |      | _        t        ||||      | _        |j                  d      | _        |j                  dt        j                        | _	        |j                  dt        j                        | _        t        |      | _        t        |      | _        |j                  d      | _        t#        |      | _        t'        |      | _        |j                  d      | _        |j                  dt        j,                        | _        |j                  dt        j0                        | _        |j                  dt        j4                        | _        |j                  d	t8              | _        |j                  d
      | _        y )Ndirectconnectionlocalthresholdmsserverselectiontimeoutms
replicasetconnectheartbeatfrequencymsretrywrites
retryreadsserver_selectorauto_encryption_opts)_ClientOptions__optionsr   _ClientOptions__codec_optionsr   _ClientOptions__credentialsr   !_ClientOptions__direct_connectionr   LOCAL_THRESHOLD_MS"_ClientOptions__local_threshold_msSERVER_SELECTION_TIMEOUT(_ClientOptions__server_selection_timeoutro   _ClientOptions__pool_optionsr*   _ClientOptions__read_preference _ClientOptions__replica_set_namer3   _ClientOptions__write_concernr6   _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)selfr   r   r   r   s        r   __init__zClientOptions.__init__   sF    3G</h'3#*;;/A#B $+KK 9 9%;! +2++&(G(G+I'1':!7!@")++l";3G<1': Y/%,[["F$>$>&@"%kk-9L9LM$[[v7I7IJ!(2"4&-kk2H&I#r   c                     | j                   S )z7The original options used to create this ClientOptions.)r}   r   s    r   _optionszClientOptions._options        ~~r   c                     | j                   S )z>Whether to begin discovering a MongoDB topology automatically.)r   r   s    r   rw   zClientOptions.connect   r   r   c                     | j                   S )z5A :class:`~bson.codec_options.CodecOptions` instance.)r~   r   s    r   codec_optionszClientOptions.codec_options        ###r   c                     | j                   S )z;A :class:`~pymongo.auth.MongoCredentials` instance or None.)r   r   s    r   credentialszClientOptions.credentials        !!!r   c                     | j                   S )z:Whether to connect to the deployment in 'Single' topology.)r   r   s    r   direct_connectionzClientOptions.direct_connection   s     '''r   c                     | j                   S )z&The local threshold for this instance.)r   r   s    r   local_threshold_msz ClientOptions.local_threshold_ms   s     (((r   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     ...r   c                     | j                   S )N)r   r   s    r   r{   zClientOptions.server_selector   s    %%%r   c                     | j                   S )z$The monitoring frequency in seconds.)r   r   s    r   heartbeat_frequencyz!ClientOptions.heartbeat_frequency   s     )))r   c                     | j                   S )z.A :class:`~pymongo.pool.PoolOptions` instance.)r   r   s    r   pool_optionszClientOptions.pool_options        """r   c                     | j                   S )zA read preference instance.)r   r   s    r   r    zClientOptions.read_preference   s     %%%r   c                     | j                   S )zReplica set name or None.)r   r   s    r   replica_set_namezClientOptions.replica_set_name   s     &&&r   c                     | j                   S )z8A :class:`~pymongo.write_concern.WriteConcern` instance.)r   r   s    r   write_concernzClientOptions.write_concern   r   r   c                     | j                   S )z6A :class:`~pymongo.read_concern.ReadConcern` instance.)r   r   s    r   read_concernzClientOptions.read_concern   r   r   c                     | j                   S )z9If this instance should retry supported write operations.)r   r   s    r   retry_writeszClientOptions.retry_writes   r   r   c                     | j                   S )z8If this instance should retry supported read operations.)r   r   s    r   retry_readszClientOptions.retry_reads   r   r   c                     | j                   S )z:A :class:`~pymongo.encryption.AutoEncryptionOpts` or None.)r   r   s    r   r|   z"ClientOptions.auto_encryption_opts   s     ***r   N)__name__
__module____qualname____doc__r   propertyr   rw   r   r   r   r   r   r{   r   r   r    r   r   r   r   r   r|    r   r   rq   rq      s_   J6     $ $ " " ( ( ) ) / / & & * * # # & & ' ' $ $ # # # # " " + +r   rq   N)$r   bson.codec_optionsr   pymongo.authr   pymongo.commonr   pymongor   pymongo.compression_supportr   pymongo.errorsr   pymongo.monitoringr	   pymongo.poolr
   pymongo.read_concernr   pymongo.read_preferencesr   r   pymongo.server_selectorsr   pymongo.ssl_supportr   pymongo.write_concernr   r   r*   r3   r6   rP   ro   objectrq   r   r   r   <module>r      sb    + 3 1 +  ; - . $ ,@ 8 / .	;5 & R-Bq+F q+r   