o
    ٷiB	                     @  s~   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Zddl	m
Z
 ddlmZmZ dZedZdddZdddZdS )z^
Defines helper methods useful for setting up ports, launching servers, and
creating tunnels.
    )annotationsN)Path)App)CERTIFICATE_PATHTunnelz(https://api.gradio.app/v3/tunnel-requestGRADIO_SHARE_SERVER_ADDRESS
local_hoststr
local_portintshare_tokenshare_server_address
str | Noneshare_server_tls_certificatereturnc              
   C  s   |d u rt n|}|d u rbzDtjtdd}| d }|d t|d }}|d }	ttjj	ddd t
td	}
|
|	 W d    n1 sHw   Y  t}W n tya } ztd
|d }~ww |d\}}t|}t||| |||}| }|S )N   )timeoutr   hostportroot_caT)parentsexist_okwz0Could not get share link from Gradio API Server.:)r   httpxgetGRADIO_API_SERVERjsonr   r   r   parentmkdiropenwrite	ExceptionRuntimeErrorsplitr   start_tunnel)r   r
   r   r   r   responsepayloadremote_hostremote_portcertificatefetunneladdress r/   E/home/ubuntu/.local/lib/python3.10/site-packages/gradio/networking.pysetup_tunnel   sF   	r1   urlboolc              
   C  s   z9t dD ]1}t  td tj| ddd}W d    n1 s#w   Y  |jdv r1 W dS td qW dS  t	tj
tjfyH   Y dS w )	N   ignore   F)r   verify)   i  i.  i/  i3  Tg      ?)rangewarningscatch_warningsfilterwarningsr   headstatus_codetimesleepConnectionErrorConnectErrorTimeoutException)r2   _rr/   r/   r0   url_ok?   s   


rF   )r   r	   r
   r   r   r	   r   r   r   r   r   r	   )r2   r	   r   r3   )__doc__
__future__r   osr?   r:   pathlibr   r   gradio.routesr   gradio.tunnelingr   r   r   getenvr   r1   rF   r/   r/   r/   r0   <module>   s    

)