
    [j                        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  G d	 d
          Z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_DocumentTypec                  "    e Zd ZdZdZdZdZdZdS )HelloCompathelloismasterisWritablePrimaryz
not masterN)__name__
__module____qualname__CMD
LEGACY_CMDPRIMARYLEGACY_PRIMARYLEGACY_ERROR     Q/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/pymongo/hello.pyr   r      s'        
CJ!GNLLLr   r   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RSOtherr   r   	RSPrimaryr   RSSecondary	RSArbiterMongos
Standalone)r   s    r   _get_server_typer5   %   s2   774== #""
ww{ &''		 	  &""			 &778 	'&&WW[()) 		'((WW[/00 	'((WW[!! 	'**WW]## 	'((&&	:	%	%!!%%r   c                     e Zd ZdZdZd2d3d
Zed4d            Zed5d            Zed6d            Z	ed7d            Z
ed8d            Zed9d            Zed5d            Zed5d            Zed5d            Zed5d            Zed5d            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d8d$            Zed>d&            Zed?d(            Zed@d*            ZedAd,            ZedAd-            Zed=d.            Zed;d/            Zed=d0            Z d1S )B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)r5   r9   r8   r
   r0   r4   r3   r-   r:   server_typer1   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                H    | j                             dd| j        z            S )NmaxMessageSizeBytes   )r8   r+   rc   rG   s    r   max_message_sizezHello.max_message_size   s!    y}}2A8J4JKKKr   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   s    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   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   r   r   __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   r   r   r7   r7   A   s        
 WI$ $ $ $ $ $ $ $ X$ ! ! ! X! 
 
 
 X
 ) ) ) X)    X ( ( ( X( H H H XH L L L XL 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/ / /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   r5   r7   r   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   