
    (ph                    t   S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJ	r	J
r
JrJrJr  SSKJr   SSKJrJr  SSKJr  SS	KJr  SSKJr  SSKJr  \(       a  SSKJr  \" 5       r\" 5       \l        \" 5       r \" 5       \ l        SS jr!SS jr"SS jr# " S S\5      r$ " S S5      r%g! \ a	    \" S
5      ef = f)z
DNS query support
    )annotationsN)randint)AnyDefaultDict
NamedTupleSequenceTYPE_CHECKING)defaultdict)ResolverCache)r   )DNSExceptionzBthe module psycopg._dns requires the package 'dnspython' installed   )errors)conninfo)SRVc                `  #    [         R                  " S[        5        / n/ n/ n[        R                  " U 5      I Sh  vN  H  nUR                  S5      b  UR                  US   5        UR                  S5      b  UR                  US   5        UR                  S5      c  Mc  UR                  [        US   5      5        M     U R                  5       nSR                  U5      nU(       a  XeS'   SR                  U5      nU(       a  XuS'   SR                  U5      nU(       a  XS'   U$  N7f)z
Perform async DNS lookup of the hosts and return a new params dict.

.. deprecated:: 3.1
    The use of this function is not necessary anymore, because
    `psycopg.AsyncConnection.connect()` performs non-blocking name
    resolution automatically.
z@from psycopg 3.1, resolve_hostaddr_async() is not needed anymoreNhosthostaddrport,)
warningswarnDeprecationWarningr   conninfo_attempts_asyncgetappendstrcopyjoin)	paramshosts	hostaddrsportsattemptoutshosts
shostaddrssportss	            ?/var/www/html/venv/lib/python3.13/site-packages/psycopg/_dns.pyresolve_hostaddr_asyncr*   '   s	     MMJ EIE!99&AAA;;v*LL);;z".WZ01;;v*LLWV_-. B ++-CXXe_FF)$J$JXXe_FFJ' Bs   ;D.D,A#D.%BD.c                4    [        5       R                  U 5      $ )z/Apply SRV DNS lookup as defined in :RFC:`2782`.)Rfc2782Resolverresolver    s    r)   resolve_srvr/   N   s    $$V,,    c                P   #    [        5       R                  U 5      I Sh  vN $  N7f)z$Async equivalent of `resolve_srv()`.N)r,   resolve_asyncr.   s    r)   resolve_srv_asyncr3   S   s      "008888s   &$&c                  F    \ rS rSr% S\S'   S\S'   SrS\S'   SrS	\S
'   Srg)HostPortX   r   r   r   FbooltotryNz
str | Nonetarget )__name__
__module____qualname____firstlineno____annotations__r8   r9   __static_attributes__r:   r0   r)   r5   r5   X   s     
I
IE4FJr0   r5   c                      \ rS rSrSr\R                  " S5      rSS jrSS jr	SS 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)r,   _   zImplement SRV RR Resolution as per RFC 2782

The class is organised to minimise code duplication between the sync and
the async paths.
z9^(?P<service>_[^\.]+)\.(?P<proto>_[^\.]+)\.(?P<target>.+)c                    U R                  U5      nU(       d  U$ / nU HG  nUR                  (       a"  UR                  U R                  U5      5        M6  UR	                  U5        MI     U R                  X5      $ )5Update the parameters host and port after SRV lookup.)_get_attemptsr8   extend_resolve_srvr   _return_paramsselfr    attemptshpshps        r)   r-   Rfc2782Resolver.resolveh   se    %%f-MBxx

4,,R01

2	  ""6//r0   c                  #    U R                  U5      nU(       d  U$ / nU HO  nUR                  (       a*  UR                  U R                  U5      I Sh  vN 5        M>  UR	                  U5        MQ     U R                  X5      $  N07f)rD   N)rE   r8   rF   _resolve_srv_asyncr   rH   rI   s        r)   r2   Rfc2782Resolver.resolve_asyncw   sp     %%f-MBxx

!8!8!<<=

2	  ""6//	 =s   ABB
1Bc           	        UR                  S[        R                  R                  SS5      5      (       a  / $ UR                  S[        R                  R                  SS5      5      nUR                  S5      n[	        UR                  S[        R                  R                  SS5      5      5      nUR                  S5      n[        U5      S	:X  a  U[        U5      -  n[        U5      [        U5      :w  a/  [        R                  " S
[        U5       S[        U5       S35      e/ nSn[        X55       H}  u  pU R                  R                  U5      n
U
(       d  U	R                  5       S:X  a(  SnU
(       a  U
R                  S5      OSn[        XSUS9nO	[        XS9nUR                  U5        M     U(       a  U$ / $ )zz
Return the list of host, and for each host if SRV lookup must be tried.

Return an empty list if no lookup is requested.
r   
PGHOSTADDR r   PGHOSTr   r   PGPORTr   zcannot match z hosts with z port numbersFsrvTr9   N)r   r   r8   r9   r   r   )r   osenvironsplitr   leneOperationalErrorzip	re_srv_rrmatchlowergroupr5   r   )rJ   r    host_arghosts_inport_argports_inr%   	srv_foundr   r   mr9   rM   s                r)   rE   Rfc2782Resolver._get_attempts   sk    ::j"**..r"BCCI

62::>>(B+GH>>#&FJJvrzz~~h/KLM>>#&x=AH%Hx=CM) $$Hl3x=/W  	h1JD$$T*ADJJLE) 	./*T4$vN43JJrN 2  s'R'r0   c                     [         R                  UR                  S5      nU R	                  X5      $ ! [         a    Sn Nf = fNr   r:   )resolverr-   r   r   _get_solved_entriesrJ   rM   anss      r)   rG   Rfc2782Resolver._resolve_srv   sF    	""277E2C ''00  	C	s    3 AAc                   #     [         R                  UR                  S5      I S h  vN nU R	                  X5      $  N! [         a    Sn N!f = f7frl   )async_resolverr-   r   r   rn   ro   s      r)   rP   "Rfc2782Resolver._resolve_srv_async   sN     	&..rww>>C ''00 ? 	C	s1   A#? =? A? AAAAc           	        U(       dP  UR                   (       a=  UR                  R                  5       S:w  a  [        UR                   UR                  S9/$ / $ [	        U5      S:X  a  [        US   R                   5      S:X  a  / $ U R                  U5       Vs/ s HB  n[        [        UR                   5      R                  S5      [        UR                  5      S9PMD     sn$ s  snf )NrW   rX   r   r   .)r9   r   rb   r5   r\   r   sort_rfc2782rstrip)rJ   rM   entriesentrys       r)   rn   #Rfc2782Resolver._get_solved_entries   s     yyRWW]]_5 biibgg>??	 w<1WQZ%6%6!73!>I **73
3 #ell+2237c%**oN3
 	
 
s   A	C$c                    U(       d  [         R                  " S5      eUR                  5       nSR                  S U 5       5      US'   SR                  S U 5       5      US'   U$ )Nz!no host found after SRV RR lookupr   c              3  8   #    U  H  oR                   v   M     g 7fN)r   .0rM   s     r)   	<genexpr>1Rfc2782Resolver._return_params.<locals>.<genexpr>   s     52ww   r   c              3  L   #    U  H  n[        UR                  5      v   M     g 7fr~   )r   r   r   s     r)   r   r      s     :cs277||cs   "$r   )r]   r^   r   r   )rJ   r    rL   r%   s       r)   rH   Rfc2782Resolver._return_params   sY     $$%HIIkkmhh555Fhh:c::F
r0   c                   [        [        5      n/ nU H   nX$R                     R                  U5        M"     [	        UR                  5       5       H  u  pV[        U5      S:X  a  UR                  US   5        M*  UR                  S S9  [        S U 5       5      nU(       d  MU  [        SU5      nSn	[        U5       H  u  pXR                  -  n	X:  d  M    O   UR                  W5        X{R                  -  nUW
	 U(       a  Mb  M     U$ )z=
Implement the priority/weight ordering defined in RFC 2782.
r   r   c                    U R                   $ r~   weight)ents    r)   <lambda>.Rfc2782Resolver.sort_rfc2782.<locals>.<lambda>   s    r0   )keyc              3  8   #    U  H  oR                   v   M     g 7fr~   r   )r   r   s     r)   r   /Rfc2782Resolver.sort_rfc2782.<locals>.<genexpr>   s     =WczzWr   )r
   listpriorityr   sorteditemsr\   sortsumr   	enumerater   )rJ   rp   
prioritiesr%   rz   priry   total_weightrcsumir   s               r)   rw   Rfc2782Resolver.sort_rfc2782   s    
 3>d2C
E~~&--e4  #:#3#3#56LC7|q 

71:&LL3L4=W==L'A|,'0FAJJ&Dy 1 

3

*AJ ' 7$ 
r0   r:   Nr    dict[str, Any]returnr   )r    r   r   list[HostPort])rM   r5   r   r   )rM   r5   ry   Sequence[SRV]r   r   )r    r   rL   r   r   r   )rp   r   r   z	list[SRV])r;   r<   r=   r>   __doc__recompiler`   r-   r2   rE   rG   rP   rn   rH   rw   r@   r:   r0   r)   r,   r,   _   sq     

WXI00%(N11

%2
	
(
$
+9
	
r0   r,   r   )&r   
__future__r   rY   r   r   randomr   typingr   r   r   r   r	   collectionsr
   dns.resolverr   r   dns.asyncresolverAsyncResolverdns.exceptionr   ImportErrorrT   r   r]   r   dns.rdtypes.IN.SRVr   rm   cachers   r*   r/   r3   r5   r,   r:   r0   r)   <module>r      s    # 	 	   H H #,;*  &:w $N-
9
z X XU  
L s   B( (B7