U
    d                     @   s   d Z ddlZddlZddlmZmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZ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mZ G dd dZdS )z&Represent MongoClient's configuration.    N)Any
CollectionDictOptionalTupleTypeUnion)ObjectId)commonmonitorpool)LOCAL_THRESHOLD_MSSERVER_SELECTION_TIMEOUT)ConfigurationError)PoolPoolOptionsServerDescription)TOPOLOGY_TYPE_ServerSelectorc                   @   s  e Zd Zddddddeeejddddejdfee	e
eef   ee eee  ee eeej  eeej  eeeee ee ee ee eedddZee	e
eef  ddd	Zeee dd
dZeee dddZeedddZeeej dddZeeej dddZeedddZeedddZeee dddZ eedddZ!eee dddZ"eee dddZ#eee dd d!Z$eedd"d#Z%eedd$d%Z&edd&d'Z'e(e)e
eef e*f e+f dd(d)Z,dS )*TopologySettingsNFr   )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_hostsc                 C   s   |	t jk rtdt jd f |p&dg| _|| _|p8tj| _|pDt | _	|pPt
j| _|p\tj| _|| _|| _|
| _|| _|	| _|| _|| _|| _|pd| _t | _dt | _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  )	localhostii  r    N)r
   ZMIN_HEARTBEAT_INTERVALr   _seeds_replica_set_namer   r   _pool_classr   _pool_optionsr   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_hostsr	   Z_topology_idjoin	tracebackformat_stack_stack)selfr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%    r?   4/tmp/pip-unpacked-wheel-oblwsawz/pymongo/settings.py__init__   s.    


zTopologySettings.__init__)returnc                 C   s   | j S )zList of server addresses.)r(   r>   r?   r?   r@   r   P   s    zTopologySettings.seedsc                 C   s   | j S N)r)   rC   r?   r?   r@   r   U   s    z!TopologySettings.replica_set_namec                 C   s   | j S rD   )r*   rC   r?   r?   r@   r   Y   s    zTopologySettings.pool_classc                 C   s   | j S rD   )r+   rC   r?   r?   r@   r   ]   s    zTopologySettings.pool_optionsc                 C   s   | j S rD   )r-   rC   r?   r?   r@   r   a   s    zTopologySettings.monitor_classc                 C   s   | j S rD   )r0   rC   r?   r?   r@   r   e   s    z TopologySettings.condition_classc                 C   s   | j S rD   )r1   rC   r?   r?   r@   r   i   s    z#TopologySettings.local_threshold_msc                 C   s   | j S rD   )r2   rC   r?   r?   r@   r   m   s    z)TopologySettings.server_selection_timeoutc                 C   s   | j S rD   )r3   rC   r?   r?   r@   r    q   s    z TopologySettings.server_selectorc                 C   s   | j S rD   )r5   rC   r?   r?   r@   r   u   s    z$TopologySettings.heartbeat_frequencyc                 C   s   | j S rD   )r4   rC   r?   r?   r@   r!   y   s    zTopologySettings.fqdnc                 C   s   | j S )zConnect directly to a single server, or use a set of servers?

        True if there is one seed and no replica_set_name.
        )r6   rC   r?   r?   r@   direct}   s    zTopologySettings.directc                 C   s   | j S )z@True if the client was configured to connect to a load balancer.)r7   rC   r?   r?   r@   r#      s    zTopologySettings.load_balancedc                 C   s   | j S )zThe srvServiceName.)r8   rC   r?   r?   r@   r$      s    z!TopologySettings.srv_service_namec                 C   s   | j S )zThe srvMaxHosts.)r9   rC   r?   r?   r@   r%      s    zTopologySettings.srv_max_hostsc                 C   s2   | j rtjS | jrtjS | jd k	r(tjS tjS d S rD   )r#   r   ZLoadBalancedrE   Singler   ZReplicaSetNoPrimaryUnknownrC   r?   r?   r@   get_topology_type   s    
z"TopologySettings.get_topology_typec                 C   s   dd | j D S )z;Initial dict of (address, ServerDescription) for all seeds.c                 S   s   i | ]}|t |qS r?   r   ).0addressr?   r?   r@   
<dictcomp>   s      z<TopologySettings.get_server_descriptions.<locals>.<dictcomp>)r   rC   r?   r?   r@   get_server_descriptions   s    z(TopologySettings.get_server_descriptions)-__name__
__module____qualname__r   r   r
   ZHEARTBEAT_FREQUENCYZSRV_SERVICE_NAMEr   r   r   strintr   r   r   r   r,   r.   r/   r   boolrA   propertyr   r   r   r   r   r   r   r   r    r   r!   rE   r#   r$   r%   rH   r   r   r   r   rL   r?   r?   r?   r@   r      s   
1
r   )__doc__r.   r;   typingr   r   r   r   r   r   r   Zbson.objectidr	   Zpymongor
   r   r   Zpymongo.commonr   r   Zpymongo.errorsr   Zpymongo.poolr   r   Zpymongo.server_descriptionr   Zpymongo.topology_descriptionr   r   r   r?   r?   r?   r@   <module>   s   $