
    FCf                        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dlmZ 	 ddlmZ dZdd
ZddZdZ G d d      Zy# e$ r d	ZY w xY w)zASupport for resolving hosts and options from mongodb+srv:// URIs.    )annotationsN)AnyOptionalUnion)CONNECT_TIMEOUT)ConfigurationError)resolverTFc                F    t        | t              r| j                         S | S )N)
isinstancebytesdecode)texts    T/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/pymongo/srv_resolver.pymaybe_decoder   #   s    ${{}K    c                 v    t        t        d      rt        j                  | i |S t        j                  | i |S )Nresolve)hasattrr	   r   query)argskwargss     r   _resolver   *   s6    x#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                  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      dd  | _        n!# t        $ r t        t        |fz        d w xY wt        | j                        | _        | j                  dk  rt        t        |fz        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_SrvResolver__plist	Exceptionlen_SrvResolver__slen)selffqdnconnect_timeoutsrv_service_namesrv_max_hostss        r   __init__z_SrvResolver.__init__9   s     %
!0!CO,1	  &$%69K%KLL 			L;;,,S1!"5DL 	L$%6$%@AtK	L$,,';;?$%6$%@AA s   'A 	AA!#B B#c                   	 t        | j                  d| j                        }t        |      dkD  rt        d      dj                  |D cg c]  }dj                  |j                         c}      j                  d      S # t        j                  t        j
                  f$ r Y y t        $ r}t        t        |            d d }~ww xY wc c}w )NTXTlifetimer   z Only one TXT record is supported   &r   zutf-8)r   r   r!   r	   NoAnswerNXDOMAINr)   r   strr*   joinstringsr   )r,   resultsexcress       r   get_optionsz_SrvResolver.get_optionsS   s    	9t{{ED<R<RSG w<!$%GHH		GDS388CKK0DEMMgVV !!8#4#45 	 	9$SX.D8	9 Es#   "B "C#C)C1CCc                    	 t        d| j                  z   dz   | j                  z   d| j                        }|S # t        $ r}|s t        t        |            d d }~ww xY w)N_z._tcp.SRVr4   )r   r    r   r!   r)   r   r9   )r,   encapsulate_errorsr<   r=   s       r   _resolve_uriz_SrvResolver._resolve_uri_   se    		9djj 8+dkk954KaKaG   	9%$SX.D8	9s   59 	AAAc           	     $   | j                  |      }|D cg c]3  }t        |j                  j                  d            |j                  f5 }}|D ]V  }	 |d   j                         j                  d      dd  | j                   d  }| j                  |k7  sGt        d|d           | j                  r3t        j                  |t        | j                  t        |                  }||fS c c}w # t        $ r t        d|d          d w xY w)NT)omit_final_dotr   r   r   zInvalid SRV host: )rD   r   targetto_textportlowerr'   r+   r)   r   r(   r"   randomsampleminr*   )r,   rC   r<   r>   nodesnodenlists          r   _get_srv_response_and_hostsz(_SrvResolver._get_srv_response_and_hostsl   s&    ##$67 Za
RU\#**,,D,ABCHHM
 

  	IDSQ--c2126|~F ||u$(+=d1gY)GHH	I MM%T-A-A3u:)NOE~
  S(+=d1gY)GHdRSs   8C.3C33Dc                .    | j                  d      \  }}|S )NT)rQ   )r,   rA   rN   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   )rQ   rrsetttl)r,   r<   rN   rU   rV   s        r   get_hosts_and_min_ttlz"_SrvResolver.get_hosts_and_min_ttl   s6    99%@ eiiaczr   N)r   )r-   r9   r.   zOptional[float]r/   r9   r0   int)returnzOptional[str])rC   boolrY   resolver.Answer)rC   rZ   rY   z-tuple[resolver.Answer, list[tuple[str, Any]]])rY   zlist[tuple[str, Any]])rY   z!tuple[list[tuple[str, Any]], int])	__name__
__module____qualname__r1   r?   rD   rQ   rS   rW    r   r   r   r   8   sa     BB )B 	B
 B4
W"&	6,r   r   )r   zUnion[str, bytes]rY   r9   )r   r   r   r   rY   r[   )__doc__
__future__r   r#   rK   typingr   r   r   pymongo.commonr   pymongo.errorsr   dnsr	   _HAVE_DNSPYTHONImportErrorr   r   r%   r   r_   r   r   <module>rh      sc    H "   ' ' * -O+( R R7  Os   A AA