3
O6bD                  @   sH   d Z ddlmZ ddlmZ ddlmZ ddlmZ	 G dd de
ZdS )	z0Represent one server the driver is connected to.    )EPOCH_NAIVE)IsMaster)SERVER_TYPE)timec               @   s  e Zd Z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d&d' Zed(d) Zed*d+ Zed,d- Zed.d/ Zed0d1 Zed2d3 Zed4d5 Zed6d7 Zed8d9 Zed:d; Zed<d= Zed>d? Zed@dA ZedBdC ZedDdE ZedFdG ZedHdI ZedJdK ZedLdM ZedNdO Z edPdQ Z!edRdS Z"edTdU Z#d`dVdWZ$dXdY Z%dZd[ Z&d\d] Z'i Z(dS )aServerDescriptionae  Immutable representation of one server.

    :Parameters:
      - `address`: A (host, port) pair
      - `ismaster`: Optional Hello instance
      - `round_trip_time`: Optional float
      - `error`: Optional, the last error attempting to connect to the server

    .. warning:: The `ismaster` parameter will be renamed to `hello` in PyMongo
      4.0.
    _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_me_is_writable_is_readable_ls_timeout_minutes_error_set_version_election_id_cluster_time_last_write_date_last_update_time_topology_versionNc             C   s  || _ |pti }|j| _|j| _|j| _|j| _	|j
| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j | _!|| _"|j#| _$t% | _&|| _'|j(| _)|rt*|drt+|j,t-r|j,j.d| _)|j/r|j/t0 }|j1 | _2nd | _2d S )NdetailsZtopologyVersion)3r   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   mer   _timer   r   topology_versionr   hasattr
isinstancer   dictgetlast_write_dater   total_secondsr   )selfaddressZismasterround_trip_timeerrorZhellodelta r=   Y/var/www/html/sandeepIITI/myenv/lib/python3.6/site-packages/pymongo/server_description.py__init__-   s<    
zServerDescription.__init__c             C   s   | j S )z(The address (host, port) of this server.)r   )r8   r=   r=   r>   r9   V   s    zServerDescription.addressc             C   s   | j S )zThe type of this server.)r   )r8   r=   r=   r>   r   [   s    zServerDescription.server_typec             C   s   t j| j S )zSThe server type as a human readable string.

        .. versionadded:: 3.4
        )r   _fieldsr   )r8   r=   r=   r>   server_type_name`   s    z"ServerDescription.server_type_namec             C   s   | j S )z;List of hosts, passives, and arbiters known to this server.)r	   )r8   r=   r=   r>   r    h   s    zServerDescription.all_hostsc             C   s   | j S )N)r
   )r8   r=   r=   r>   r!   m   s    zServerDescription.tagsc             C   s   | j S )zReplica set name or None.)r   )r8   r=   r=   r>   r"   q   s    z"ServerDescription.replica_set_namec             C   s   | j S )z8This server's opinion about who the primary is, or None.)r   )r8   r=   r=   r>   r#   v   s    zServerDescription.primaryc             C   s   | j S )N)r   )r8   r=   r=   r>   r$   {   s    zServerDescription.max_bson_sizec             C   s   | j S )N)r   )r8   r=   r=   r>   r%      s    z"ServerDescription.max_message_sizec             C   s   | j S )N)r   )r8   r=   r=   r>   r&      s    z&ServerDescription.max_write_batch_sizec             C   s   | j S )N)r   )r8   r=   r=   r>   r'      s    z"ServerDescription.min_wire_versionc             C   s   | j S )N)r   )r8   r=   r=   r>   r(      s    z"ServerDescription.max_wire_versionc             C   s   | j S )N)r   )r8   r=   r=   r>   r)      s    zServerDescription.set_versionc             C   s   | j S )N)r   )r8   r=   r=   r>   r*      s    zServerDescription.election_idc             C   s   | j S )N)r   )r8   r=   r=   r>   r+      s    zServerDescription.cluster_timec             C   s   | j | jfS )N)r   r   )r8   r=   r=   r>   election_tuple   s    z ServerDescription.election_tuplec             C   s   | j S )N)r   )r8   r=   r=   r>   r/      s    zServerDescription.mec             C   s   | j S )N)r   )r8   r=   r=   r>   r.      s    z1ServerDescription.logical_session_timeout_minutesc             C   s   | j S )N)r   )r8   r=   r=   r>   r6      s    z!ServerDescription.last_write_datec             C   s   | j S )N)r   )r8   r=   r=   r>   last_update_time   s    z"ServerDescription.last_update_timec             C   s   | j | jkr| j| j  S | jS )z$The current average latency or None.)r   _host_to_round_trip_timer   )r8   r=   r=   r>   r:      s    z!ServerDescription.round_trip_timec             C   s   | j S )z<The last error attempting to connect to the server, or None.)r   )r8   r=   r=   r>   r;      s    zServerDescription.errorc             C   s   | j S )N)r   )r8   r=   r=   r>   r,      s    zServerDescription.is_writablec             C   s   | j S )N)r   )r8   r=   r=   r>   r-      s    zServerDescription.is_readablec             C   s   | j tjkS )N)r   r   Mongos)r8   r=   r=   r>   mongos   s    zServerDescription.mongosc             C   s   | j tjkS )N)r   r   Unknown)r8   r=   r=   r>   is_server_type_known   s    z&ServerDescription.is_server_type_knownc             C   s(   | j dk	r| jtjtjfkp&| jtjkS )z0Checks if this server supports retryable writes.N)r   r   r   rE   Z	RSPrimaryZLoadBalancer)r8   r=   r=   r>   retryable_writes_supported   s    
z,ServerDescription.retryable_writes_supportedc             C   s
   | j dkS )z0Checks if this server supports retryable writes.   )r   )r8   r=   r=   r>   retryable_reads_supported   s    z+ServerDescription.retryable_reads_supportedc             C   s   | j S )N)r   )r8   r=   r=   r>   r1      s    z"ServerDescription.topology_versionc             C   s   t | j|d}| j|_|S )N)r;   )r   r9   r1   r   )r8   r;   unknownr=   r=   r>   
to_unknown   s    zServerDescription.to_unknownc             C   s   t |tr| j|jko| j|jko| j|jko| j|j	ko| j
|jko| j|jko| j|jko| j|jko| j|jko| j|jko| j|jko| j|jko| j|jkS tS )N)r3   r   r   r9   r   r   r   r'   r   r(   r   r/   r	   r    r
   r!   r   r"   r   r)   r   r*   r   r#   r   r.   r   r;   NotImplemented)r8   otherr=   r=   r>   __eq__   s     
zServerDescription.__eq__c             C   s
   | |k S )Nr=   )r8   rO   r=   r=   r>   __ne__   s    zServerDescription.__ne__c             C   s2   d}| j rd| j f }d| jj| j| j| j|f S )N z
, error=%rz"<%s %s server_type: %s, rtt: %s%s>)r;   	__class____name__r9   rA   r:   )r8   errmsgr=   r=   r>   __repr__   s    zServerDescription.__repr__)r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NNN)N))rT   
__module____qualname____doc__	__slots__r?   propertyr9   r   rA   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   rB   r/   r.   r6   rC   r:   r;   r,   r-   rF   rH   rI   rK   r1   rM   rP   rQ   rV   rD   r=   r=   r=   r>   r      sZ           
$	
	r   N)rY   Zbsonr   Zpymongo.ismasterr   Zpymongo.server_typer   Zpymongo.monotonicr   r0   objectr   r=   r=   r=   r>   <module>   s
   