o
    RÊÆhÎ  ã                   @   s¾   U d dl Z d dlZd dlmZmZmZmZmZmZ ddl	m
Z
 ddlmZ dZzd dlZW n ey8   dZY nw dZG dd	„ d	e
ƒZG d
d„ de
ƒZeeeef  ZerWeneZeed< dS )é    N)ÚAnyÚDictÚListÚOptionalÚTypeÚUnioné   )ÚAbstractResolver)Úget_running_loop)ÚThreadedResolverÚAsyncResolverÚDefaultResolverFc                   @   sb   e Zd ZdZddeej ddfdd„Zdej	fde
d	ed
edeee
ef  fdd„Zddd„ZdS )r   z�Threaded resolver.

    Uses an Executor for synchronous getaddrinfo() calls.
    concurrent.futures.ThreadPoolExecutor is used by default.
    NÚloopÚreturnc                 C   s   t |ƒ| _d S ©N)r
   Ú_loop)Úselfr   © r   ú]/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/aiohttp/resolver.pyÚ__init__   s   zThreadedResolver.__init__r   ÚhostnameÚportÚfamilyc              
   Ã   sÈ   �| j j||tj|tjd�I d H }g }|D ]L\}}}}}|tjkrFt|ƒdk r(q|d r=t |tjtj	B ¡\}	}
t
|
ƒ}n|d d… \}	}n|tjksMJ ‚|\}	}| ||	|||tjtjB dœ¡ q|S )N)Útyper   Úflagsé   é   ©r   Úhostr   r   Úprotor   )r   ÚgetaddrinfoÚsocketÚSOCK_STREAMÚAI_ADDRCONFIGÚAF_INET6ÚlenÚgetnameinfoÚNI_NUMERICHOSTÚNI_NUMERICSERVÚintÚAF_INETÚappendÚAI_NUMERICHOSTÚAI_NUMERICSERV)r   r   r   r   ÚinfosÚhostsÚ_r   Úaddressr   Ú_portr   r   r   Úresolve   s>   €û
ÿ

úÿzThreadedResolver.resolvec                 Ã   s   �d S r   r   ©r   r   r   r   ÚcloseJ   s   €zThreadedResolver.closer   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚasyncioÚAbstractEventLoopr   r!   r*   Ústrr)   r   r   r   r3   r5   r   r   r   r   r      s    ÿÿÿÿ
þ,r   c                   @   sš   e Zd ZdZ	ddeej dededdfdd„Zd	e	j
fd
edededeeeef  fdd„Zd	e	j
fd
edededeeeef  fdd„Zddd„ZdS )r   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   ÚargsÚkwargsr   c                 O   sL   t d u rtdƒ‚t|ƒ| _t j|d|i|¤Ž| _t| jdƒs$| j| _d S d S )Nz Resolver requires aiodns libraryr   Úgethostbyname)	ÚaiodnsÚRuntimeErrorr
   r   ÚDNSResolverÚ	_resolverÚhasattrÚ_resolve_with_queryr3   )r   r   r>   r?   r   r   r   r   Q   s   
þzAsyncResolver.__init__r   r   r   r   c           	   
   Ã   sž   �z| j  ||¡I d H }W n! tjjy. } zt|jƒdkr#|jd nd}t|ƒ|‚d }~ww g }|jD ]}| 	||||dt
jt
jB dœ¡ q4|sMtdƒ‚|S )Nr   úDNS lookup failedr   r   )rD   r@   rA   ÚerrorÚDNSErrorr%   r>   ÚOSErrorÚ	addressesr+   r!   r,   r-   )	r   r   r   r   ÚrespÚexcÚmsgr/   r1   r   r   r   r3   a   s,   €
€þ

úÿzAsyncResolver.resolvec           
   
   Ã   s¬   �|t jkr	d}nd}z| j ||¡I d H }W n! tjjy8 } zt|jƒdkr-|jd nd}t	|ƒ|‚d }~ww g }|D ]}	| 
||	j||dt jdœ¡ q=|sTt	dƒ‚|S )NÚAAAAÚAr   rG   r   r   )r!   r$   rD   ÚqueryrA   rH   rI   r%   r>   rJ   r+   r   r,   )
r   r   r   r   ÚqtyperL   rM   rN   r/   Úrrr   r   r   rF   {   s2   €

€þúÿz!AsyncResolver._resolve_with_queryc                 Ã   s   �| j  ¡  d S r   )rD   Úcancelr4   r   r   r   r5   ›   s   €zAsyncResolver.closer   r6   )r7   r8   r9   r:   r   r;   r<   r   r   r!   r*   r=   r)   r   r   r3   rF   r5   r   r   r   r   r   N   sB    þþýü
ûÿÿÿÿ
þÿÿÿÿ
þ r   r   )r;   r!   Útypingr   r   r   r   r   r   Úabcr	   Úhelpersr
   Ú__all__rA   ÚImportErrorÚaiodns_defaultr   r   Ú_DefaultTyper   Ú__annotations__r   r   r   r   Ú<module>   s    
  ÿ:Q