
    FCf%                        d Z ddlmZ ddlZddlZddlmZmZ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  G d
 d      Zy)z0Represent one server the driver is connected to.    )annotationsN)AnyMappingOptional)EPOCH_NAIVE)ObjectId)Hello)SERVER_TYPE)ClusterTime_Addressc                     e Zd ZU dZdZ	 	 	 	 d)	 	 	 	 	 	 	 	 	 	 	 d*dZed+d       Zed,d       Zed-d       Z	ed.d       Z
ed/d	       Zed0d
       Zed1d       Zed,d       Zed,d       Zed,d       Zed,d       Zed,d       Zed2d       Zed3d       Zed4d       Zed5d       Zed1d       Zed2d       Zed6d       Zed7d       Zed6d       Zed7d       Zed8d       Zed9d       Zed9d       Zed9d       Z ed9d       Z!ed9d        Z"ed9d!       Z#ed:d"       Z$d;d<d#Z%d=d$Z&d=d%Z'd-d&Z(i Z)d'e*d(<   y)>ServerDescriptionaR  Immutable representation of one server.

    :param address: A (host, port) pair
    :param hello: Optional Hello instance
    :param round_trip_time: Optional float
    :param error: Optional, the last error attempting to connect to the server
    :param round_trip_time: Optional float, the min latency from the most recent samples
    )_address_server_type
_all_hosts_tags_replica_set_name_primary_max_bson_size_max_message_size_max_write_batch_size_min_wire_version_max_wire_version_round_trip_time_min_round_trip_time_me_is_writable_is_readable_ls_timeout_minutes_error_set_version_election_id_cluster_time_last_write_date_last_update_time_topology_versionNc                   || _         |st        i       }|j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _        |j                  | _        |j                  | _        |j                   | _        |j$                  | _        |j(                  | _        |j,                  | _        |j0                  | _        |j4                  | _        |j8                  | _        |j<                  | _        |j@                  | _!        || _"        || _#        |jH                  | _%        tM        jN                         | _(        || _)        |jT                  | _+        |r3tY        |dd       }t[        |t\              r|j_                  d      | _+        |  |j`                  r)|j`                  tb        z
  }|je                         | _3        y d | _3        y )NdetailstopologyVersion)4r   r	   server_typer   	all_hostsr   tagsr   replica_set_namer   primaryr   max_bson_sizer   max_message_sizer   max_write_batch_sizer   min_wire_versionr   max_wire_versionr   set_versionr!   election_idr"   cluster_timer#   is_writabler   is_readabler   logical_session_timeout_minutesr   r   r   mer   time	monotonicr%   r    topology_versionr&   getattr
isinstancedictgetlast_write_dater   total_secondsr$   )selfaddresshelloround_trip_timeerrormin_round_trip_timer(   deltas           Z/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/pymongo/server_description.py__init__zServerDescription.__init__B   s     "IE!--//ZZ
!&!7!7#11!&!7!7%*%?%?"!&!7!7!&!7!7!--!--"//!--!--#(#H#H  /$7!88!%!1!&!7!7eY5G'4()05F)G&  ))K7E$)$7$7$9D!$(D!    c                    | j                   S )z(The address (host, port) of this server.)r   rD   s    rK   rE   zServerDescription.addressq        }}rM   c                    | j                   S )zThe type of this server.)r   rO   s    rK   r*   zServerDescription.server_typev   s        rM   c                <    t         j                  | j                     S )zSThe server type as a human readable string.

        .. versionadded:: 3.4
        )r
   _fieldsr   rO   s    rK   server_type_namez"ServerDescription.server_type_name{   s     ""4#4#455rM   c                    | j                   S )z;List of hosts, passives, and arbiters known to this server.)r   rO   s    rK   r+   zServerDescription.all_hosts   s     rM   c                    | j                   S N)r   rO   s    rK   r,   zServerDescription.tags   s    zzrM   c                    | j                   S )zReplica set name or None.)r   rO   s    rK   r-   z"ServerDescription.replica_set_name   s     %%%rM   c                    | j                   S )z8This server's opinion about who the primary is, or None.)r   rO   s    rK   r.   zServerDescription.primary   rP   rM   c                    | j                   S rW   )r   rO   s    rK   r/   zServerDescription.max_bson_size   s    """rM   c                    | j                   S rW   )r   rO   s    rK   r0   z"ServerDescription.max_message_size       %%%rM   c                    | j                   S rW   )r   rO   s    rK   r1   z&ServerDescription.max_write_batch_size   s    )))rM   c                    | j                   S rW   )r   rO   s    rK   r2   z"ServerDescription.min_wire_version   r\   rM   c                    | j                   S rW   r   rO   s    rK   r3   z"ServerDescription.max_wire_version   r\   rM   c                    | j                   S rW   )r!   rO   s    rK   r4   zServerDescription.set_version          rM   c                    | j                   S rW   )r"   rO   s    rK   r5   zServerDescription.election_id   rb   rM   c                    | j                   S rW   )r#   rO   s    rK   r6   zServerDescription.cluster_time   s    !!!rM   c                j    t        j                  dt        d       | j                  | j                  fS )NzL'election_tuple' is deprecated, use  'set_version' and 'election_id' instead   )
stacklevel)warningswarnDeprecationWarningr!   r"   rO   s    rK   election_tuplez ServerDescription.election_tuple   s0    Z	

   $"3"333rM   c                    | j                   S rW   )r   rO   s    rK   r:   zServerDescription.me   s    xxrM   c                    | j                   S rW   )r   rO   s    rK   r9   z1ServerDescription.logical_session_timeout_minutes   s    '''rM   c                    | j                   S rW   )r$   rO   s    rK   rB   z!ServerDescription.last_write_date   s    $$$rM   c                    | j                   S rW   )r%   rO   s    rK   last_update_timez"ServerDescription.last_update_time   r\   rM   c                |    | j                   | j                  v r| j                  | j                      S | j                  S )z$The current average latency or None.)r   _host_to_round_trip_timer   rO   s    rK   rG   z!ServerDescription.round_trip_time   s7     ==D99900??$$$rM   c                    | j                   S )z-The min latency from the most recent samples.)r   rO   s    rK   rI   z%ServerDescription.min_round_trip_time   s     (((rM   c                    | j                   S )z<The last error attempting to connect to the server, or None.)r    rO   s    rK   rH   zServerDescription.error   s     {{rM   c                    | j                   S rW   )r   rO   s    rK   r7   zServerDescription.is_writable   rb   rM   c                    | j                   S rW   )r   rO   s    rK   r8   zServerDescription.is_readable   rb   rM   c                <    | j                   t        j                  k(  S rW   )r   r
   MongosrO   s    rK   mongoszServerDescription.mongos   s      K$6$666rM   c                <    | j                   t        j                  k7  S rW   )r*   r
   UnknownrO   s    rK   is_server_type_knownz&ServerDescription.is_server_type_known   s    ;#6#666rM   c                    | j                   t        j                  t        j                  fv xs | j                   t        j                  k(  S )0Checks if this server supports retryable writes.)r   r
   rx   	RSPrimaryLoadBalancerrO   s    rK   retryable_writes_supportedz,ServerDescription.retryable_writes_supported   sA     +"4"4k6K6K!LL;+":"::	;rM   c                     | j                   dk\  S )r~      r`   rO   s    rK   retryable_reads_supportedz+ServerDescription.retryable_reads_supported   s     %%**rM   c                    | j                   S rW   )r&   rO   s    rK   r=   z"ServerDescription.topology_version   r\   rM   c                V    t        | j                  |      }| j                  |_        |S )N)rH   )r   rE   r=   r&   )rD   rH   unknowns      rK   
to_unknownzServerDescription.to_unknown  s%    #DLL>$($9$9!rM   c                   t        |t              r`| j                  |j                  k(  xrD | j                  |j
                  k(  xr( | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                   |j"                  k(  xr | j$                  |j&                  k(  xrj | j(                  |j*                  k(  xrO | j,                  |j.                  k(  xr4 | j0                  |j2                  k(  xr | j4                  |j6                  k(  S t8        S rW   )r?   r   r   rE   r   r*   r   r2   r   r3   r   r:   r   r+   r   r,   r   r-   r!   r4   r"   r5   r   r.   r   r9   r    rH   NotImplementedrD   others     rK   __eq__zServerDescription.__eq__  sV   e./%--/ 1&&%*;*;;1++u/E/EE1 ++u/E/EE1 XX)	1
 __71 ZZ5::-1 ++u/E/EE1 &&%*;*;;1 &&%*;*;;1 ]]emm31 --1V1VV1 [[EKK/  rM   c                    | |k(   S rW    r   s     rK   __ne__zServerDescription.__ne__  s    5=  rM   c                    d}| j                   rd| j                   }dj                  | j                  j                  | j                  | j
                  | j                  |      S )N z, error=z"<{} {} server_type: {}, rtt: {}{}>)rH   format	__class____name__rE   rT   rG   )rD   errmsgs     rK   __repr__zServerDescription.__repr__  sZ    ::

~.F3::NN##LL!!  
 	
rM   r@   rr   )NNNg        )rE   r   rF   zOptional[Hello]rG   Optional[float]rH   Optional[Exception]rI   floatreturnNone)r   r   )r   int)r   str)r   zset[tuple[str, int]])r   zMapping[str, Any])r   zOptional[str])r   zOptional[tuple[str, int]])r   zOptional[int])r   zOptional[ObjectId])r   zOptional[ClusterTime])r   z(tuple[Optional[int], Optional[ObjectId]])r   r   )r   r   )r   r   )r   bool)r   zOptional[Mapping[str, Any]]rW   )rH   r   r   r   )r   r   r   r   )+r   
__module____qualname____doc__	__slots__rL   propertyrE   r*   rT   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   rk   r:   r9   rB   rp   rG   rI   rH   r7   r8   ry   r|   r   r   r=   r   r   r   r   rr   __annotations__r   rM   rK   r   r      s   I< "&+/%)%(-)-) -) )	-)
 #-) #-) 
-)^   ! ! 6 6     & &   # # & & * * & & & & ! ! ! ! " " 4 4   ( ( % % & & % % ) )   ! ! ! ! 7 7 7 7 ; ; + + & &
(!

 &(d'rM   r   )r   
__future__r   r;   rh   typingr   r   r   bsonr   bson.objectidr   pymongo.hellor	   pymongo.server_typer
   pymongo.typingsr   r   r   r   rM   rK   <module>r      s4    7 "   ) )  "  + 1N( N(rM   