o
    e                     @  s8  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w dZdZd.ddZd/ddZd/ddZd/ddZdd Z d0dd Z!d0d!d"Z"d1d#d$Z#d2d'd(Z$d1d)d*Z%d3d,d-Z&dS )4z/ Functions related to analytics and telemetry.     )annotationsN)StrictVersion)Any)
wasm_utils)Context)GRADIO_VERSION)pyfetchc                    s
   t d)Nz:pyodide.http.pyfetch is not available in this environment.)NotImplementedError)argskwargs r   @D:\Projects\ConvertPro\env\Lib\site-packages\gradio/analytics.pypyodide_pyfetch   s   r   zhttps://api.gradio.app/z"https://api.gradio.app/pkg-versionreturnboolc                   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   urlstrdatadict[str, Any]Nonec                 C  s8   t jrtt| |d d S tjt| |dd  d S )Nr   r   )targetr   )	r   IS_WASMasyncio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 d S  tjtjjfy   Y d S w )N
ip_address   )r   timeout)get_local_ip_addressrequestspostConnectionError
exceptionsReadTimeoutr   r   r   r   r"   =   s   
r"   c                   sj   t  I d H |d< tj|d}ddi}ztjt| d||dddI d H  W d S  tjy4   Y d S w )	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   r2   r1   r   r   r   r   E   s   r   c                  C  s   z9t td} | st| d }tjtdd	 d }t
|t
|kr7td| d| d td	 W d S W d S  t	jjyJ   td
 Y d S  tyX   td Y d S  tya   Y d S w )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.   rM   c               	   C  sb   t  sdS tjdu r,ztjdddj } W n tjtjj	fy&   d} Y nw | t_| S 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/r;   r3   No internet connection)
r   r   r%   r)   rC   textrB   r+   r,   r-   )r%   r   r   r   r(   o   s    
r(   c               	     sz   t  sdS tjdu r8ztjtdddI dH } |  I dH }| }W n tjt	fy2   d}Y nw |t_|S tj}|S )z6The Wasm-compatible version of get_local_ip_address().rN   Nzhttps://api.ipify.orgr&   r3   rO   )
r   r   r%   r   r9   r   stringrB   r:   OSError)responseZresponse_textr%   r   r   r   r4      s(   
r4   c                 C      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      
rX   blocksgradio.Blocksc           	        s@  t  sd S g g g g f\}}}}ddlm} t j D ]}t||r*|| n|t	| q j
D ])}| fdd|d D  }| fdd|d D  }| fdd|d	 D  }q5t j j jd u j j j j jd
krx jn| jd
kr jn|||dd  j
D tjd}|| tt d|d d S )Nr   )BlockContextc                   $   g | ]}| j v rt j | qS r   rZ   r   .0yrZ   r   r   
<listcomp>   s
    
z&launched_analytics.<locals>.<listcomp>targetsc                   r]   r   r^   r_   rb   r   r   rc          inputsc                   r]   r   r^   r_   rb   r   r   rc      re   outputsZ	interfacec                 S  s   g | ]}t |d  qS )trigger)r   )r`   xr   r   r   rc      s    )r<   	is_kaggleis_sagemakerZ
using_authdev_modeshow_api
show_errortitlerf   rg   rd   rZ   eventsZis_wasmzgradio-launched-telemetry/r   )r   Zgradio.blocksr\   listrZ   values
isinstanceappendZget_block_namer   dependenciesr   rj   rk   authrl   rm   rn   ro   modeZinput_componentsZoutput_componentsr   r   updater$   rV   )	rZ   r   Zblocks_telemetryZinputs_telemetryZoutputs_telemetryZtargets_telemetryr\   ri   Zadditional_datar   rb   r   launched_analytics   sZ   




ry   c                 C  rT   )Nzgradio-integration-analytics/r   rU   rW   r   r   r   integration_analytics   rY   rz   messagec                 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   rU   )r{   r   r   r   r   error_analytics   s   
r}   )r   r   )r   r   r   r   r   r   )r   r   )r   r   r   r   )rZ   r[   r   r   r   r   )r{   r   r   r   )'__doc__
__future__r   r   rE   r   r=   r    urllib.parser5   rI   Zdistutils.versionr   typingr   r)   Zgradior   Zgradio.contextr   Zgradio.utilsr   Zpyodide.httpr   r   ImportErrorrV   rD   r   r$   r"   r   rM   r(   r4   rX   ry   rz   r}   r   r   r   r   <module>   sD    









9
