
    R
h                       d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZ ddlmZ 	 ddlmZmZ ddlmZ dd	lmZ n# e$ r  ed
          w xY wddlmZ ddlmZ e	rddlmZ  e            Z e            e_         e            Z  e            e _        ddZ!ddZ"ddZ# G d de          Z$ G d d          Z%dS )z
DNS query support
    )annotationsN)randint)TYPE_CHECKINGAnyDefaultDict
NamedTupleSequence)defaultdict)CacheResolver)DNSException)r   zBthe module psycopg._dns requires the package 'dnspython' installed   )conninfo)errors)SRVparamsdict[str, Any]returnc                  K   t          j        dt                     g }g }g }t          j        |            d{V D ]}|                    d          |                    |d                    |                    d          |                    |d                    |                    d          (|                    t          |d                              |                                 }d	                    |          }|r||d<   d	                    |          }|r||d<   d	                    |          }|r||d<   |S )a  
    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)	r   hosts	hostaddrsportsattemptoutshosts
shostaddrssportss	            W/var/www/html/01_SiteInternet/03_Maps/venv/lib/python3.11/site-packages/psycopg/_dns.pyresolve_hostaddr_asyncr,   '   sW      MJ   EIE!9&AAAAAAAA / /;;v*LL)));;z"".WZ0111;;v*LLWV_--...
++--CXXe__F F)$$J %$JXXe__F FJ    c                D    t                                          |           S )z/Apply SRV DNS lookup as defined in :RFC:`2782`.)Rfc2782Resolverresolver   s    r+   resolve_srvr2   N   s    $$V,,,r-   c                T   K   t                                          |            d{V S )z$Async equivalent of `resolve_srv()`.N)r/   resolve_asyncr1   s    r+   resolve_srv_asyncr5   S   s2       ""00888888888r-   c                  @    e Zd ZU ded<   ded<   dZded<   dZded	<   dS )
HostPortr    r   r   FbooltotryNz
str | Nonetarget)__name__
__module____qualname____annotations__r9   r:    r-   r+   r7   r7   X   sF         IIIIIIEFr-   r7   c                  r    e Zd ZdZ ej        d          ZddZddZdd	Z	ddZ
ddZddZddZddZdS )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>.+)r   r   r   c                    |                      |          }|s|S g }|D ]G}|j        r)|                    |                     |                     2|                    |           H|                     ||          S )5Update the parameters host and port after SRV lookup.)_get_attemptsr9   extend_resolve_srvr   _return_paramsselfr   attemptshpshps        r+   r0   zRfc2782Resolver.resolveh   s    %%f-- 	M 	 	Bx 

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

2""63///r-   c                  K   |                      |          }|s|S g }|D ]M}|j        r/|                    |                     |           d{V            8|                    |           N|                     ||          S )rB   N)rC   r9   rD   _resolve_srv_asyncr   rF   rG   s        r+   r4   zRfc2782Resolver.resolve_asyncw   s      %%f-- 	M 	 	Bx 

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

2""63///r-   list[HostPort]c           	        |                     dt          j                             dd                    rg S |                     dt          j                             dd                    }|                    d          }t	          |                     dt          j                             dd                              }|                    d          }t          |          d	k    r|t          |          z  }t          |          t          |          k    r5t          j        d
t          |           dt          |           d          g }d}t          ||          D ]\  }}	| j	        
                    |          }
|
s|	                                dk    r/d}|
r|
                    d          nd}t          ||	d|          }nt          ||	          }|                    |           |r|ng S )z
        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srvTr:   N)r   r   r9   r:   r   r   )r   osenvironsplitr    leneOperationalErrorzip	re_srv_rrmatchlowergroupr7   r   )rH   r   host_arghosts_inport_argports_inr'   	srv_foundr   r   mr:   rK   s                r+   rC   zRfc2782Resolver._get_attempts   s    ::j"*..r"B"BCC 	I

62:>>(B+G+GHH>>#&&FJJvrz~~h/K/KLLMM>>#&&x==AH%Hx==CMM)) $WHWW3x==WWW   	h11 	 	JD$$$T**A 4DJJLLE)) 	./9***T4d$vNNN4d333JJrNNNN'ssR'r-   rK   r7   c                    	 t                               |j        d          }n# t          $ r d}Y nw xY w|                     ||          S Nr   r?   )resolverr0   r   r   _get_solved_entriesrH   rK   anss      r+   rE   zRfc2782Resolver._resolve_srv   sZ    	""27E22CC 	 	 	CCC	''C000s    # 22c                   K   	 t                               |j        d           d {V }n# t          $ r d}Y nw xY w|                     ||          S rh   )async_resolverr0   r   r   rj   rk   s      r+   rM   z"Rfc2782Resolver._resolve_srv_async   sp      	&..rw>>>>>>>>CC 	 	 	CCC	''C000s   &+ ::entriesSequence[SRV]c                .   |sB|j         r9|j                                        dk    rt          |j         |j                  gS g S t	          |          dk    r t          |d         j                   dk    rg S d |                     |          D             S )NrT   rU   r   r   .c                    g | ]J}t          t          |j                                      d           t          |j                            KS )rr   rU   )r7   r    r:   rstripr   ).0entrys     r+   
<listcomp>z7Rfc2782Resolver._get_solved_entries.<locals>.<listcomp>   sU     
 
 
 #el++22377c%*ooNNN
 
 
r-   )r:   r   r_   r7   rY   r    sort_rfc2782)rH   rK   ro   s      r+   rj   z#Rfc2782Resolver._get_solved_entries   s      	y RW]]__55 bibg>>>??	 w<<1WQZ%6!7!73!>!>I
 
**733
 
 
 	
r-   rJ   c                    |st          j        d          |                                }d                    d |D                       |d<   d                    d |D                       |d<   |S )Nz!no host found after SRV RR lookupr   c              3  $   K   | ]}|j         V  d S N)r   ru   rK   s     r+   	<genexpr>z1Rfc2782Resolver._return_params.<locals>.<genexpr>   s$      552rw555555r-   r   c              3  >   K   | ]}t          |j                  V  d S r{   )r    r   r|   s     r+   r}   z1Rfc2782Resolver._return_params.<locals>.<genexpr>   s*      ::s27||::::::r-   r   )rZ   r[   r!   r"   )rH   r   rJ   r'   s       r+   rF   zRfc2782Resolver._return_params   sy      	J$%HIIIkkmmhh5555555Fhh::c:::::F
r-   rl   	list[SRV]c                F   t          t                    }g }|D ]"}||j                                     |           #t	          |                                          D ]\  }}t          |          dk    r|                    |d                    4|                    d            t          d |D                       }|r]t          d|          }d}	t          |          D ]\  }
}|	|j        z  }	|	|k    r n|                    |           ||j        z  }||
= |]|S )zM
        Implement the priority/weight ordering defined in RFC 2782.
        r   r   c                    | j         S r{   weight)ents    r+   <lambda>z.Rfc2782Resolver.sort_rfc2782.<locals>.<lambda>   s     r-   )keyc              3  $   K   | ]}|j         V  d S r{   r   )ru   r   s     r+   r}   z/Rfc2782Resolver.sort_rfc2782.<locals>.<genexpr>   s$      ==csz======r-   )r
   listpriorityr   sorteditemsrY   sortsumr   	enumerater   )rH   rl   
prioritiesr'   rv   priro   total_weightrcsumir   s               r+   rx   zRfc2782Resolver.sort_rfc2782   sR   
 3>d2C2C
 	5 	5Eu~&--e4444":#3#3#5#566 	 	LC7||q  

71:&&&LL33L444==W=====L 	A|,,'00  FAsCJ&Dqyy !

3
*AJ  	 
r-   Nr   r   r   r   )r   r   r   rN   )rK   r7   r   rN   )rK   r7   ro   rp   r   rN   )r   r   rJ   rN   r   r   )rl   rp   r   r   )r;   r<   r=   __doc__recompiler]   r0   r4   rC   rE   rM   rj   rF   rx   r?   r-   r+   r/   r/   _   s          
WXXI0 0 0 00 0 0 0%( %( %( %(N1 1 1 11 1 1 1
 
 
 
(
 
 
 
     r-   r/   r   )&r   
__future__r   rV   r   r   randomr   typingr   r   r   r   r	   collectionsr
   dns.resolverr   r   dns.exceptionr   dns.asyncresolverAsyncResolverImportErrorrQ   r   r   rZ   dns.rdtypes.IN.SRVr   ri   cachern   r,   r2   r5   r7   r/   r?   r-   r+   <module>r      s    # " " " " " 				 				        H H H H H H H H H H H H H H # # # # # #,,,,,,,,******;;;;;;;   
+L  
             '&&&&&&8::uww $ $ $ $N- - - -
9 9 9 9
    z   X X X X X X X X X Xs   A A