
    i/                        S r SSKJr  SSKrSSKrSSKJrJrJrJ	r	  SSK
Jr  SSKJr  \(       a  SSKJr  SrSS	 jrSS
 jrSS jrSr " S S5      rg)zASupport for resolving hosts and options from mongodb+srv:// URIs.    )annotationsN)TYPE_CHECKINGAnyOptionalUnion)CONNECT_TIMEOUT)ConfigurationErrorresolverFc                 .     SS K n g! [         a     gf = f)Nr   TF)dnsImportError)r   s    N/app/mltbenv/lib/python3.13/site-packages/pymongo/asynchronous/srv_resolver.py_have_dnspythonr      s     s    
c                P    [        U [        5      (       a  U R                  5       $ U $ )N)
isinstancebytesdecode)texts    r   maybe_decoder   *   s     ${{}K    c                    #    [         (       a  SSKJn  UR                  " U 0 UD6$ SSKJn  UR                  " U 0 UD6I S h  vN $  N7f)Nr   r
   )asyncresolver)_IS_SYNCr   r   resolver   )argskwargsr   r   s       r   _resolver   1   sB     x 000%"**D;F;;;;s   ?AAAzdInvalid URI host: %s is not a valid hostname for 'mongodb+srv://'. Did you mean to use 'mongodb://'?c                  l    \ rS rSr S
       SS jjrSS jrSS jr    SS jrSS jrSS jr	Sr
g	)_SrvResolverB   c                   Xl         X0l        U=(       d    [        U l        U=(       d    SU l         [
        R                  " U5        [        [        S-  5      e! [         a     Of = f U R                   R                  S5      n[        U5      S:  a  USS  OUU l        O"! [         a    [        [        U4-  5      S ef = f[        U R                  5      U l        [        U5      U l        g )Nr   )zan IP address.      )_SrvResolver__fqdn_SrvResolver__srvr   _SrvResolver__connect_timeout_SrvResolver__srv_max_hosts	ipaddress
ip_addressr	   _INVALID_HOST_MSG
ValueErrorsplitlen_SrvResolver__plist	Exception_SrvResolver__slennparts)selffqdnconnect_timeoutsrv_service_namesrv_max_hosts
split_fqdns         r   __init___SrvResolver.__init__C   s     %
!0!CO,1	  &$%69K%KLL 			L**3/J-0_q-@:ab>jDL 	L$%6$%@AtK	L$,,'*os   (A 
A'&A'+6B" "Cc                  #    SSK Jn   [        U R                  SU R                  S9I S h  vN n[        U5      S:  a  [        S5      eSR                  U Vs/ s H  nSR                  UR                  5      PM      sn5      R                  S	5      $  Nh! UR
                  UR                  4 a     g [         a  n[        [        U5      5      UeS nAff = fs  snf 7f)
Nr   r
   TXTlifetimer%   z Only one TXT record is supported   &r   zutf-8)r   r   r   r&   r(   NoAnswerNXDOMAINr1   r	   strr/   joinstringsr   )r4   r   resultsexcress        r   get_options_SrvResolver.get_options\   s      	8$T[[%$BXBXYYG w<!$%GHH		GDGS388CKK0GDEMMgVV Z!!8#4#45 	 	8$SX.C7	8 EsO   C "B BB )C %C?C B C3C 5	C>CCC c                   #     [        SU R                  -   S-   U R                  -   SU R                  S9I S h  vN nU$  N! [         a"  nU(       d  e [        [        U5      5      UeS nAff = f7f)N_z._tcp.SRVr>   )r   r'   r&   r(   r1   r	   rC   )r4   encapsulate_errorsrF   rG   s       r   _resolve_uri_SrvResolver._resolve_urij   sq     		8$djj 8+dkk954KaKa G   	8%$SX.C7	8s7   A15A A A A1 A 
A.A))A..A1c           	       #    U R                  U5      I S h  vN nU Vs/ s H1  n[        UR                  R                  SS95      UR                  4PM3     nnU H  nUS   R                  5       nU R                  U:X  a  U R                  S:  a  [        S5      e UR                  S5      SS  U R                  * S  nU R                  U:w  d  Mv  [        SUS    35      e   U R                  (       a4  [        R                  " U[!        U R                  [#        U5      5      5      nX$4$  GNs  snf ! [         a  n[        SUS    35      UeS nAff = f7f)	NT)omit_final_dotr      z=Invalid SRV host: return address is identical to SRV hostnamer#   r%   zInvalid SRV host: )rO   r   targetto_textportlowerr&   r3   r	   r.   r2   r1   r0   r)   randomsampleminr/   )	r4   rN   rF   rH   nodesnodesrv_hostnlistrG   s	            r   _get_srv_response_and_hosts(_SrvResolver._get_srv_response_and_hostsw   sU     ))*<==
 
 #**,,D,ABCHHM 	 
 DAw}}H{{h&4;;?(S R s+AB/? ||u$(+=d1gY)GHH  MM%T-A-A3u:)NOE~/ >
  R(+=d1gY)GHcQRsL   ED-E8D0AE"D5 EAE0E5
E?EEEc                H   #    U R                  S5      I S h  vN u  pU$  N7f)NT)r_   )r4   rL   r[   s      r   	get_hosts_SrvResolver.get_hosts   s%     99$?? @s   " 	"c                   #    U R                  S5      I S h  vN u  pUR                  nU(       a  UR                  OSnX$4$  N*7f)NFr   )r_   rrsetttl)r4   rF   r[   re   rf   s        r   get_hosts_and_min_ttl"_SrvResolver.get_hosts_and_min_ttl   s>     #??FF eiiaz Gs   AA+A)__connect_timeout__fqdn__plist__slen__srv__srv_max_hostsr3   N)r   )r5   rC   r6   zOptional[float]r7   rC   r8   int)returnzOptional[str])rN   boolrp   resolver.Answer)rN   rq   rp   z-tuple[resolver.Answer, list[tuple[str, Any]]])rp   zlist[tuple[str, Any]])rp   z!tuple[list[tuple[str, Any]], int])__name__
__module____qualname____firstlineno__r:   rI   rO   r_   rb   rg   __static_attributes__ r   r   r    r    B   s\     && )& 	&
 &2W"&	68r   r    )rp   rq   )r   zUnion[str, bytes]rp   rC   )r   r   r   r   rp   rr   )__doc__
__future__r   r*   rX   typingr   r   r   r   pymongo.commonr   pymongo.errorsr	   r   r   r   r   r   r   r,   r    rx   r   r   <module>r~      sP    H "   6 6 * -<( Y Yr   