Ë
    Eü´j{*  ã                   óÜ  — U d dl Z d dlZd dlZd dlZd dlmZmZmZ ddlm	Z	m
Z
 dZ	 d dlZ eej                  d«      Zej"                  ej$                  z  Zej(                  ej*                  z  Zej.                  Z eed«      reej2                  z  Zej4                  d	k(  Zd
edefd„Z G d„ de	«      Z G d„ de	«      Z  G d„ d«      Z!e"e ez     Z#ere neZ$e#e%d<   y# e$ r dZdZY Œ¬w xY w)é    N)ÚAnyÚFinalÚOptionalé   )ÚAbstractResolverÚResolveResult)ÚThreadedResolverÚAsyncResolverÚDefaultResolverÚgetaddrinfoFÚAI_MASKÚwin32ÚhostÚreturnc                 óV   — t         xr" | j                  d«      j                  «       dk(  S )Nú.Ú	localhost)Ú_IS_WINDOWSÚrstripÚcasefold)r   s    úN/root/workspace/ytshorts/venv/lib/python3.12/site-packages/aiohttp/resolver.pyÚ_is_windows_localhostr      s$   € ÜÒE˜4Ÿ;™; sÓ+×4Ñ4Ó6¸+ÑEÐEó    c            
       ó�   — e Zd ZdZddej
                  dz  ddfd„Zdej                  fde	de
d	ej                  dee   fd
„Zdd„Zy)r	   z�Threaded resolver.

    Uses an Executor for synchronous getaddrinfo() calls.
    concurrent.futures.ThreadPoolExecutor is used by default.
    NÚloopr   c                 ó>   — |xs t        j                  «       | _        y ©N)ÚasyncioÚget_running_loopÚ_loop)Úselfr   s     r   Ú__init__zThreadedResolver.__init__(   s   € ØÒ7œW×5Ñ5Ó7ˆ�
r   r   r   ÚportÚfamilyc              ƒ   ó®  K  — 	 | j                   j                  ||t        j                  |t        ¬«      ƒ d {  –—† }g }|D ]­  \  }}}}}|t        j                  k(  rTt        |«      dk  rŒ+|d   r7| j                   j                  |t        «      ƒ d {  –—† \  }	}
t        |
«      }n#|d d \  }	}n|t        j                  k(  sJ ‚|\  }	}|j                  t        ||	|||t        ¬«      «       Œ¯ |S 7 Œº# t        j
                  $ rG t        |«      s‚ | j                   j                  ||t        j                  |d¬«      ƒ d {  –—†7  }Y �Œw xY w7 Œ½­w)N)Útyper$   Úflagsr   é   é   ©Úhostnamer   r#   r$   Úprotor'   )r    r   ÚsocketÚSOCK_STREAMÚ_AI_ADDRCONFIGÚgaierrorr   ÚAF_INET6ÚlenÚgetnameinfoÚ_NAME_SOCKET_FLAGSÚintÚAF_INETÚappendr   Ú_NUMERIC_SOCKET_FLAGS)r!   r   r#   r$   ÚinfosÚhostsÚ_r,   ÚaddressÚresolved_hostÚ_ports              r   ÚresolvezThreadedResolver.resolve+   sp  è ø€ ð	ØŸ*™*×0Ñ0ØØÜ×'Ñ'ØÜ$ð 1ó ÷ ˆEð$ &(ˆØ,1ò 	Ñ(ˆF�A�u˜a ØœŸ™Ò(Ü�w“< !Ò#ð Ø˜1’:ð 26·±×1GÑ1GØÔ!3ó2÷ ,Ñ(�M 5ô ˜u›:‘Dà*1°"°1¨+Ñ'�M¡4à¤§¡Ò/Ð/Ð/Ø&-Ñ#�˜tØ�L‰LÜØ!Ø&ØØ!ØÜ/ôõ	ð'	ð< ˆðcùô �‰ò 		Ü(¨Ô.ØØŸ*™*×0Ñ0ØØÜ×'Ñ'ØØð 1ó ÷ ð ‹Eð		úð,,úsR   ‚E„5C6 ¹C4ºC6 ¾AEÂEÂAEÃ4C6 Ã6AEÅE	ÅEÅEÅEÅEc              ƒ   ó   K  — y ­wr   © ©r!   s    r   ÚclosezThreadedResolver.closeb   s	   è ø€ Øùs   ‚r   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚAbstractEventLoopr"   r-   r6   Ústrr5   ÚAddressFamilyÚlistr   r?   rC   rA   r   r   r	   r	   !   sf   „ ññ8˜W×6Ñ6¸Ñ=ð 8Èó 8ð &'ÀvÇ~Á~ñ5Øð5Ø"ð5Ø06×0DÑ0Dð5à	ˆmÑ	ó5ônr   r	   c                   óÜ   — e Zd ZdZ	 ddej
                  dz  dededdfd„Zdej                  fd	e
d
edej                  dee   fd„Zdej                  fd	e
d
ededeee
ef      fd„Zdd„Zy)r
   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   ÚargsÚkwargsr   c                 óp  — t         €t        d«      ‚|xs t        j                  «       | _        d | _        |s|rt        j                  |i |¤Ž| _        y t        «       | _        | j
                  j                  | | j                  «      | _        t        | j                  d«      s| j                  | _        y y )Nz Resolver requires aiodns libraryÚgethostbyname)ÚaiodnsÚRuntimeErrorr   r   r    Ú_managerÚDNSResolverÚ	_resolverÚ_DNSResolverManagerÚget_resolverÚhasattrÚ_resolve_with_queryr?   )r!   r   rN   rO   s       r   r"   zAsyncResolver.__init__i   s˜   € ô ˆ>ÜÐAÓBÐBàÒ7œW×5Ñ5Ó7ˆŒ
Ø48ˆŒñ ‘6Ü#×/Ñ/°Ð@¸Ñ@ˆDŒNØä+Ó-ˆŒØŸ™×3Ñ3°D¸$¿*¹*ÓEˆŒä�t—~‘~ Ô7à×3Ñ3ˆD�Lð 8r   r   r   r#   r$   c              ƒ   óp  K  — 	 	 | j                   j                  ||t        j                  |t        ¬«      ƒ d {  –—† }g }|j                  D �]  }|j                  }	|j                  t        j                  k(  r{t        |	«      dkD  rS|	d   rN| j                   j!                  |	d   j#                  d«      g|	dd  ¢­t$        «      ƒ d {  –—† }
|
j&                  }nR|	d   j#                  d«      }|	d   }n8|j                  t        j(                  k(  sJ ‚|	d   j#                  d«      }|	d   }|j+                  t-        ||||j                  dt.        ¬«      «       �Œ |st        d d«      ‚|S 7 �Œ4# t
        j                  j                  $ rG t        |«      s‚ | j                   j                  ||t        j                  |d¬«      ƒ d {  –—†7  }Y �Œ•w xY w# t
        j                  j                  $ r;}t        |j                  «      dk\  r|j                  d   nd}t        d |«      |‚d }~ww xY w7 �Œj­w)N)r#   r&   r$   r'   r   r   úDNS lookup failedr(   Úasciir*   )rV   r   r-   r.   r/   rR   ÚerrorÚDNSErrorr   r2   rN   ÚOSErrorÚnodesÚaddrr$   r1   r3   Údecoder4   Únoder6   r7   r   r8   )r!   r   r#   r$   ÚrespÚexcÚmsgr:   rd   r<   Úresultr=   s               r   r?   zAsyncResolver.resolve‚   s  è ø€ ð	.ðØ!Ÿ^™^×7Ñ7ØØÜ×+Ñ+Ø!Ü(ð 8ó ÷ �ð( &(ˆØ—J‘Jó 	ˆDØGKÇyÁyˆGØ�{‰{œfŸo™oÒ-Ü�w“< !Ò#¨°ª
ð $(§>¡>×#=Ñ#=Ø  ™×*Ñ*¨7Ó3ÐB°g¸a¸b°kÑBÜ*ó$÷ �Fð %+§K¡K‘Mà$+¨A¡J×$5Ñ$5°gÓ$>�MØ" 1™:‘Dà—{‘{¤f§n¡nÒ4Ð4Ð4Ø '¨¡
× 1Ñ 1°'Ó :�Ø˜q‘z�Ø�L‰LÜØ!Ø&ØØŸ;™;ØÜ/ôö	ð'	ñ< Ü˜$Ð 3Ó4Ð4àˆðmúô —<‘<×(Ñ(ò 	Ü,¨TÔ2ØØ!Ÿ^™^×7Ñ7ØØÜ×+Ñ+Ø!Øð 8ó ÷ ð “ð	ûô �|‰|×$Ñ$ò 	.Ü!$ S§X¡X£°!Ò!3�#—(‘(˜1’+Ð9LˆCÜ˜$ Ó$¨#Ð-ûð	.úðûsj   ‚H6…5E1 ºE.»E1 ¿B
H6Ã	H3Ã
B$H6Å.E1 Å1AGÇGÇGÇG ÇGÇG ÇH0Ç56H+È+H0È0H6c           
   ƒ   óÎ  K  — |t         j                  k(  rdnd}	 | j                  j                  ||«      ƒ d {  –—† }g }|D ]2  }	|j                  ||	j                  ||dt         j                  dœ«       Œ4 |st        d d«      ‚|S 7 ŒM# t        j
                  j                  $ r;}t        |j                  «      dk\  r|j                  d   nd}t        d |«      |‚d }~ww xY w­w)NÚAAAAÚAr   r\   r   r*   )r-   r1   rV   ÚqueryrR   r^   r_   r2   rN   r`   r7   r   ÚAI_NUMERICHOST)
r!   r   r#   r$   Úqtypere   rf   rg   r:   Úrrs
             r   rZ   z!AsyncResolver._resolve_with_query¿   sß   è ø€ ð "(¬6¯?©?Ò!:‘vÀˆð	.ØŸ™×-Ñ-¨d°EÓ:×:ˆDð
 ˆØò 
	ˆBØ�L‰Là $ØŸG™GØ Ø$ØÜ#×2Ñ2ñõ	ð
	ñ Ü˜$Ð 3Ó4Ð4àˆð+ ;ùÜ�|‰|×$Ñ$ò 	.Ü!$ S§X¡X£°!Ò!3�#—(‘(˜1’+Ð9LˆCÜ˜$ Ó$¨#Ð-ûð	.üs8   ‚C%›B
 ºB»B
 ¿A	C%ÂB
 Â
C"Â'6CÃC"Ã"C%c              ƒ   óè   K  — | j                   r5| j                   j                  | | j                  «       d | _         d | _        y | j                  �| j                  j	                  «        d | _        y ­wr   )rT   Úrelease_resolverr    rV   ÚcancelrB   s    r   rC   zAsyncResolver.closeÜ   sW   è ø€ Ø�=Š=à�M‰M×*Ñ*¨4°·±Ô<Ø ˆDŒMØ!ˆDŒNØà�>‰>Ð%Ø�N‰N×!Ñ!Ô#Øˆ�ùs   ‚A0A2r   rD   )rE   rF   rG   rH   r   rI   r   r"   r-   r6   rJ   r5   rK   rL   r   r?   ÚdictrZ   rC   rA   r   r   r
   r
   f   s¾   „ ÙCð 26ñ4à×'Ñ'¨$Ñ.ð4ð ð4ð ð	4ð
 
ó4ð4 &'ÀvÇ~Á~ñ;Øð;Ø"ð;Ø06×0DÑ0Dð;à	ˆmÑ	ó;ð| &'°f·n±nñØðØ"ðØ03ðà	ˆd�3˜�8‰nÑ	óô:
r   r
   c                   ó’   ‡ — e Zd ZU dZdZed    ed<   dˆ fd„Zdd„Zddd	e	j                  dd
fd„Zddd	e	j                  ddfd„Zˆ xZS )rW   z£Manager for aiodns.DNSResolver objects.

    This class manages shared aiodns.DNSResolver instances
    with no custom arguments across different event loops.
    NÚ	_instancer   c                 ó�   •— | j                   €.t        ‰| �	  | «      | _         | j                   j                  «        | j                   S r   )ru   ÚsuperÚ__new__Ú_init)ÚclsÚ	__class__s    €r   rx   z_DNSResolverManager.__new__ò   s7   ø€ Ø�=‰=Ð Ü!™G™O¨CÓ0ˆCŒMØ�M‰M×ÑÔ!Ø�}‰}Ðr   c                 ó6   — t        j                  «       | _        y r   )ÚweakrefÚWeakKeyDictionaryÚ
_loop_datarB   s    r   ry   z_DNSResolverManager._initø   s   € ô
 ×%Ñ%Ó'ð 	�r   Úclientr
   r   zaiodns.DNSResolverc                 óà   — || j                   vr<t        j                  |¬«      }t        j                  «       }||f| j                   |<   n| j                   |   \  }}|j                  |«       |S )a&  Get or create the shared aiodns.DNSResolver instance for a specific event loop.

        Args:
            client: The AsyncResolver instance requesting the resolver.
                   This is required to track resolver usage.
            loop: The event loop to use for the resolver.
        )r   )r   rR   rU   r}   ÚWeakSetÚadd)r!   r€   r   ÚresolverÚ
client_sets        r   rX   z _DNSResolverManager.get_resolverÿ   sg   € ð �t—‘Ñ&Ü×)Ñ)¨tÔ4ˆHÜ9@¿¹Ó9JˆJØ%-¨zÐ$:ˆD�O‰O˜DÒ!ð $(§?¡?°4Ñ#8Ñ ˆH�jð 	�‰�vÔØˆr   c                 ó°   — | j                   j                  |«      }|€y|\  }}|j                  |«       |s |�|j                  «        | j                   |= yy)zÎRelease the resolver for an AsyncResolver client when it's closed.

        Args:
            client: The AsyncResolver instance to release.
            loop: The event loop the resolver was using.
        N)r   ÚgetÚdiscardrr   )r!   r€   r   Úcurrent_loop_datar„   r…   s         r   rq   z$_DNSResolverManager.release_resolver  s^   € ð !ŸO™O×/Ñ/°Ó5ÐØÐ$ØØ0Ñˆ�*Ø×Ñ˜6Ô"áØÐ#Ø—‘Ô!Ø—‘ Ñ%ð r   )r   rW   rD   )rE   rF   rG   rH   ru   r   Ú__annotations__rx   ry   r   rI   rX   rq   Ú__classcell__)r{   s   @r   rW   rW   é   sj   ø… ñð 26€IˆxÐ-Ñ.Ó5õó(ðØ%ðØ-4×-FÑ-Fðà	óð.&Ø%ð&Ø-4×-FÑ-Fð&à	÷&r   rW   r   )&r   r-   Úsysr}   Útypingr   r   r   Úabcr   r   Ú__all__rR   rY   rU   Úaiodns_defaultÚImportErrorrm   ÚAI_NUMERICSERVr8   ÚNI_NUMERICHOSTÚNI_NUMERICSERVr4   ÚAI_ADDRCONFIGr/   r   Úplatformr   rJ   Úboolr   r	   r
   rW   r&   Ú_DefaultTyper   rŠ   rA   r   r   ú<module>r™      s  ðÜ Û Û 
Û ß 'Ñ 'ç 0à
B€ðÛá˜V×/Ñ/°Ó?€Nð ×-Ñ-°×0EÑ0EÑEÐ Ø×*Ñ*¨V×-BÑ-BÑBÐ Ø×%Ñ%€Ù
ˆ6�9ÔØ�f—n‘nÑ$€NØ�l‰l˜gÑ%€ðF ð F¨ó FôBÐ'ô BôJ@Ð$ô @÷F@&ñ @&ðF �MÐ$4Ñ4Ñ5€Ù1?¡ÐEU€�Ô Uøð{ ò Ø€FØ‚Nðús   §C Ã	C+Ã*C+