
    i)i:                        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Z G d d          Z G 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                   |                      d          st          j        S |                      d          rt          j        S |                      d          rt          j        S |                      d          r|                      d          rt          j        S |                      t          j                  rt          j        S |                      t          j	                  rt          j        S |                      d          rt          j
        S |                      d          rt          j        S t          j        S |                      d          d	k    rt          j        S t          j        S )
z0Determine the server type from a hello response.ok	serviceIdisreplicasetsetNamehidden	secondaryarbiterOnlymsgisdbgrid)getr
   UnknownLoadBalancerRSGhostRSOtherHelloCompatPRIMARY	RSPrimaryLEGACY_PRIMARYRSSecondary	RSArbiterMongos
Standalone)r   s    _/Users/user/workspace/sujinbaek/cqa-test-app/venv/lib/python3.11/site-packages/pymongo/hello.py_get_server_typer)      s2   774== #""
ww{ &''		 	  &""			 &778 	'&&WW[()) 		'((WW[/00 	'((WW[!! 	'**WW]## 	'((&&	:	%	%!!%%    c                  "    e Zd ZdZdZdZdZdZdS )r    helloismasterisWritablePrimaryz
not masterN)__name__
__module____qualname__CMD
LEGACY_CMDr!   r#   LEGACY_ERROR r*   r(   r    r    9   s'        
CJ!GNLLLr*   r    c                     e Zd ZdZdZd3d4d
Zed5d            Zed6d            Zed7d            Z	ed8d            Z
ed9d            Zed:d            Zed6d            Zed6d            Zed6d            Zed6d            Zed6d            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d9d$            Zed?d&            Zed@d(            ZedAd*            ZedBd,            ZedBd-            Zed>d.            Zed<d/            Zed>d0            Z ed;d1            Z!d2S )CHellozHParse a hello response from the server.

    .. versionadded:: 3.12
    )_doc_server_type_is_writable_is_readable
_awaitableFr   r   	awaitableboolr   Nonec                    t          |          | _        || _        | j        t          j        t          j        t          j        t          j        fv | _        | j	        t          j
        k    p| j        | _        || _        d S N)r)   r9   r8   r
   r"   r'   r&   r   r:   server_typer$   r;   r<   )selfr   r=   s      r(   __init__zHello.__init__I   sn    ,S11#&	 -!"$	2
 
 !,0GG\4K\#r*   c                4    t          j         | j                  S )zUThe complete hello command response document.

        .. versionadded:: 3.4
        )copyr8   rC   s    r(   documentzHello.documentV   s     y###r*   r   c                    | j         S rA   )r9   rG   s    r(   rB   zHello.server_type^         r*   set[tuple[str, int]]c                   t          t          t          j        t	          j        | j                            dg           | j                            dg           | j                            dg                                         S )z;List of hosts, passives, and arbiters known to this server.hostspassivesarbiters)setmapr	   
clean_node	itertoolschainr8   r   rG   s    r(   	all_hostszHello.all_hostsb   sq     !IMM'2..IMM*b11IMM*b11  	
 	
 		
r*   r   c                8    | j                             di           S )z&Replica set member tags or empty dict.tagsr8   r   rG   s    r(   rW   z
Hello.tagsp   s     y}}VR(((r*   Optional[tuple[str, int]]c                x    | j                             d          rt          j        | j         d                   S dS )z8This server's opinion about who the primary is, or None.primaryN)r8   r   r	   partition_noderG   s    r(   r[   zHello.primaryu   s7     9==## 	(9)=>>>4r*   Optional[str]c                6    | j                             d          S )zReplica set name or None.r   rX   rG   s    r(   replica_set_namezHello.replica_set_name}   s     y}}Y'''r*   c                L    | j                             dt          j                  S )NmaxBsonObjectSize)r8   r   r	   MAX_BSON_SIZErG   s    r(   max_bson_sizezHello.max_bson_size   s    y}}0&2FGGGr*   c                L    | j                             dt          j                  S )NmaxMessageSizeBytes)r8   r   r	   MAX_MESSAGE_SIZErG   s    r(   max_message_sizezHello.max_message_size   s    y}}2F4KLLLr*   c                L    | j                             dt          j                  S )NmaxWriteBatchSize)r8   r   r	   MAX_WRITE_BATCH_SIZErG   s    r(   max_write_batch_sizezHello.max_write_batch_size   s    y}}0&2MNNNr*   c                L    | j                             dt          j                  S )NminWireVersion)r8   r   r	   MIN_WIRE_VERSIONrG   s    r(   min_wire_versionzHello.min_wire_version       y}}-v/FGGGr*   c                L    | j                             dt          j                  S )NmaxWireVersion)r8   r   r	   MAX_WIRE_VERSIONrG   s    r(   max_wire_versionzHello.max_wire_version   rp   r*   Optional[int]c                6    | j                             d          S )N
setVersionrX   rG   s    r(   set_versionzHello.set_version       y}}\***r*   Optional[ObjectId]c                6    | j                             d          S )N
electionIdrX   rG   s    r(   election_idzHello.election_id   ry   r*   Optional[ClusterTime]c                6    | j                             d          S )Nz$clusterTimerX   rG   s    r(   cluster_timezHello.cluster_time       y}}^,,,r*   c                6    | j                             d          S )NlogicalSessionTimeoutMinutesrX   rG   s    r(   logical_session_timeout_minutesz%Hello.logical_session_timeout_minutes   s    y}};<<<r*   c                    | j         S rA   )r:   rG   s    r(   is_writablezHello.is_writable   rJ   r*   c                    | j         S rA   )r;   rG   s    r(   is_readablezHello.is_readable   rJ   r*   c                f    | j                             d          }|rt          j        |          S d S )Nme)r8   r   r	   rR   )rC   r   s     r(   r   zHello.me   s3    Y]]4   	)$R(((tr*   Optional[datetime.datetime]c                ^    | j                             di                               d          S )N	lastWritelastWriteDaterX   rG   s    r(   last_write_datezHello.last_write_date   s&    y}}["--11/BBBr*   Optional[list[str]]c                6    | j                             d          S )NcompressionrX   rG   s    r(   compressorszHello.compressors   s    y}}]+++r*   	list[str]c                8    | j                             dg           S )zSupported authentication mechanisms for the current user.

        For example::

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

        saslSupportedMechsrX   rG   s    r(   sasl_supported_mechszHello.sasl_supported_mechs   s     y}}12666r*   Optional[Mapping[str, Any]]c                6    | j                             d          S )z"The speculativeAuthenticate field.speculativeAuthenticaterX   rG   s    r(   speculative_authenticatezHello.speculative_authenticate   s     y}}6777r*   c                6    | j                             d          S )NtopologyVersionrX   rG   s    r(   topology_versionzHello.topology_version   s    y}}.///r*   c                    | j         S rA   )r<   rG   s    r(   r=   zHello.awaitable   s
    r*   c                6    | j                             d          S )Nr   rX   rG   s    r(   
service_idzHello.service_id   s    y}}[)))r*   c                8    | j                             dd          S )NhelloOkFrX   rG   s    r(   hello_okzHello.hello_ok   s    y}}Y...r*   c                6    | j                             d          S )NconnectionIdrX   rG   s    r(   connection_idzHello.connection_id   r   r*   N)F)r   r   r=   r>   r   r?   )r   r   )r   r   )r   rK   )r   r   )r   rY   )r   r]   )r   ru   )r   rz   )r   r~   )r   r>   )r   r   )r   r   )r   r   )r   r   )"r/   r0   r1   __doc__	__slots__rD   propertyrH   rB   rU   rW   r[   r_   rc   rg   rk   ro   rt   rx   r}   r   r   r   r   r   r   r   r   r   r   r=   r   r   r   r5   r*   r(   r7   r7   A   s        
 WI$ $ $ $ $ $ $ $ X$ ! ! ! X! 
 
 
 X
 ) ) ) X)    X ( ( ( X( H H H XH M M M XM O O O XO H H H XH H H H XH + + + X+ + + + X+ - - - X- = = = X= ! ! ! X! ! ! ! X!    X C C C XC , , , X, 	7 	7 	7 X	7 8 8 8 X8 0 0 0 X0    X * * * X* / / / X/ - - - X- - -r*   r7   )r   r   r   r   )r   
__future__r   rF   datetimerS   typingr   r   r   r   bson.objectidr   pymongor	   pymongo.server_typer
   pymongo.typingsr   r   r)   r    r7   r5   r*   r(   <module>r      s.   9 8 " " " " " "       2 2 2 2 2 2 2 2 2 2 2 2 " " " " " "       + + + + + + 6 6 6 6 6 6 6 6& & & &8               _- _- _- _- _-GM" _- _- _- _- _-r*   