§
    YŠtj¬  ã                  ó˜  — 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 ddl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)Údefaultdict)ÚSequence)Ú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 	                    |¦  «        x}r||d<   d 	                    |¦  «        x}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	            úJ/var/www/html/CA-Chatbot/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ÑÔÐ*Ø�LŠL˜ œÑ)Ô)Ð)Ø�;Š;�zÑ"Ô"Ð.Ø×Ò˜W ZÔ0Ñ1Ô1Ð1Ø�;Š;�vÑÔÐ*Ø�LŠL�˜W Vœ_Ñ-Ô-Ñ.Ô.Ð.øà
�+Š+‰-Œ-€CØ—’˜%‘”Ð €vð ØˆˆF‰Ø—X’X˜iÑ(Ô(Ð(€zð %Ø$ˆˆJ‰Ø�XŠX�e‰_Œ_€FØð ØˆˆF‰à€Jó    c                óD   — t          ¦   «                              | ¦  «        S )z/Apply SRV DNS lookup as defined in :RFC:`2782`.)ÚRfc2782ResolverÚresolve©r   s    r+   Úresolve_srvr2   M   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   R   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   W   sF   € € € € € € Ø€I€I�IØ€I€I�IØ€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/   z“Implement 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                óø   — |                       |¦  «        x}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.resolveg   sŠ   € à ×.Ò.¨vÑ6Ô6Ð6�ð 	ØˆMàˆØð 	ð 	ˆBØŒxð Ø—
’
˜4×,Ò,¨RÑ0Ô0Ñ1Ô1Ð1Ð1à—
’
˜2‘”��à×"Ò" 6¨3Ñ/Ô/Ð/r-   c              ƒ  ó  K  — |                       |¦  «        x}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_asyncu   s    è è € à ×.Ò.¨vÑ6Ô6Ð6�ð 	ØˆMàˆØð 	ð 	ˆBØŒxð Ø—
’
 ×!8Ò!8¸Ñ!<Ô!<Ð<Ð<Ð<Ð<Ð<Ð<Ñ=Ô=Ð=Ð=à—
’
˜2‘”��à×"Ò" 6¨3Ñ/Ô/Ð/r-   úlist[HostPort]c           	     óò  — |                      dt          j                              dd¦  «        ¦  «        rg S |                      dt          j                              dd¦  «        ¦  «        }|                     d¦  «        }t	          |                      dt          j                              dd¦  «        ¦  «        ¦  «        }t          |                     d¦  «        x}¦  «        d	k    r|t          |¦  «        z  }t          |¦  «        t          |¦  «        k    r5t          j        d
t          |¦  «        › dt          |¦  «        › d�¦  «        ‚g }d}t          ||¦  «        D ]Ž\  }}	| j	         
                    |¦  «        x}
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àŸ
š
 6­2¬:¯>ª>¸(ÀBÑ+GÔ+GÑHÔHˆØ—>’> #Ñ&Ô&ˆÝ˜FŸJšJ v­r¬z¯~ª~¸hÈÑ/KÔ/KÑLÔLÑMÔMˆÝ˜8Ÿ>š>¨#Ñ.Ô.Ð.ˆxÑ/Ô/°1Ò4Ð4à�˜H™œÑ%ˆHÝˆx‰=Œ=�C ™MœMÒ)Ð)õ Ô$ØW¥ H¡¤ÐWÐW½3¸x¹=¼=ÐWÐWÐWñô ð ð ˆØˆ	Ý˜h¨Ñ1Ô1ð 	ð 	‰JˆD�$Ø”^×)Ò)¨$Ñ/Ô/Ð/�ð 4°D·J²J±L´LÀEÒ4IÐ4IØ �	Ø./Ð9˜Ÿš Ñ*Ô*Ð*°T�Ý 4¨d¸$ÀvÐNÑNÔN��å 4¨dÐ3Ñ3Ô3�Ø�JŠJ�r‰NŒNˆNˆNàÐ'ˆsˆs RÐ'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   € ð	Ý×"Ò" 2¤7¨EÑ2Ô2ˆCˆCøÝð 	ð 	ð 	ØˆCˆCˆCð	øøøà×'Ò'¨¨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   è è € ð	Ý&×.Ò.¨r¬w¸Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ˆCˆCøÝð 	ð 	ð 	ØˆCˆCˆCð	øøøà×'Ò'¨¨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   € ð 
ð 
ð 
àõ �#˜eœlÑ+Ô+×2Ò2°3Ñ7Ô7½cÀ%Ä*¹o¼oÐ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ð ˜RœWŸ]š]™_œ_°Ò5Ð5Ý  b¤i°b´gÐ>Ñ>Ô>Ð?Ð?à�	õ ˆw‰<Œ<˜1ÒÐ¥ W¨Q¤ZÔ%6Ñ!7Ô!7¸3Ò!>Ð!>Øˆ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Ð5¨2˜rœwÐ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*   è è € Ð:Ð:°�s 2¤7™|œ|Ð:Ð:Ð:Ð:Ð:Ð:r-   r   )rZ   r[   r!   r"   )rH   r   rJ   r'   s       r+   rF   zRfc2782Resolver._return_paramsÉ   sy   € ð ð 	JåÔ$Ð%HÑIÔIÐIà�kŠk‰mŒmˆØ—h’hÐ5Ð5°Ð5Ñ5Ô5Ñ5Ô5ˆˆF‰Ø—h’hÐ:Ð:°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$   è è € Ð=Ð=¨c˜sœzÐ=Ð=Ð=Ð=Ð=Ð=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>½dÑ2CÔ2Cˆ
ØˆØð 	5ð 	5ˆEØ�u”~Ô&×-Ò-¨eÑ4Ô4Ð4Ð4å" :×#3Ò#3Ñ#5Ô#5Ñ6Ô6ð 	ð 	‰LˆC�Ý�7‰|Œ|˜qÒ Ð Ø—
’
˜7 1œ:Ñ&Ô&Ð&Øà�LŠLÐ3Ð3ˆLÑ4Ô4Ð4ÝÐ=Ð=°WÐ=Ñ=Ô=Ñ=Ô=ˆLØð 	Ý˜A˜|Ñ,Ô,�Ø�Ý'¨Ñ0Ô0ð ð ‘F�A�sØ˜CœJÑ&�DØ˜q’y�yØ˜ð !à—
’
˜3‘”�Ø ¤
Ñ*�Ø˜A�Jð ð 	øð ˆ
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ÔX€Ið0ð 0ð 0ð 0ð0ð 0ð 0ð 0ð"(ð "(ð "(ð "(ðH1ð 1ð 1ð 1ð1ð 1ð 1ð 1ð
ð 
ð 
ð 
ð(
ð 
ð 
ð 
ðð ð ð ð ð r-   r/   r•   )'r–   Ú
__future__r   rV   r—   r   Úrandomr   Útypingr   r   r   r   Úcollectionsr	   Úcollections.abcr
   Ú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"  ððð ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $ðØ,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø*Ð*Ð*Ð*Ð*Ð*Ø;Ð;Ð;Ð;Ð;Ð;Ð;øØð ð ð Ø
ˆ+ØLñô ð ðøøøð
 Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð àð 'Ø&Ð&Ð&Ð&Ð&Ð&àˆ8‰:Œ:€Ø�‘”€„à�‘”€Ø�u‘w”w€Ô ð"ð "ð "ð "ðJ-ð -ð -ð -ð
9ð 9ð 9ð 9ð
ð ð ð ð ˆzñ ô ð ðSð Sð Sð Sð Sñ Sô Sð Sð Sð Ss   ´A	 Á	A