a
    d                     @  sv  d Z ddlmZ ddlZddlZddlZddlZddlZddlZ	ddl
Z
ddlmZ ddlmZ ddlZddlZddlmZ ddlmZ ddlmZ zdd	lmZ W n ey   d
d ZY n0 dZdZddddZddddddZddddddZddddddZdd Z ddddZ!ddd d!Z"ddd"d#d$Z#d%ddd&d'd(Z$ddd"d)d*Z%ddd+d,d-Z&dS ).z/ Functions related to analytics and telemetry.     )annotationsN)StrictVersion)Any)
wasm_utils)Context)GRADIO_VERSION)pyfetchc                    s   t dd S )Nz:pyodide.http.pyfetch is not available in this environment.)NotImplementedError)argskwargs r   Y/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/gradio/analytics.pypyodide_pyfetch   s    r   zhttps://api.gradio.app/z"https://api.gradio.app/pkg-versionbool)returnc                   C  s   t dddkS )zB
    Returns: True if analytics are enabled, False otherwise.
    ZGRADIO_ANALYTICS_ENABLEDTrue)osgetenvr   r   r   r   analytics_enabled$   s    r   strzdict[str, Any]None)urldatar   c                 C  s6   t jrtt| |d ntjt| |dd  d S )Nr   r   )targetr   )	r   IS_WASMasyncioZensure_future_do_wasm_analytics_request	threadingThread_do_normal_analytics_requeststartr   r   r   r   _do_analytics_request+   s    r"   c              	   C  s@   t  |d< ztj| |dd W n tjtjjfy:   Y n0 d S )N
ip_address   )r   timeout)get_local_ip_addressrequestspostConnectionError
exceptionsReadTimeoutr   r   r   r   r    =   s
    
r    c                   sh   t  I d H |d< tj|d}ddi}z$tjt| d||dddI d H  W n tjyb   Y n0 d S )	Nr#   asciizContent-Typez!application/x-www-form-urlencodedPOST)methodheadersbodyr$   r%   )	get_local_ip_address_wasmurllibparse	urlencodeencoder   wait_forr   TimeoutError)r   r   r0   r/   r   r   r   r   E   s    r   c                  C  s   zjt td} | st| d }tjtdd	 d }t
|t
|krhtd| d| d td	 W nJ t	jjy   td
 Y n, ty   td Y n ty   Y n0 d S )Nzversion.txtr,      )r   r%   versionz(IMPORTANT: You are using gradio version z, however version z is available, please upgrade.z--------z1unable to parse version details from package URL.z*package URL does not contain version info.)pkgutilget_data__name__FileNotFoundErrordecodestripr'   getPKG_VERSION_URLjsonr   printdecoderJSONDecodeErrorwarningswarnKeyError	Exception)Zversion_dataZcurrent_pkg_versionZlatest_pkg_versionr   r   r   version_checkX   s*    rK   c               	   C  s`   t  s
dS tjdu rVztjdddj } W n  tjtjj	fyL   d} Y n0 | t_ntj} | S )a  
    Gets the public IP address or returns the string "No internet connection" if unable
    to obtain it or the string "Analytics disabled" if a user has disabled analytics.
    Does not make a new request if the IP address has already been obtained in the
    same Python session.
    Analytics disabledNzhttps://checkip.amazonaws.com/r9   r1   No internet connection)
r   r   r#   r'   rA   textr@   r)   r*   r+   )r#   r   r   r   r&   o   s    

r&   c               	     sv   t  s
dS tjdu rlz2tjtdddI dH } |  I dH }| }W n tjt	fyb   d}Y n0 |t_ntj}|S )z6The Wasm-compatible version of get_local_ip_address().rL   Nzhttps://api.ipify.orgr$   r1   rM   )
r   r   r#   r   r7   r   stringr@   r8   OSError)responseZresponse_textr#   r   r   r   r2      s"    

r2   )r   r   c                 C  s    t  s
d S tt d| d d S )Nzgradio-initiated-analytics/r   r   r"   ANALYTICS_URLr   r   r   r   initiated_analytics   s    rU   zgradio.Blocks)blocksr   r   c           	        sB  t  s
d S g g g g f\}}}}ddlm} t j D ]*}t||rT|| n|t	| q8 j
D ]R}| fdd|d D  }| fdd|d D  }| fdd|d	 D  }qjt j j jd u j j j j jd
kr jn| jd
kr jn|||dd  j
D tjd}|| tt d|d d S )Nr   )BlockContextc                   s$   g | ]}| j v rt j | qS r   rV   r   .0yrV   r   r   
<listcomp>   s   
z&launched_analytics.<locals>.<listcomp>targetsc                   s$   g | ]}| j v rt j | qS r   rX   rY   r\   r   r   r]      s   inputsc                   s$   g | ]}| j v rt j | qS r   rX   rY   r\   r   r   r]      s   outputsZ	interfacec                 S  s   g | ]}t |d  qS )trigger)r   )rZ   xr   r   r   r]          )r:   	is_kaggleis_sagemakerZ
using_authdev_modeshow_api
show_errortitler_   r`   r^   rV   eventsZis_wasmzgradio-launched-telemetry/r   )r   Zgradio.blocksrW   listrV   values
isinstanceappendZget_block_namer   Zdependenciesr   rd   re   authrf   rg   rh   ri   modeZinput_componentsZoutput_componentsr   r   updater"   rS   )	rV   r   Zblocks_telemetryZinputs_telemetryZoutputs_telemetryZtargets_telemetryrW   rb   Zadditional_datar   r\   r   launched_analytics   sZ    



rr   c                 C  s    t  s
d S tt d| d d S )Nzgradio-integration-analytics/r   rR   rT   r   r   r   integration_analytics   s    rs   )messager   c                 C  s(   t  s
dS d| i}tt d|d dS )zg
    Send error analytics if there is network
    Parameters:
        message: Details about error
    Nerrorzgradio-error-analytics/r   rR   )rt   r   r   r   r   error_analytics   s    rv   )'__doc__
__future__r   r   rC   r   r;   r   urllib.parser3   rG   Zdistutils.versionr   typingr   r'   Zgradior   Zgradio.contextr   Zgradio.utilsr   Zpyodide.httpr   r   ImportErrorrS   rB   r   r"   r    r   rK   r&   r2   rU   rr   rs   rv   r   r   r   r   <module>   s@   
9
