3
]ð]¯  ã               @   sL   d Z ddlZddlmZ ddlmZ ddlmZ dd„ ZG dd	„ d	e	ƒZ
dS )
z+Parse a response to the 'ismaster' command.é    N)Úimap)Úcommon)ÚSERVER_TYPEc             C   s�   | j dƒstjS | j dƒr tjS | j dƒrr| j dƒr:tjS | j dƒrJtjS | j dƒrZtjS | j dƒrjtjS tjS n| j dƒd	kr†tjS tj	S d
S )z4Determine the server type from an ismaster response.ÚokZisreplicasetÚsetNameÚhiddenZismasterZ	secondaryZarbiterOnlyÚmsgZisdbgridN)
Úgetr   ÚUnknownZRSGhostZRSOtherÚ	RSPrimaryÚRSSecondaryZ	RSArbiterÚMongosÚ
Standalone)Údoc© r   ú3/tmp/pip-build-20mum3z4/pymongo/pymongo/ismaster.pyÚ_get_server_type   s"    






r   c               @   s  e Zd Zd0Z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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d/S )1ÚIsMasterÚ_docÚ_server_typeÚ_is_writableÚ_is_readablec             C   s@   t |ƒ| _|| _| jtjtjtjfk| _| jtj	kp8| j| _
dS )z+Parse an ismaster response from the server.N)r   r   r   r   r   r   r   r   Úserver_typer   r   )Úselfr   r   r   r   Ú__init__3   s    
zIsMaster.__init__c             C   s
   | j jƒ S )zXThe complete ismaster command response document.

        .. versionadded:: 3.4
        )r   Úcopy)r   r   r   r   Údocument@   s    zIsMaster.documentc             C   s   | j S )N)r   )r   r   r   r   r   H   s    zIsMaster.server_typec          	   C   s8   t ttjtj| jjdg ƒ| jjdg ƒ| jjdg ƒƒƒƒS )z;List of hosts, passives, and arbiters known to this server.ÚhostsZpassivesZarbiters)Úsetr   r   Ú
clean_nodeÚ	itertoolsÚchainr   r	   )r   r   r   r   Ú	all_hostsL   s    zIsMaster.all_hostsc             C   s   | j jdi ƒS )z&Replica set member tags or empty dict.Útags)r   r	   )r   r   r   r   r#   T   s    zIsMaster.tagsc             C   s$   | j jdƒrtj| j d ƒS dS dS )z8This server's opinion about who the primary is, or None.ÚprimaryN)r   r	   r   Zpartition_node)r   r   r   r   r$   Y   s    zIsMaster.primaryc             C   s   | j jdƒS )zReplica set name or None.r   )r   r	   )r   r   r   r   Úreplica_set_namea   s    zIsMaster.replica_set_namec             C   s   | j jdtjƒS )NZmaxBsonObjectSize)r   r	   r   ZMAX_BSON_SIZE)r   r   r   r   Úmax_bson_sizef   s    zIsMaster.max_bson_sizec             C   s   | j jdd| j ƒS )NZmaxMessageSizeBytesé   )r   r	   r&   )r   r   r   r   Úmax_message_sizej   s    zIsMaster.max_message_sizec             C   s   | j jdtjƒS )NZmaxWriteBatchSize)r   r	   r   ZMAX_WRITE_BATCH_SIZE)r   r   r   r   Úmax_write_batch_sizen   s    zIsMaster.max_write_batch_sizec             C   s   | j jdtjƒS )NZminWireVersion)r   r	   r   ZMIN_WIRE_VERSION)r   r   r   r   Úmin_wire_versionr   s    zIsMaster.min_wire_versionc             C   s   | j jdtjƒS )NZmaxWireVersion)r   r	   r   ZMAX_WIRE_VERSION)r   r   r   r   Úmax_wire_versionv   s    zIsMaster.max_wire_versionc             C   s   | j jdƒS )NZ
setVersion)r   r	   )r   r   r   r   Úset_versionz   s    zIsMaster.set_versionc             C   s   | j jdƒS )NZ
electionId)r   r	   )r   r   r   r   Úelection_id~   s    zIsMaster.election_idc             C   s   | j jdƒS )Nz$clusterTime)r   r	   )r   r   r   r   Úcluster_time‚   s    zIsMaster.cluster_timec             C   s   | j jdƒS )NZlogicalSessionTimeoutMinutes)r   r	   )r   r   r   r   Úlogical_session_timeout_minutes†   s    z(IsMaster.logical_session_timeout_minutesc             C   s   | j S )N)r   )r   r   r   r   Úis_writableŠ   s    zIsMaster.is_writablec             C   s   | j S )N)r   )r   r   r   r   Úis_readableŽ   s    zIsMaster.is_readablec             C   s   | j jdƒ}|rtj|ƒS d S )NÚme)r   r	   r   r   )r   r2   r   r   r   r2   ’   s    zIsMaster.mec             C   s   | j jdi ƒjdƒS )NZ	lastWriteZlastWriteDate)r   r	   )r   r   r   r   Úlast_write_date˜   s    zIsMaster.last_write_datec             C   s   | j jdƒS )NÚcompression)r   r	   )r   r   r   r   Úcompressorsœ   s    zIsMaster.compressorsN)r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   Úpropertyr   r   r"   r#   r$   r%   r&   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r5   r   r   r   r   r   0   s,   r   )Ú__doc__r    Zbson.py3compatr   Zpymongor   Zpymongo.server_typer   r   Úobjectr   r   r   r   r   Ú<module>   s   