
    nh                        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    /var/www/html/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/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                     t         r6ddlm} t        |d      r |j                  | i |S  |j
                  | i |S ddlm} t        |d      r |j                  | i |S t        d      )Nr   r
   resolve)asyncresolverzWUpgrade to dnspython version >= 2.0 to use MongoClient with mongodb+srv:// connections.)_IS_SYNCr   r   hasattrr   queryr   r	   )argskwargsr   r   s       r   _resolver    1   su     8Y'#8##T4V44x~~t.v..%=),(=(($9&99 e
 	
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      }t        |      dkD  r|dd  n|| _        n!# t        $ r t        t        |fz        d w xY wt        | j                        | _        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)selffqdnconnect_timeoutsrv_service_namesrv_max_hosts
split_fqdns         r   __init__z_SrvResolver.__init__L   s     %
!0!CO,1	  &$%69K%KLL 			L**3/J-0_q-@:ab>jDL 	L$%6$%@AtK	L$,,'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 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NXDOMAINr2   r	   strr0   joinstringsr   )r4   r   resultsexcress        r   get_optionsz_SrvResolver.get_optionsd   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	/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.SRVr=   )r    r(   r'   r)   r2   r	   rB   )r4   encapsulate_errorsrE   rF   s       r   _resolve_uriz_SrvResolver._resolve_urir   se    		9djj 8+dkk954KaKaG   	9%$SX.D8	9s   59 	AAAc           	     z   | j                  |      }|D cg c]3  }t        |j                  j                  d            |j                  f5 }}|D ]  }| j
                  |d   j                         k(  rt        d      	 |d   j                         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 xY w)NT)omit_final_dotr   z=Invalid SRV host: return address is identical to SRV hostnamer$   r&   zInvalid SRV host: )rM   r   targetto_textportr'   lowerr	   r/   r3   r2   r1   r*   randomsampleminr0   )r4   rL   rE   rG   nodesnodenlists          r   _get_srv_response_and_hostsz(_SrvResolver._get_srv_response_and_hosts   sM    ##$67
 
 #**,,D,ABCHHM
 
  
	ID{{d1gmmo-(S 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   8D3DD:c                .    | j                  d      \  }}|S )NT)rZ   )r4   rJ   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   )rZ   rrsetttl)r4   rE   rW   r^   r_   s        r   get_hosts_and_min_ttlz"_SrvResolver.get_hosts_and_min_ttl   s6    99%@ eiiaczr   N)r   )r5   rB   r6   zOptional[float]r7   rB   r8   int)returnzOptional[str])rL   boolrb   resolver.Answer)rL   rc   rb   z-tuple[resolver.Answer, list[tuple[str, Any]]])rb   zlist[tuple[str, Any]])rb   z!tuple[list[tuple[str, Any]], int])	__name__
__module____qualname__r:   rH   rM   rZ   r\   r`    r   r   r"   r"   K   s\     (( )( 	(
 (0W"&	66r   r"   )rb   rc   )r   zUnion[str, bytes]rb   rB   )r   r   r   r   rb   rd   )__doc__
__future__r   r+   rT   typingr   r   r   r   pymongo.commonr   pymongo.errorsr	   r   r   r   r   r   r    r-   r"   rh   r   r   <module>rn      sP    H "   6 6 * -
*( W Wr   