
    ;3h              	       ^   d dl Z d dlZd dlmZ d dlZd dlmZmZ d dlm	Z	m
Z
mZmZmZmZmZ d dlZd Z e       ZdedefdZdd	efd
Z e       dedee   fd       ZdedefdZ G d dej6                        Z	 	 ddedee   dz  dej:                  ed   z  dz  dej<                  fdZy)    N)Path)	lru_cachewraps)Any	AwaitableCallable	CoroutineLiteralTTuplec                      t        t              j                  dz  } t        | d      5 }|j	                         j                         cd d d        S # 1 sw Y   y xY w)Nzversion.txtr)r   __file__parentopenreadstrip)version_filefs     R/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/safehttpx/__init__.pyget_versionr   
   sG    >((=8L	lC	   Avvx~~     s   AAipreturnc                     	 t        j                  |       }|j                  xs6 |j                  xs( |j                  xs |j
                  xs |j                   S # t        $ r Y yw xY w)NF)	ipaddress
ip_address
is_privateis_loopbackis_link_localis_multicastis_reserved
ValueError)r   ip_objs     r   is_public_ipr$      sz    
%%b) "!!"##" """ !!
 	
  s   AA 	A('A(maxsizec                      dt         dt        t        t        t        f   f   dt         dt        t           f   f fd}|S )N
async_func.r   c           	           t              t               dt        dt        dt        t           f fd              }|S )N)r%   argskwargsr   c                  :    t        j                   | i |      S N)asynciocreate_task)r)   r*   r'   s     r   wrapperz3lru_cache_async.<locals>.decorator.<locals>.wrapper#   s      &&z4'B6'BCC    )r   r   r   r   r   )r'   r/   r%   s   ` r   	decoratorz"lru_cache_async.<locals>.decorator    sN     
7	#	z		D3 	D# 	D)A, 	D 
 
$	D r0   )r   r	   r   r   r   )r%   r1   s   ` r   lru_cache_asyncr2      sC    S)CaK"889	#y|#	$ r0   hostnamec           	        K   t        j                         4 d {   }	 |j                  d|  d       d {   }|j                  d|  d       d {   }g }|j                         |j                         fD ]4  }|j	                  |j                  dg       D cg c]  }|d   	 c}       6 |cd d d       d {    S 7 7 7 tc c}w 7 # t
        $ r g cY cd d d       d {  7   S w xY w# 1 d {  7  sw Y   y xY ww)Nz https://dns.google/resolve?name=z&type=Az
&type=AAAAAnswerdata)httpxAsyncClientgetjsonextend	Exception)r3   clientresponse_v4response_v6ipsresponseanswers          r   async_resolve_hostname_googlerC   -   s      "  f	 &

28*GD! K !'

28*JG! K C(--/1A1A1CD V

hPR9STvF6NTUV   U  	I  	  s   DCDC7CC	CCACC+
C5DCD	CCCDC4C7 D,C/-D3C44C77D	=D >D	Dc                   K   	 t        j                         }|j                  | d        d {   }|D ]?  \  }}}}}|d   }|t        j                  t        j                  fv s1t        |      s=|c S  t        |        d {   D ]  }t        |      s|c S  t        d|  d      7 ~# t        j                  $ r}t        d|  d|       |d }~ww xY w7 Vw)NzUnable to resolve hostname z: r   z	Hostname z failed validation)
r-   get_event_loopgetaddrinfosocketgaierrorr"   AF_INETAF_INET6r$   rC   )r3   loopaddrinfoefamily_sockaddrr   s           r   async_validate_urlrQ   @   s     O%%'))(D99 &. !1aa[
fnnfoo66<
;S
 :(CC 

# y
*<=
>> :?? O6xj1#FGQNO DsU   C)B. B,B. 2C%C1CCCC,B. .CCCCc                   n     e Zd Zdef fdZdej                  deee	e	ej                  f   f fdZ xZS )AsyncSecureTransportverified_ipc                 0    || _         t        | 	          y r,   )rT   super__init__)selfrT   	__class__s     r   rW   zAsyncSecureTransport.__init__T   s    &r0   requestr   c                    K   |j                   }|j                  }|j                  | j                        }||_         ||j                  d<   d|i|_        t        |   |       d {   S 7 w)N)hostHostsni_hostname)urlr\   	copy_withrT   headers
extensionsrV   handle_async_request)rX   rZ   original_urloriginal_hostnew_urlrY   s        r   rc   z)AsyncSecureTransport.handle_async_requestX   sn      {{$))((d.>.>(?"/,m<W1'::::s   A&A0)A.*A0)__name__
__module____qualname__strrW   r7   Requestr   intbytesHeadersrc   __classcell__)rY   s   @r   rS   rS   S   sA    C 
;
; 
sE5%--/	0
; 
;r0   rS   r_   domain_whitelist
_transportFc                   K   t        j                  |       }|j                  }|st        d|  d      |g }|r|}n)|du s||v rd}nt	        |       d{   }t        |      }t        j                  |      4 d{   } |j                  | fddi| d{   cddd      d{    S 7 \7 47 7 # 1 d{  7  sw Y   yxY ww)at  
    This is the main function that should be used to make async HTTP GET requests.
    It will automatically use a secure transport for non-whitelisted domains.

    Parameters:
    - url (str): The URL to make a GET request to.
    - domain_whitelist (list[str] | None): A list of domains to whitelist, which will not use a secure transport.
    - _transport (httpx.AsyncBaseTransport | Literal[False] | None): A custom transport to use for the request. Takes precedence over domain_whitelist. Set to False to use no transport.
    - **kwargs: Additional keyword arguments to pass to the httpx.AsyncClient.get() function.
    zURL z does not have a valid hostnameNF)	transportfollow_redirects)r7   URLr\   r"   rQ   rS   r8   r9   )	r_   rp   rq   r*   
parsed_urlr3   rs   rT   r=   s	            r   r9   r9   d   s       3JH4u$CDEE		u	,< <	.x88(5	  95 G GVZZFeFvFFG G G 9GFG G G Gsl   ACB4)CB6CB<B8B<"C.B:/C6C8B<:C<CCC
C)   )NN) r-   r   pathlibr   rG   	functoolsr   r   typingr   r   r   r	   r
   r   r   r7   r   __version__rj   boolr$   rl   r2   listrC   rQ   AsyncHTTPTransportrS   AsyncBaseTransportResponser9    r0   r   <module>r      s        & I I I  
 mS T S  # $s)  $?s ?s ?&;533 ;& *.CG G	 G3i$& G ((75>9D@ G
 ^^ Gr0   