U
    Û~fh%  ã                   @  sÊ   d Z ddlmZ ddlZddlZddl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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Z G dd„ dƒZ!dS )z&Represent MongoClient's configuration.é    )ÚannotationsN)ÚAnyÚ
CollectionÚOptionalÚTypeÚUnion)ÚObjectId)Úcommon)ÚmonitorÚpool)ÚPool)ÚLOCAL_THRESHOLD_MSÚSERVER_SELECTION_TIMEOUT)ÚConfigurationError)ÚPoolOptions©ÚServerDescription)ÚTOPOLOGY_TYPEÚ_ServerSelectorFc                   @  sœ  e Zd Zddddddeeejddddejdejfdddddd	d
d
d
dddddd
ddœdd„Z	e
ddœdd„ƒZe
ddœdd„ƒZe
ddœdd„ƒZe
ddœdd„ƒZe
ddœdd„ƒZe
d dœd!d"„ƒZe
d
dœd#d$„ƒZe
d
dœd%d&„ƒZe
ddœd'd(„ƒZe
d
dœd)d*„ƒZe
ddœd+d,„ƒZe
ddœd-d.„ƒZe
ddœd/d0„ƒZe
ddœd1d2„ƒZe
d
dœd3d4„ƒZe
ddœd5d6„ƒZd
dœd7d8„Zd9dœd:d;„ZdS )<ÚTopologySettingsNFr   z%Optional[Collection[tuple[str, int]]]zOptional[str]zOptional[Type[Pool]]zOptional[PoolOptions]zOptional[Type[monitor.Monitor]]z#Optional[Type[threading.Condition]]ÚintzOptional[_ServerSelector]zOptional[bool]Ústr)ÚseedsÚreplica_set_nameÚ
pool_classÚpool_optionsÚmonitor_classÚcondition_classÚlocal_threshold_msÚserver_selection_timeoutÚheartbeat_frequencyÚserver_selectorÚfqdnÚdirect_connectionÚload_balancedÚsrv_service_nameÚsrv_max_hostsÚserver_monitoring_modec                 C  sÄ   |	t jk rtdt jd f ƒ‚|p&dg| _|| _|p8tj| _|pDtƒ | _	|pPt
j| _|p\tj| _|| _|| _|
| _|| _|	| _|| _|| _|| _|p–d| _|| _tƒ | _d t ¡ dd… ¡| _dS )zyRepresent MongoClient's configuration.

        Take a list of (host, port) pairs and optional replica set name.
        z+heartbeatFrequencyMS cannot be less than %diè  )Ú	localhosti‰i  r   Ú Néþÿÿÿ) r	   ZMIN_HEARTBEAT_INTERVALr   Ú_seedsÚ_replica_set_namer   r   Ú_pool_classr   Ú_pool_optionsr
   ZMonitorÚ_monitor_classÚ	threadingÚ	ConditionÚ_condition_classÚ_local_threshold_msÚ_server_selection_timeoutÚ_server_selectorÚ_fqdnÚ_heartbeat_frequencyÚ_directÚ_load_balancedÚ_srv_service_nameÚ_srv_max_hostsÚ_server_monitoring_moder   Z_topology_idÚjoinÚ	tracebackÚformat_stackÚ_stack)Úselfr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   © rB   úA/tmp/pip-unpacked-wheel-36gvocj8/pymongo/asynchronous/settings.pyÚ__init__$   s0    

ÿÿ
zTopologySettings.__init__zCollection[tuple[str, int]])Úreturnc                 C  s   | j S )zList of server addresses.)r+   ©rA   rB   rB   rC   r   W   s    zTopologySettings.seedsc                 C  s   | j S ©N)r,   rF   rB   rB   rC   r   \   s    z!TopologySettings.replica_set_namez
Type[Pool]c                 C  s   | j S rG   )r-   rF   rB   rB   rC   r   `   s    zTopologySettings.pool_classr   c                 C  s   | j S rG   )r.   rF   rB   rB   rC   r   d   s    zTopologySettings.pool_optionszType[monitor.Monitor]c                 C  s   | j S rG   )r/   rF   rB   rB   rC   r   h   s    zTopologySettings.monitor_classzType[threading.Condition]c                 C  s   | j S rG   )r2   rF   rB   rB   rC   r   l   s    z TopologySettings.condition_classc                 C  s   | j S rG   )r3   rF   rB   rB   rC   r   p   s    z#TopologySettings.local_threshold_msc                 C  s   | j S rG   )r4   rF   rB   rB   rC   r   t   s    z)TopologySettings.server_selection_timeoutc                 C  s   | j S rG   )r5   rF   rB   rB   rC   r!   x   s    z TopologySettings.server_selectorc                 C  s   | j S rG   )r7   rF   rB   rB   rC   r    |   s    z$TopologySettings.heartbeat_frequencyc                 C  s   | j S rG   )r6   rF   rB   rB   rC   r"   €   s    zTopologySettings.fqdnc                 C  s   | j S )z‚Connect directly to a single server, or use a set of servers?

        True if there is one seed and no replica_set_name.
        )r8   rF   rB   rB   rC   Údirect„   s    zTopologySettings.directc                 C  s   | j S )z@True if the client was configured to connect to a load balancer.)r9   rF   rB   rB   rC   r$   Œ   s    zTopologySettings.load_balancedc                 C  s   | j S )zThe srvServiceName.)r:   rF   rB   rB   rC   r%   ‘   s    z!TopologySettings.srv_service_namec                 C  s   | j S )zThe srvMaxHosts.)r;   rF   rB   rB   rC   r&   –   s    zTopologySettings.srv_max_hostsc                 C  s   | j S )zThe serverMonitoringMode.)r<   rF   rB   rB   rC   r'   ›   s    z'TopologySettings.server_monitoring_modec                 C  s2   | j rtjS | jrtjS | jd k	r(tjS tjS d S rG   )r$   r   ZLoadBalancedrH   ÚSingler   ZReplicaSetNoPrimaryÚUnknownrF   rB   rB   rC   Úget_topology_type    s    
z"TopologySettings.get_topology_typez4dict[Union[tuple[str, int], Any], ServerDescription]c                 C  s   dd„ | j D ƒS )z;Initial dict of (address, ServerDescription) for all seeds.c                 S  s   i | ]}|t |ƒ“qS rB   r   )Ú.0ÚaddressrB   rB   rC   Ú
<dictcomp>¬   s      z<TopologySettings.get_server_descriptions.<locals>.<dictcomp>)r   rF   rB   rB   rC   Úget_server_descriptionsª   s    z(TopologySettings.get_server_descriptions)Ú__name__Ú
__module__Ú__qualname__r   r   r	   ZHEARTBEAT_FREQUENCYZSRV_SERVICE_NAMEZSERVER_MONITORING_MODErD   Úpropertyr   r   r   r   r   r   r   r   r!   r    r"   rH   r$   r%   r&   r'   rK   rO   rB   rB   rB   rC   r   #   sf   ï.3
r   )"Ú__doc__Ú
__future__r   r0   r>   Útypingr   r   r   r   r   Zbson.objectidr   Zpymongor	   Zpymongo.asynchronousr
   r   Zpymongo.asynchronous.poolr   Zpymongo.commonr   r   Zpymongo.errorsr   Zpymongo.pool_optionsr   Zpymongo.server_descriptionr   Zpymongo.topology_descriptionr   r   Z_IS_SYNCr   rB   rB   rB   rC   Ú<module>   s   