o
    h                     @  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 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Z G dd dZ!dS )z&Represent MongoClient's configuration.    )annotationsN)Any
CollectionOptionalTypeUnion)ObjectId)common)LOCAL_THRESHOLD_MSSERVER_SELECTION_TIMEOUT)ConfigurationError)PoolOptionsServerDescription)monitorpool)Pool)TOPOLOGY_TYPE_ServerSelectorTc                   @  s4  e Zd ZddddddeeejddddejdejdfdMd d!Z	e
dNd$d%Ze
dOd&d'Ze
dPd)d*Ze
dQd,d-Ze
dRd/d0Ze
dSd2d3Ze
dTd4d5Ze
dTd6d7Ze
dUd8d9Ze
dTd:d;Ze
dOd<d=Ze
dVd>d?Ze
dVd@dAZe
dWdBdCZe
dTdDdEZe
dWdFdGZdTdHdIZdXdKdLZdS )YTopologySettingsNFr   seeds%Optional[Collection[tuple[str, int]]]replica_set_nameOptional[str]
pool_classOptional[Type[Pool]]pool_optionsOptional[PoolOptions]monitor_classOptional[Type[monitor.Monitor]]condition_class#Optional[Type[threading.Condition]]local_threshold_msintserver_selection_timeoutheartbeat_frequencyserver_selectorOptional[_ServerSelector]fqdndirect_connectionOptional[bool]load_balancedsrv_service_namestrsrv_max_hostsserver_monitoring_modetopology_idOptional[ObjectId]c                 C  s   |	t jk rtdt jd f |pdg| _|| _|ptj| _|p"t | _	|p(t
j| _|p.tj| _|| _|| _|
| _|| _|	| _|| _|| _|| _|pKd| _|| _|durX|| _n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  )	localhostii  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_modeZ_topology_idr   join	tracebackformat_stack_stack)selfr   r   r   r   r   r    r"   r$   r%   r&   r(   r)   r+   r,   r.   r/   r0    rL   O/var/www/html/venv/lib/python3.10/site-packages/pymongo/synchronous/settings.py__init__$   s4   


zTopologySettings.__init__returnCollection[tuple[str, int]]c                 C     | j S )zList of server addresses.)r5   rK   rL   rL   rM   r   Z      zTopologySettings.seedsc                 C  rQ   N)r6   rR   rL   rL   rM   r   _      z!TopologySettings.replica_set_name
Type[Pool]c                 C  rQ   rT   )r7   rR   rL   rL   rM   r   c   rU   zTopologySettings.pool_classr   c                 C  rQ   rT   )r8   rR   rL   rL   rM   r   g   rU   zTopologySettings.pool_optionsType[monitor.Monitor]c                 C  rQ   rT   )r9   rR   rL   rL   rM   r   k   rU   zTopologySettings.monitor_classType[threading.Condition]c                 C  rQ   rT   )r<   rR   rL   rL   rM   r    o   rU   z TopologySettings.condition_classc                 C  rQ   rT   )r=   rR   rL   rL   rM   r"   s   rU   z#TopologySettings.local_threshold_msc                 C  rQ   rT   )r>   rR   rL   rL   rM   r$   w   rU   z)TopologySettings.server_selection_timeoutc                 C  rQ   rT   )r?   rR   rL   rL   rM   r&   {   rU   z TopologySettings.server_selectorc                 C  rQ   rT   )rA   rR   rL   rL   rM   r%      rU   z$TopologySettings.heartbeat_frequencyc                 C  rQ   rT   )r@   rR   rL   rL   rM   r(      rU   zTopologySettings.fqdnc                 C  rQ   )zConnect directly to a single server, or use a set of servers?

        True if there is one seed and no replica_set_name.
        )rB   rR   rL   rL   rM   direct   s   zTopologySettings.directc                 C  rQ   )z@True if the client was configured to connect to a load balancer.)rC   rR   rL   rL   rM   r+      rS   zTopologySettings.load_balancedc                 C  rQ   )zThe srvServiceName.)rD   rR   rL   rL   rM   r,      rS   z!TopologySettings.srv_service_namec                 C  rQ   )zThe srvMaxHosts.)rE   rR   rL   rL   rM   r.      rS   zTopologySettings.srv_max_hostsc                 C  rQ   )zThe serverMonitoringMode.)rF   rR   rL   rL   rM   r/      rS   z'TopologySettings.server_monitoring_modec                 C  s.   | j rtjS | jrtjS | jd urtjS tjS rT   )r+   r   ZLoadBalancedrY   Singler   ZReplicaSetNoPrimaryUnknownrR   rL   rL   rM   get_topology_type   s   
z"TopologySettings.get_topology_type4dict[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 rL   r   ).0addressrL   rL   rM   
<dictcomp>   s    z<TopologySettings.get_server_descriptions.<locals>.<dictcomp>)r   rR   rL   rL   rM   get_server_descriptions   s   z(TopologySettings.get_server_descriptions)"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-   r0   r1   )rO   rP   )rO   r   )rO   rV   )rO   r   )rO   rW   )rO   rX   )rO   r#   )rO   r'   )rO   r*   )rO   r-   )rO   r]   )__name__
__module____qualname__r
   r   r	   ZHEARTBEAT_FREQUENCYZSRV_SERVICE_NAMEZSERVER_MONITORING_MODErN   propertyr   r   r   r   r   r    r"   r$   r&   r%   r(   rY   r+   r,   r.   r/   r\   ra   rL   rL   rL   rM   r   #   sj    6

r   )"__doc__
__future__r   r:   rH   typingr   r   r   r   r   Zbson.objectidr   Zpymongor	   Zpymongo.commonr
   r   Zpymongo.errorsr   Zpymongo.pool_optionsr   Zpymongo.server_descriptionr   Zpymongo.synchronousr   r   Zpymongo.synchronous.poolr   Zpymongo.topology_descriptionr   r   Z_IS_SYNCr   rL   rL   rL   rM   <module>   s    