Ë
    êëj“  ã                  ób  — 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 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%y# e$ r	  ed
«      ‚w xY w)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)ÚSRVc              ƒ  ó8  K  — t        j                  dt        «       g }g }g }t        j                  | «      ƒ d{  –—† D ]{  }|j                  d«      �|j                  |d   «       |j                  d«      �|j                  |d   «       |j                  d«      €Œ_|j                  t        |d   «      «       Œ} | j                  «       }dj                  |«      x}r||d<   dj                  |«      x}r||d<   dj                  |«      }|r||d<   |S 7 ŒÜ­w)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)	ÚparamsÚhostsÚ	hostaddrsÚportsÚattemptÚoutÚshostsÚ
shostaddrsÚsportss	            úS/var/www/html/kelly/kelly-backend/venv/lib/python3.12/site-packages/psycopg/_dns.pyÚresolve_hostaddr_asyncr*   '   s  è ø€ ô ‡M�MØJÜôð €EØ€IØ€Eä!×9Ñ9¸&ÓA×AÒAˆØ�;‰;�vÓÐ*Ø�L‰L˜ ™Ô)Ø�;‰;�zÓ"Ð.Ø×Ñ˜W ZÑ0Ô1Ø�;‰;�vÓÑ*Ø�L‰Lœ˜W V™_Ó-Õ.ð Bð �+‰+‹-€CØ—‘˜%“Ð €vÐ ØˆˆF‰Ø—X‘X˜iÓ(Ð(€zÐ(Ø$ˆˆJ‰Ø�X‰X�e‹_€FÙØˆˆF‰à€Jð# Bús   ‚9D»D¼A"DÂA:Dc                ó4   — t        «       j                  | «      S )z/Apply SRV DNS lookup as defined in :RFC:`2782`.)ÚRfc2782ResolverÚresolve©r    s    r)   Úresolve_srvr/   L   s   € äÓ×$Ñ$ VÓ,Ð,ó    c              ƒ  óP   K  — t        «       j                  | «      ƒ d{  –—† S 7 Œ­w)z$Async equivalent of `resolve_srv()`.N)r,   Úresolve_asyncr.   s    r)   Úresolve_srv_asyncr3   Q   s    è ø€ ä Ó"×0Ñ0°Ó8×8Ð8Ð8ús   ‚&Ÿ$ &c                  ó>   — e Zd ZU ded<   ded<   dZded<   dZded	<   y)
ÚHostPortr   r   r   FÚboolÚtotryNz
str | NoneÚtarget)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r7   r8   © r0   r)   r5   r5   V   s    … Ø
ƒIØ
ƒIØ€Eˆ4ÓØ€FˆJÔr0   r5   c                  óŒ   — 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y)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>.+)c                óÞ   — | j                  |«      x}s|S g }|D ]@  }|j                  r!|j                  | j                  |«      «       Œ0|j	                  |«       ŒB | j                  ||«      S )ú5Update the parameters host and port after SRV lookup.)Ú_get_attemptsr7   ÚextendÚ_resolve_srvr   Ú_return_params©Úselfr    ÚattemptsÚhpsÚhps        r)   r-   zRfc2782Resolver.resolvef   sj   € à ×.Ñ.¨vÓ6Ð6�Ð6ØˆMàˆÛˆBØ�xŠxØ—
‘
˜4×,Ñ,¨RÓ0Õ1à—
‘
˜2•ð	 ð ×"Ñ" 6¨3Ó/Ð/r0   c              ƒ  óú   K  — | j                  |«      x}s|S g }|D ]H  }|j                  r)|j                  | j                  |«      ƒ d{  –—† «       Œ8|j	                  |«       ŒJ | j                  ||«      S 7 Œ.­w)r@   N)rA   r7   rB   Ú_resolve_srv_asyncr   rD   rE   s        r)   r2   zRfc2782Resolver.resolve_asynct   sv   è ø€ à ×.Ñ.¨vÓ6Ð6�Ð6ØˆMàˆÛˆBØ�xŠxØ—
‘
 ×!8Ñ!8¸Ó!<×<Õ=à—
‘
˜2•ð	 ð ×"Ñ" 6¨3Ó/Ð/ð	 =ús   ‚AA;Á
A9
Á/A;c           	     ód  — |j                  dt        j                  j                  dd«      «      rg S |j                  dt        j                  j                  dd«      «      }|j                  d«      }t	        |j                  dt        j                  j                  dd«      «      «      }t        |j                  d«      x}«      d	k(  r|t        |«      z  }t        |«      t        |«      k7  r.t        j                  d
t        |«      › dt        |«      › d�«      ‚g }d}t        ||«      D ]z  \  }}	| j                  j                  |«      x}
s|	j                  «       dk(  r'd}|
r|
j                  d«      nd}t        ||	d|¬«      }nt        ||	¬«      }|j                  |«       Œ| |r|S 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ÚsrvTr8   N)r   r   r7   r8   ©r   r   )r   ÚosÚenvironÚsplitr   ÚlenÚeÚOperationalErrorÚzipÚ	re_srv_rrÚmatchÚlowerÚgroupr5   r   )rF   r    Úhost_argÚhosts_inÚport_argÚports_inr%   Ú	srv_foundr   r   Úmr8   rI   s                r)   rA   zRfc2782Resolver._get_attempts‚   st  € ð �:‰:�j¤"§*¡*§.¡.°¸rÓ"BÔCØˆIàŸ
™
 6¬2¯:©:¯>©>¸(ÀBÓ+GÓHˆØ—>‘> #Ó&ˆÜ˜FŸJ™J v¬r¯z©z¯~©~¸hÈÓ/KÓLÓMˆÜ˜HŸN™N¨3Ó/Ð/�Ó1°QÒ6àœ˜H›Ñ%ˆHÜˆx‹=œC ›MÒ)ô ×$Ñ$Ø¤ H£˜¨l¼3¸x»=¸/ÈÐWóð ð ˆØˆ	Ü˜h¨Ö1‰JˆD�$Ø—^‘^×)Ñ)¨$Ó/Ð/�Ð/°D·J±J³LÀEÒ4IØ �	Ù./˜Ÿ™ Ô*°T�Ü 4¨d¸$ÀvÔN‘ä 4¨dÔ3�Ø�J‰J�r�Nð 2ñ  ˆsÐ' RÐ'r0   c                óŠ   — 	 t         j                  |j                  d«      }| j	                  ||«      S # t        $ r d}Y Œw xY w©Nr   r=   )Úresolverr-   r   r   Ú_get_solved_entries©rF   rI   Úanss      r)   rC   zRfc2782Resolver._resolve_srv¦   sH   € ð	Ü×"Ñ" 2§7¡7¨EÓ2ˆCð ×'Ñ'¨¨CÓ0Ð0øô ò 	ØŠCð	ús   ‚ 4 ´AÁAc              ƒ  ó¦   K  — 	 t         j                  |j                  d«      ƒ d {  –—† }| j	                  ||«      S 7 Œ# t        $ r d}Y Œ!w xY w­wre   )Úasync_resolverr-   r   r   rg   rh   s      r)   rK   z"Rfc2782Resolver._resolve_srv_async­   sQ   è ø€ ð	Ü&×.Ñ.¨r¯w©w¸Ó>×>ˆCð ×'Ñ'¨¨CÓ0Ð0ð ?ùÜò 	ØŠCð	üs5   ‚A„#A  §>¨A  ¬A¾A  Á AÁAÁAÁAc           	     ó¾  — |sM|j                   r?|j                  j                  «       dk7  r"t        |j                   |j                  ¬«      gS g S t	        |«      dk(  rt        |d   j                   «      dk(  rg S | j                  |«      D �cg c]D  }t        t        |j                   «      j                  d«      t        |j                  «      ¬«      ‘ŒF c}S c c}w )NrQ   rR   r   r   Ú.)r8   r   r\   r5   rV   r   Úsort_rfc2782Úrstrip)rF   rI   ÚentriesÚentrys       r)   rg   z#Rfc2782Resolver._get_solved_entries´   sº   € ñ à�yŠy˜RŸW™WŸ]™]›_°Ò5Ü  b§i¡i°b·g±gÔ>Ð?Ð?à�	ô ˆw‹<˜1Ò¤ W¨Q¡Z×%6Ñ%6Ó!7¸3Ò!>ØˆIð ×*Ñ*¨7Ô3ó
á3�ô œ#˜eŸl™lÓ+×2Ñ2°3Ó7¼cÀ%Ç*Á*»oÖNØ3ñ
ð 	
ùò 
s   ÂA	Cc                óÀ   — |st        j                  d«      ‚|j                  «       }dj                  d„ |D «       «      |d<   dj                  d„ |D «       «      |d<   |S )Nz!no host found after SRV RR lookupr   c              3  ó4   K  — | ]  }|j                   –— Œ y ­w©N)r   ©Ú.0rI   s     r)   Ú	<genexpr>z1Rfc2782Resolver._return_params.<locals>.<genexpr>Ð   s   è ø€ Ð5±¨2˜rŸw�w±ùó   ‚r   c              3  óF   K  — | ]  }t        |j                  «      –— Œ y ­wrt   )r   r   ru   s     r)   rw   z1Rfc2782Resolver._return_params.<locals>.<genexpr>Ñ   s   è ø€ Ð:±c°œs 2§7¡7Ÿ|±cùs   ‚!r   )rW   rX   r   r   )rF   r    rH   r%   s       r)   rD   zRfc2782Resolver._return_paramsÈ   sY   € ñ ä×$Ñ$Ð%HÓIÐIà�k‰k‹mˆØ—h‘hÑ5±Ó5Ó5ˆˆF‰Ø—h‘hÑ:±cÓ:Ó:ˆˆF‰Øˆ
r0   c                ó  — t        t        «      }g }|D ]   }||j                     j                  |«       Œ" t	        |j                  «       «      D ]­  \  }}t        |«      dk(  r|j                  |d   «       Œ)|j                  d„ ¬«       t        d„ |D «       «      }|sŒQt        d|«      }d}	t        |«      D ]  \  }
}|	|j                  z  }	|	|k\  sŒ n |j                  «       ||j                  z  }|
= |rŒ]Œ¯ |S )zM
        Implement the priority/weight ordering defined in RFC 2782.
        r   r   c                ó   — | j                   S rt   ©Úweight)Úents    r)   Ú<lambda>z.Rfc2782Resolver.sort_rfc2782.<locals>.<lambda>ã   s   € ¨¯ªr0   )Úkeyc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrt   r|   )rv   r~   s     r)   rw   z/Rfc2782Resolver.sort_rfc2782.<locals>.<genexpr>ä   s   è ø€ Ð=±W¨c˜sŸz�z±Wùrx   )r
   ÚlistÚpriorityr   ÚsortedÚitemsrV   ÚsortÚsumr   Ú	enumerater}   )rF   ri   Ú
prioritiesr%   rq   Úprirp   Útotal_weightÚrÚcsumÚir~   s               r)   rn   zRfc2782Resolver.sort_rfc2782Ô   sý   € ô
 3>¼dÓ2Cˆ
ØˆÛˆEØ�u—~‘~Ñ&×-Ñ-¨eÕ4ð ô # :×#3Ñ#3Ó#5Ö6‰LˆC�Ü�7‹|˜qÒ Ø—
‘
˜7 1™:Ô&Øà�L‰LÑ3ˆLÔ4ÜÑ=±WÓ=Ó=ˆLÚÜ˜A˜|Ó,�Ø�Ü'¨Ö0‘F�A�sØ˜CŸJ™JÑ&�DØ˜q“yÙð 1ð —
‘
˜3”Ø §
¡
Ñ*�Ø˜A�Jó ð 7ð$ ˆ
r0   N©r    údict[str, Any]Úreturnr�   )r    r�   r‘   úlist[HostPort])rI   r5   r‘   r’   )rI   r5   rp   úSequence[SRV]r‘   r’   )r    r�   rH   r’   r‘   r�   )ri   r“   r‘   z	list[SRV])r9   r:   r;   Ú__doc__ÚreÚcompilerZ   r-   r2   rA   rC   rK   rg   rD   rn   r=   r0   r)   r,   r,   ]   ss   „ ñð �—
‘
ÐWÓX€Ió0ó0ó"(óH1ó1ð
Øð
Ø%2ð
à	ó
ð(
Ø$ð
Ø+9ð
à	ó
ôr0   r,   r�   )&r”   Ú
__future__r   rS   r•   r   Úrandomr   Útypingr   r   r   r   r	   Úcollectionsr
   Údns.resolverr   r   Údns.exceptionr   Údns.asyncresolverÚAsyncResolverÚImportErrorrN   r   r   rW   Údns.rdtypes.IN.SRVr   rf   Úcacherk   r*   r/   r3   r5   r,   r=   r0   r)   Ú<module>r¢      s«   ðñõ #ã 	Û 	Û Ý ß HÕ HÝ #ðß,Ý*Ý;õ Ý áÝ&á‹:€Ù“€„á“€Ù“w€Ô ó"óJ-ó
9ô
ˆzô ÷Sò SøðQ ò Ù
ØLóð ðús   °B  Â B.