o
    šh:  ã                   @  s¤   d Z ddlmZ ddlZddlZddlZddlmZ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mZ ddd„ZG dd„ dƒZG dd„ dee ƒZdS )z2Helpers for the 'hello' and legacy hello commands.é    )ÚannotationsN)ÚAnyÚGenericÚMappingÚOptional)ÚObjectId)Úcommon)ÚSERVER_TYPE)ÚClusterTimeÚ_DocumentTypeÚdocúMapping[str, Any]ÚreturnÚintc                 C  s®   |   d¡stjS |   d¡rtjS |   d¡rtjS |   d¡rJ|   d¡r%tjS |   tj¡r.tjS |   tj	¡r7tjS |   d¡r?tj
S |   d¡rGtjS tjS |   d¡d	krTtjS tjS )
z0Determine the server type from a hello response.ÚokÚ	serviceIdZisreplicasetÚsetNameZhiddenZ	secondaryZarbiterOnlyÚmsgZisdbgrid)Úgetr	   ÚUnknownÚLoadBalancerZRSGhostZRSOtherÚHelloCompatÚPRIMARYÚ	RSPrimaryÚLEGACY_PRIMARYÚRSSecondaryZ	RSArbiterÚMongosÚ
Standalone)r   © r   ú@/var/www/html/venv/lib/python3.10/site-packages/pymongo/hello.pyÚ_get_server_type   s*   






r    c                   @  s    e Zd ZdZdZdZdZdZdS )r   ZhelloZismasterZisWritablePrimaryz
not masterN)Ú__name__Ú
__module__Ú__qualname__ZCMDZ
LEGACY_CMDr   r   ZLEGACY_ERRORr   r   r   r   r   9   s    r   c                   @  sš  e Zd ZdZdZdOdPd
d„ZedQdd„ƒZedRdd„ƒZedSdd„ƒZ	edTdd„ƒZ
edUdd„ƒZedVdd„ƒZedRdd„ƒZedRdd „ƒZedRd!d"„ƒZedRd#d$„ƒZedRd%d&„ƒZedWd(d)„ƒZedXd+d,„ƒZedYd.d/„ƒZedWd0d1„ƒZedZd2d3„ƒZedZd4d5„ƒZedUd6d7„ƒZed[d9d:„ƒZed\d<d=„ƒZed]d?d@„ƒZed^dBdC„ƒZed^dDdE„ƒZedZdFdG„ƒZedXdHdI„ƒZedZdJdK„ƒZ edWdLdM„ƒZ!dNS )_ÚHellozHParse a hello response from the server.

    .. versionadded:: 3.12
    )Ú_docÚ_server_typeÚ_is_writableÚ_is_readableÚ
_awaitableFr   r   Ú	awaitableÚboolr   ÚNonec                 C  sJ   t |ƒ| _|| _| jtjtjtjtjfv | _| j	tj
kp| j| _|| _d S ©N)r    r&   r%   r	   r   r   r   r   r'   Úserver_typer   r(   r)   )Úselfr   r*   r   r   r   Ú__init__I   s   
ü
zHello.__init__c                 C  s   t   | j¡S )zUThe complete hello command response document.

        .. versionadded:: 3.4
        )Úcopyr%   ©r/   r   r   r   ÚdocumentV   s   zHello.documentr   c                 C  ó   | j S r-   )r&   r2   r   r   r   r.   ^   ó   zHello.server_typeúset[tuple[str, int]]c                 C  s8   t ttjt | j dg ¡| j dg ¡| j dg ¡¡ƒƒS )z;List of hosts, passives, and arbiters known to this server.ÚhostsZpassivesZarbiters)ÚsetÚmapr   Ú
clean_nodeÚ	itertoolsÚchainr%   r   r2   r   r   r   Ú	all_hostsb   s   ýþÿzHello.all_hostsr   c                 C  s   | j  di ¡S )z&Replica set member tags or empty dict.Útags©r%   r   r2   r   r   r   r>   p   s   z
Hello.tagsúOptional[tuple[str, int]]c                 C  s    | j  d¡rt | j d ¡S dS )z8This server's opinion about who the primary is, or None.ÚprimaryN)r%   r   r   Zpartition_noder2   r   r   r   rA   u   s   zHello.primaryúOptional[str]c                 C  ó   | j  d¡S )zReplica set name or None.r   r?   r2   r   r   r   Úreplica_set_name}   ó   zHello.replica_set_namec                 C  ó   | j  dtj¡S )NZmaxBsonObjectSize)r%   r   r   ZMAX_BSON_SIZEr2   r   r   r   Úmax_bson_size‚   ó   zHello.max_bson_sizec                 C  rF   )NZmaxMessageSizeBytes)r%   r   r   ZMAX_MESSAGE_SIZEr2   r   r   r   Úmax_message_size†   rH   zHello.max_message_sizec                 C  rF   )NZmaxWriteBatchSize)r%   r   r   ZMAX_WRITE_BATCH_SIZEr2   r   r   r   Úmax_write_batch_sizeŠ   rH   zHello.max_write_batch_sizec                 C  rF   )NZminWireVersion)r%   r   r   ZMIN_WIRE_VERSIONr2   r   r   r   Úmin_wire_versionŽ   rH   zHello.min_wire_versionc                 C  rF   )NZmaxWireVersion)r%   r   r   ZMAX_WIRE_VERSIONr2   r   r   r   Úmax_wire_version’   rH   zHello.max_wire_versionúOptional[int]c                 C  rC   )NZ
setVersionr?   r2   r   r   r   Úset_version–   ó   zHello.set_versionúOptional[ObjectId]c                 C  rC   )NZ
electionIdr?   r2   r   r   r   Úelection_idš   rO   zHello.election_idúOptional[ClusterTime]c                 C  rC   )Nz$clusterTimer?   r2   r   r   r   Úcluster_timež   rO   zHello.cluster_timec                 C  rC   )NZlogicalSessionTimeoutMinutesr?   r2   r   r   r   Úlogical_session_timeout_minutes¢   rO   z%Hello.logical_session_timeout_minutesc                 C  r4   r-   )r'   r2   r   r   r   Úis_writable¦   r5   zHello.is_writablec                 C  r4   r-   )r(   r2   r   r   r   Úis_readableª   r5   zHello.is_readablec                 C  s   | j  d¡}|rt |¡S d S )NÚme)r%   r   r   r:   )r/   rW   r   r   r   rW   ®   s   
zHello.meúOptional[datetime.datetime]c                 C  s   | j  di ¡ d¡S )NZ	lastWriteZlastWriteDater?   r2   r   r   r   Úlast_write_dateµ   s   zHello.last_write_dateúOptional[list[str]]c                 C  rC   )NÚcompressionr?   r2   r   r   r   Úcompressors¹   rO   zHello.compressorsú	list[str]c                 C  s   | j  dg ¡S )z³Supported authentication mechanisms for the current user.

        For example::

            >>> hello.sasl_supported_mechs
            ["SCRAM-SHA-1", "SCRAM-SHA-256"]

        ZsaslSupportedMechsr?   r2   r   r   r   Úsasl_supported_mechs½   s   
zHello.sasl_supported_mechsúOptional[Mapping[str, Any]]c                 C  rC   )z"The speculativeAuthenticate field.ZspeculativeAuthenticater?   r2   r   r   r   Úspeculative_authenticateÉ   rE   zHello.speculative_authenticatec                 C  rC   )NZtopologyVersionr?   r2   r   r   r   Útopology_versionÎ   rO   zHello.topology_versionc                 C  r4   r-   )r)   r2   r   r   r   r*   Ò   r5   zHello.awaitablec                 C  rC   )Nr   r?   r2   r   r   r   Ú
service_idÖ   rO   zHello.service_idc                 C  s   | j  dd¡S )NZhelloOkFr?   r2   r   r   r   Úhello_okÚ   s   zHello.hello_okc                 C  rC   )NZconnectionIdr?   r2   r   r   r   Úconnection_idÞ   rO   zHello.connection_idN)F)r   r   r*   r+   r   r,   )r   r   )r   r   )r   r6   )r   r   )r   r@   )r   rB   )r   rM   )r   rP   )r   rR   )r   r+   )r   rX   )r   rZ   )r   r]   )r   r_   )"r!   r"   r#   Ú__doc__Ú	__slots__r0   Úpropertyr3   r.   r=   r>   rA   rD   rG   rI   rJ   rK   rL   rN   rQ   rS   rT   rU   rV   rW   rY   r\   r^   r`   ra   r*   rb   rc   rd   r   r   r   r   r$   A   st    r$   )r   r   r   r   )re   Ú
__future__r   r1   Údatetimer;   Útypingr   r   r   r   Zbson.objectidr   Zpymongor   Zpymongo.server_typer	   Zpymongo.typingsr
   r   r    r   r$   r   r   r   r   Ú<module>   s   
