
    ]*i                        d Z ddlm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 erddlmZ dZdd	Zdd
ZddZdZ G d d      Zy)zASupport for resolving hosts and options from mongodb+srv:// URIs.    )annotationsN)TYPE_CHECKINGAnyOptionalUnion)CONNECT_TIMEOUT)ConfigurationErrorresolverTc                 ,    	 dd l } y# t        $ r Y yw xY w)Nr   TF)dnsImportError)r   s    Z/home/alumno/antonio/venv/lib/python3.12/site-packages/pymongo/synchronous/srv_resolver.py_have_dnspythonr      s     s    	c                F    t        | t              r| j                         S | S )N)
isinstancebytesdecode)texts    r   maybe_decoder   *   s    ${{}K    c                 n    t         rddlm}  |j                  | i |S ddlm}  |j                  | i |S )Nr   r
   )asyncresolver)_IS_SYNCr   r   resolver   )argskwargsr   r   s       r   _resolver   1   s;     x000%$}$$d5f55r   zdInvalid URI host: %s is not a valid hostname for 'mongodb+srv://'. Did you mean to use 'mongodb://'?c                  V    e Zd Z	 d	 	 	 	 	 	 	 d	dZd
dZddZ	 	 	 	 ddZddZddZy)_SrvResolverc                   || _         || _        |xs t        | _        |xs d| _        	 t        j                  |       t        t        dz        # t        $ r Y nw xY w	 | j                   j                  d      }t        |      dkD  r|dd  n|| _        n!# t        $ r t        t        |fz        d w xY wt        | j                        | _        t        |      | _        y )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__z_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!5B B5c                   ddl m} 	 t        | j                  d| j                        }t        |      dkD  rt        d      dj                  |D cg c]  }dj                  |j                         c}      j                  d	      S # |j
                  |j                  f$ r Y y t        $ r}t        t        |            |d }~ww xY wc c}w )
Nr   r
   TXTlifetimer$   z Only one TXT record is supported   &r   zutf-8)r   r   r   r%   r'   NoAnswerNXDOMAINr0   r	   strr.   joinstringsr   )r3   r   resultsexcress        r   get_optionsz_SrvResolver.get_options\   s     	8t{{ED<R<RSG w<!$%GHH		GDS388CKK0DEMMgVV !!8#4#45 	 	8$SX.C7	8 Es#   "B
 "C
C	'C	/CC	c                    	 t        d| j                  z   dz   | j                  z   d| j                        }|S # t        $ r}|s t        t        |            |d }~ww xY w)N_z._tcp.SRVr<   )r   r&   r%   r'   r0   r	   rA   )r3   encapsulate_errorsrD   rE   s       r   _resolve_uriz_SrvResolver._resolve_urij   se    		8djj 8+dkk954KaKaG   	8%$SX.C7	8s   59 	AAAc           	        | j                  |      }|D cg c]3  }t        |j                  j                  d            |j                  f5 }}|D ]  }|d   j                         }| j                  |k(  r| j                  dk  rt        d      	 |j                  d      dd  | j                   d  }| j                  |k7  srt        d|d           | j                  r3t        j                  |t!        | j                  t#        |                  }||fS c c}w # t        $ r}t        d|d          |d }~ww xY w)	NT)omit_final_dotr      z=Invalid SRV host: return address is identical to SRV hostnamer"   r$   zInvalid SRV host: )rL   r   targetto_textportlowerr%   r2   r	   r-   r1   r0   r/   r(   randomsampleminr.   )	r3   rK   rD   rF   nodesnodesrv_hostnlistrE   s	            r   _get_srv_response_and_hostsz(_SrvResolver._get_srv_response_and_hostsw   sQ    ##$67
 
 #**,,D,ABCHHM
 
  	IDAw}}H{{h&4;;?(S R s+AB/? ||u$(+=d1gY)GHH	I MM%T-A-A3u:)NOE~)
  R(+=d1gY)GHcQRs   8D"D	D>'D99D>c                .    | j                  d      \  }}|S )NT)r[   )r3   rI   rW   s      r   	get_hostsz_SrvResolver.get_hosts   s    33D95r   c                j    | j                  d      \  }}|j                  }|r|j                  nd}||fS )NFr   )r[   rrsetttl)r3   rD   rW   r_   r`   s        r   get_hosts_and_min_ttlz"_SrvResolver.get_hosts_and_min_ttl   s6    99%@ eiiaczr   N)r   )r4   rA   r5   zOptional[float]r6   rA   r7   int)returnzOptional[str])rK   boolrc   resolver.Answer)rK   rd   rc   z-tuple[resolver.Answer, list[tuple[str, Any]]])rc   zlist[tuple[str, Any]])rc   z!tuple[list[tuple[str, Any]], int])	__name__
__module____qualname__r9   rG   rL   r[   r]   ra    r   r   r    r    B   s\     && )& 	&
 &2W"&	68r   r    )rc   rd   )r   zUnion[str, bytes]rc   rA   )r   r   r   r   rc   re   )__doc__
__future__r   r)   rT   typingr   r   r   r   pymongo.commonr   pymongo.errorsr	   r   r   r   r   r   r   r+   r    ri   r   r   <module>ro      sP    H "   6 6 * -6( Y Yr   