o
    Åîï]$  ã                   @   sè   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d„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!G dd„ de"ƒZ#dS )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                 C   s<   |  d| rdnd¡}|  d¡}| s|rt||| |||ƒS dS )z!Parse authentication credentials.ÚauthmechanismÚDEFAULTNÚ
authsource)Úgetr   )ÚusernameÚpasswordÚdatabaseÚoptionsÚ	mechanismÚsource© r   úH/var/www/html/env/lib/python3.10/site-packages/pymongo/client_options.pyÚ_parse_credentials!   s   
ÿr   c                 C   sF   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_stalenessr   r   r   Ú_parse_read_preference+   s   
r'   c                 C   s6   |   d¡}|   d¡}|   d¡}|   d¡}t||||ƒS )zParse write concern options.ÚwÚ
wtimeoutmsÚjournalÚfsync)r   r   )r   ÚconcernÚwtimeoutÚjr+   r   r   r   Ú_parse_write_concern7   s
   



r/   c                 C   s   |   d¡}t|ƒS )zParse read concern options.Úreadconcernlevel)r   r
   )r   r,   r   r   r   Ú_parse_read_concern@   s   
r1   c                    sÐ   ˆ   d¡}|durtd|ƒ ˆ   d¡}ˆ   d¡}ˆ   d¡}ˆ   d¡}ˆ   d¡}ˆ   dd	¡}ˆ   d
¡}‡ fdd„ˆ D ƒ}	|dkrJ|	rJtdd |	¡ ƒ‚|	rR|du rRd	}|d	u rdt|||||||ƒ}
|
|fS d|fS )zParse ssl options.ÚsslNÚssl_certfileÚssl_keyfileÚssl_pem_passphraseÚssl_ca_certsÚssl_cert_reqsÚssl_match_hostnameTÚssl_crlfilec                    s"   g | ]}|  d ¡rˆ | r|‘qS )Ússl_)Ú
startswith)Ú.0Úk©r   r   r   Ú
<listcomp>T   s
    ÿ
ÿz&_parse_ssl_options.<locals>.<listcomp>Fzmssl has not been enabled but the following ssl parameters have been set: %s. Please set `ssl=True` or remove.z, )r   r   r   Újoinr   )r   Úuse_sslÚcertfileÚkeyfileÚ
passphraseÚca_certsÚ	cert_reqsÚmatch_hostnameÚcrlfileÚssl_kwarg_keysÚctxr   r>   r   Ú_parse_ssl_optionsF   s:   







ýùrK   c                 C   sè   |   dtj¡}|   dtj¡}|   dtj¡}|dur!||kr!tdƒ‚|   dtj¡}|   dd¡}|   d	¡}|   d
tj¡}|   d¡}|   d¡}	|   d¡}
|   d¡}t|   dg ¡|   dd¡ƒ}t	| ƒ\}}t
||||||||||t|	ƒ|
||ƒS )zParse connection pool options.ÚmaxpoolsizeÚminpoolsizeÚmaxidletimemsNz3minPoolSize 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   rK   r	   r   )r   Úmax_pool_sizeÚmin_pool_sizeÚmax_idle_time_secondsÚconnect_timeoutÚsocket_keepaliveÚsocket_timeoutÚwait_queue_timeoutÚwait_queue_multiplerT   rU   rV   Úcompression_settingsÚssl_contextr8   r   r   r   Ú_parse_pool_optionsm   sB   ÿ
ÿ





þ÷ri   c                   @   sØ   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dd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZd#S )$ÚClientOptionsc                 C   sÎ   || _ t|ƒ| _t||||ƒ| _| dtj¡| _| dtj	¡| _
t|ƒ| _t|ƒ| _| d¡| _t|ƒ| _t|ƒ| _| d¡| _| dtj¡| _| dtj¡| _| dtj¡| _| dt¡| _| d	¡| _d S )
NÚlocalthresholdmsÚserverselectiontimeoutmsÚ
replicasetÚconnectÚheartbeatfrequencymsÚretrywritesÚ
retryreadsÚserver_selectorÚauto_encryption_opts)Ú_ClientOptions__optionsr   Ú_ClientOptions__codec_optionsr   Ú_ClientOptions__credentialsr   r   ÚLOCAL_THRESHOLD_MSÚ"_ClientOptions__local_threshold_msÚSERVER_SELECTION_TIMEOUTÚ(_ClientOptions__server_selection_timeoutri   Ú_ClientOptions__pool_optionsr'   Ú_ClientOptions__read_preferenceÚ _ClientOptions__replica_set_namer/   Ú_ClientOptions__write_concernr1   Ú_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   r   r   r   Ú__init__’   s4   
ÿÿÿ



ÿÿzClientOptions.__init__c                 C   ó   | j S )z7The original options used to create this ClientOptions.)rt   ©r‰   r   r   r   Ú_options¬   ó   zClientOptions._optionsc                 C   r‹   )z>Whether to begin discovering a MongoDB topology automatically.)r€   rŒ   r   r   r   rn   ±   rŽ   zClientOptions.connectc                 C   r‹   )z5A :class:`~bson.codec_options.CodecOptions` instance.)ru   rŒ   r   r   r   Úcodec_options¶   rŽ   zClientOptions.codec_optionsc                 C   r‹   )z;A :class:`~pymongo.auth.MongoCredentials` instance or None.)rv   rŒ   r   r   r   Úcredentials»   rŽ   zClientOptions.credentialsc                 C   r‹   )z&The local threshold for this instance.)rx   rŒ   r   r   r   Úlocal_threshold_msÀ   rŽ   z ClientOptions.local_threshold_msc                 C   r‹   )z:The server selection timeout for this instance in seconds.)rz   rŒ   r   r   r   Úserver_selection_timeoutÅ   rŽ   z&ClientOptions.server_selection_timeoutc                 C   r‹   )N)r‡   rŒ   r   r   r   rr   Ê   s   zClientOptions.server_selectorc                 C   r‹   )z$The monitoring frequency in seconds.)r‚   rŒ   r   r   r   Úheartbeat_frequencyÎ   rŽ   z!ClientOptions.heartbeat_frequencyc                 C   r‹   )z.A :class:`~pymongo.pool.PoolOptions` instance.)r{   rŒ   r   r   r   Úpool_optionsÓ   rŽ   zClientOptions.pool_optionsc                 C   r‹   )zA read preference instance.)r|   rŒ   r   r   r   r   Ø   rŽ   zClientOptions.read_preferencec                 C   r‹   )zReplica set name or None.)r}   rŒ   r   r   r   Úreplica_set_nameÝ   rŽ   zClientOptions.replica_set_namec                 C   r‹   )z8A :class:`~pymongo.write_concern.WriteConcern` instance.)r~   rŒ   r   r   r   Úwrite_concernâ   rŽ   zClientOptions.write_concernc                 C   r‹   )z6A :class:`~pymongo.read_concern.ReadConcern` instance.)r   rŒ   r   r   r   Úread_concernç   rŽ   zClientOptions.read_concernc                 C   r‹   )z9If this instance should retry supported write operations.)r„   rŒ   r   r   r   Úretry_writesì   rŽ   zClientOptions.retry_writesc                 C   r‹   )z8If this instance should retry supported read operations.)r†   rŒ   r   r   r   Úretry_readsñ   rŽ   zClientOptions.retry_readsc                 C   r‹   )z:A :class:`~pymongo.encryption.AutoEncryptionOpts` or None.)rˆ   rŒ   r   r   r   rs   ö   rŽ   z"ClientOptions.auto_encryption_optsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rŠ   Úpropertyr�   rn   r�   r�   r‘   r’   rr   r“   r”   r   r•   r–   r—   r˜   r™   rs   r   r   r   r   rj   Ž   sF    














rj   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'   r/   r1   rK   ri   Úobjectrj   r   r   r   r   Ú<module>   s*   
	'!