
    [j                        d Z ddlmZ ddlZddlZddlmZmZmZ 	 ddl	m
Z
 dZn# e$ r dZY nw xY wddlmZ dd	lmZ ddZddZdZ G d d          ZdS )zASupport for resolving hosts and options from mongodb+srv:// URIs.    )annotationsN)AnyOptionalUnion)resolverTF)CONNECT_TIMEOUT)ConfigurationErrortextUnion[str, bytes]returnstrc                X    t          | t                    r|                                 S | S )N)
isinstancebytesdecode)r
   s    X/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/pymongo/srv_resolver.pymaybe_decoder   #   s'    $ {{}}K    argsr   kwargsresolver.Answerc                 p    t          t          d          rt          j        | i |S t          j        | i |S )Nresolve)hasattrr   r   query)r   r   s     r   _resolver   *   s?    x## 10000>4*6***r   zdInvalid URI host: %s is not a valid hostname for 'mongodb+srv://'. Did you mean to use 'mongodb://'?c                  B    e Zd Z	 ddd	ZddZddZddZddZddZdS )_SrvResolverr   fqdnr   connect_timeoutOptional[float]srv_service_namesrv_max_hostsintc                   || _         || _        |pt          | _        |pd| _        	 t          j        |           t          t          dz            # t          $ r Y nw xY w	 | j         
                    d          dd          | _        n'# t          $ r t          t          |fz            d w xY wt          | j                  | _        | j        dk     rt          t          |fz            d S )Nr   )zan IP address.      )_SrvResolver__fqdn_SrvResolver__srvr   _SrvResolver__connect_timeout_SrvResolver__srv_max_hosts	ipaddress
ip_addressr	   _INVALID_HOST_MSG
ValueErrorsplit_SrvResolver__plist	Exceptionlen_SrvResolver__slen)selfr   r    r"   r#   s        r   __init__z_SrvResolver.__init__9   s    %
!0!CO,1	 &&&$%69K%KLLL 	 	 	D		L;,,S11!""5DLL 	L 	L 	L$%6$%@AAtK	L$,'';??$%6$%@AAA ?s   +A 
AA#'B $B/r   Optional[str]c                ~   	 t          | j        d| j                  }nL# t          j        t          j        f$ r Y d S t          $ r"}t          t          |                    d d }~ww xY wt          |          dk    rt          d          d
                    d |D                                           d          S )NTXTlifetimer'   z Only one TXT record is supported   &c                B    g | ]}d                      |j                  S )r   )joinstrings.0ress     r   
<listcomp>z,_SrvResolver.get_options.<locals>.<listcomp>]   s&    DDDS388CK00DDDr   zutf-8)r   r)   r+   r   NoAnswerNXDOMAINr3   r	   r   r4   r?   r   )r6   resultsexcs      r   get_optionsz_SrvResolver.get_optionsS   s    	9t{ED<RSSSGG!8#45 	 	 	44 	9 	9 	9$SXX..D8	9w<<!$%GHHH		DDGDDDEEMMgVVVs    A(	A(A##A(encapsulate_errorsboolr   c                    	 t          d| j        z   dz   | j        z   d| j                  }n2# t          $ r%}|s t          t          |                    d d }~ww xY w|S )N_z._tcp.SRVr;   )r   r*   r)   r+   r3   r	   r   )r6   rJ   rG   rH   s       r   _resolve_uriz_SrvResolver._resolve_uri_   s    		9dj 8+dk954Ka  GG  	9 	9 	9% $SXX..D8	9 s   *- 
A AA-tuple[resolver.Answer, list[tuple[str, Any]]]c           	        |                      |          }d |D             }|D ]}	 |d                                                             d          dd          | j         d          }n'# t          $ r t          d|d                    d w xY w| j        |k    rt          d|d                    | j        r5t          j	        |t          | j        t          |                              }||fS )Nc                l    g | ]1}t          |j                            d                     |j        f2S )T)omit_final_dot)r   targetto_textportrA   s     r   rD   z<_SrvResolver._get_srv_response_and_hosts.<locals>.<listcomp>r   sG     
 
 
RU\#*,,D,AABBCHM
 
 
r   r   r&   r'   zInvalid SRV host: )rO   lowerr1   r5   r3   r	   r2   r,   randomsampleminr4   )r6   rJ   rG   nodesnodenlists         r   _get_srv_response_and_hostsz(_SrvResolver._get_srv_response_and_hostsl   s)    ##$677
 
Y`
 
 

  	I 	IDSQ--c221226|~~F S S S()Gd1g)G)GHHdRS|u$$()Gd1g)G)GHHH % 	PM%T-A3u::)N)NOOE~s   AA++$Blist[tuple[str, Any]]c                6    |                      d          \  }}|S )NT)r^   )r6   rM   r[   s      r   	get_hostsz_SrvResolver.get_hosts   s    33D995r   !tuple[list[tuple[str, Any]], int]c                ^    |                      d          \  }}|j        }|r|j        nd}||fS )NFr   )r^   rrsetttl)r6   rG   r[   rd   re   s        r   get_hosts_and_min_ttlz"_SrvResolver.get_hosts_and_min_ttl   s:    99%@@ 'eiiaczr   N)r   )r   r   r    r!   r"   r   r#   r$   )r   r8   )rJ   rK   r   r   )rJ   rK   r   rP   )r   r_   )r   rb   )	__name__
__module____qualname__r7   rI   rO   r^   ra   rf    r   r   r   r   8   s         B B B B B4
W 
W 
W 
W      ,        r   r   )r
   r   r   r   )r   r   r   r   r   r   )__doc__
__future__r   r-   rX   typingr   r   r   dnsr   _HAVE_DNSPYTHONImportErrorpymongo.commonr   pymongo.errorsr	   r   r   r/   r   rj   r   r   <module>rs      s)   H G " " " " " "      ' ' ' ' ' ' ' ' ' 'OO   OOO + * * * * * - - - - - -
   + + + +( R R R R R R R R R Rs   % //