o
    ٷi@                     @  sH  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
mZ ddlZddlmZ ddlmZ ddlZddlmZmZ zddlmZ W n eyW   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dAddZdd  Z dBd!d"Z!dCd%d&Z"					dDdEd3d4Z#dFd5d6Z$dFd7d8Z%dBd9d:Z&dGd<d=Z'dS )Hz-Functions related to analytics and telemetry.    )annotationsN)Any)_send_telemetry_in_thread)Version)core_gradio_componentsget_package_version)pyfetchc                    s
   t d)Nz:pyodide.http.pyfetch is not available in this environment.)NotImplementedError)_args_kwargs r   D/home/ubuntu/.local/lib/python3.10/site-packages/gradio/analytics.pypyodide_pyfetch   s   r   zhttps://api.gradio.app/z"https://api.gradio.app/pkg-versionreturnstrc                 C  s
   | j  S )z
    This will return "matrix" for Matrix template, and ensures that any component name that is sent from the gradio app is part of the core components list (no false positives for custom components).
    )__name__lower)
class_namer   r   r   get_block_name#   s   
r   boolc                   C  s   t dddkS )zB
    Returns: True if analytics are enabled, False otherwise.
    GRADIO_ANALYTICS_ENABLEDTrue)osgetenvr   r   r   r   analytics_enabled*   s   r   topicdatadict[str, Any]Nonec                 C  s   t jt| |dd  d S )Nr   r   )targetkwargs)	threadingThread_do_normal_analytics_requeststartr   r   r   r   _do_analytics_request1   s   
r&   c                 C  s2   zt | d|d|d W d S  ty   Y d S w )Ngradioversion)r   library_namelibrary_version
user_agent)r   get	Exceptionr   r   r   r   r$   ;   s   r$   urlc                   sZ   t j|d}ddi}ztjt| d||dddI d H  W d S  tjy,   Y d S w )NasciizContent-Typez!application/x-www-form-urlencodedPOST)methodheadersbody   )timeout)urllibparse	urlencodeencodeasynciowait_forr   TimeoutError)r.   r   r3   r2   r   r   r   _do_wasm_analytics_requestG   s   r=   c                  C  s   z(t  } tjtdd d }t|t| kr&td|  d| d W d S W d S  tjj	y9   td Y d S  t
yG   td Y d S  tyP   Y d S w )	N   )r.   r5   r(   z(IMPORTANT: You are using gradio version z, however version z( is available, please upgrade. 
--------z1unable to parse version details from package URL.z*package URL does not contain version info.)r   httpxr,   PKG_VERSION_URLjsonr   warningswarndecoderJSONDecodeErrorKeyErrorr-   )current_pkg_versionlatest_pkg_versionr   r   r   version_checkX   s"   
rI   c                 C  $   t  sd S t d}t|| d d S )Nzgradio-initiated-analytics/r   r   ANALYTICS_URLr&   r   r   r   r   r   initiated_analyticsj      

rN   blocksgradio.Blocksc              
     s\  t  sd S g g g g g f\}}}}}t j D ]	}||  q j D ]2}| fdd|jD  }| fdd|jD  }| fdd|jD  }| fdd|j	D  }q'ddd}dd t
 D t  j jd u j| j j|| j j||||d	}	fdd|D }
t|
dk}||	d< |
|	d< ||	 t d}t||d d S )Nc                   s0   g | ]}|d   j v r j t|d    qS )r   rP   intr   .0yrP   r   r   
<listcomp>   s
    z&launched_analytics.<locals>.<listcomp>c                   s"   g | ]}|d   j v r|d qS )r      rW   rT   rW   r   r   rX      s    c                   (   g | ]}| j v r j t|  qS r   rR   rT   rW   r   r   rX      
    
c                   rZ   r   rR   rT   rW   r   r   rX      r[   moder   
components(list[gradio.components.Component] | Nonefallback	list[str]r   list[str] | Nonec                 S  s"   | dkr|rdd |D S d S |S )N	interfacec                 S  s   g | ]}|  qS r   r   rU   br   r   r   rX          zBlaunched_analytics.<locals>.get_inputs_outputs.<locals>.<listcomp>r   )r\   r]   r_   r   r   r   get_inputs_outputs   s   z.launched_analytics.<locals>.get_inputs_outputsc                 S  s   g | ]}t |qS r   rc   )rU   cr   r   r   rX      rf   )	r(   is_hosted_notebook
using_authdev_modeinputsoutputstargetsrP   eventsc                   s   g | ]}| vr|qS r   r   rd   )core_componentsr   r   rX      s    r   using_custom_componentcustom_componentszgradio-launched-telemetry/r   )r\   r   r]   r^   r_   r`   r   ra   )r   listrP   valuesappendr   fnsrn   rl   rm   r   r   ri   authrk   r\   input_componentsoutput_componentslenupdaterL   r&   )rP   r   blocks_telemetryinputs_telemetryoutputs_telemetrytargets_telemetryevents_telemetryxrg   additional_datarr   rq   r   r   )rP   rp   r   launched_analyticsu   sh   		

	



r   commandtemplate
str | Noneupload_pypibool | Noneupload_demoupload_sourcegenerate_docsbump_versionnpm_installpython_pathgradio_pathc
                 C  s4   | |||||||||	d
}
t  sd S td|
d d S )N)
r   r   r   r   r   r   r   r   r   r   zgradio/custom-componentsr   r   r&   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   custom_component_analytics   s"   
r   c                  C  "   ddi} t  s	d S td| d d S )Nr   sketchzgradio/sketchr   r   r   r   r   r   sketch_analytics      
r   c                  C  r   )Nr   vibezgradio/viber   r   r   r   r   r   vibe_analytics   r   r   c                 C  rJ   )Nzgradio-integration-analytics/r   rK   rM   r   r   r   integration_analytics   rO   r   messagec                 C  s,   t  sdS d| i}t d}t||d dS )zg
    Send error analytics if there is network
    Parameters:
        message: Details about error
    Nerrorzgradio-error-analytics/r   rK   )r   r   r   r   r   r   error_analytics
  s   

r   )r   r   )r   r   )r   r   r   r   r   r   )r.   r   r   r   r   r   )r   r   r   r   )rP   rQ   r   r   r   r   )NNNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   r   r   )(__doc__
__future__r   r:   rA   r   r"   urllib.parser6   rB   typingr   r?    huggingface_hub.utils._telemetryr   packaging.versionr   r'   gradio.utilsr   r   pyodide.httpr   r   ImportErrorrL   r@   r   r   r&   r$   r=   rI   rN   r   r   r   r   r   r   r   r   r   r   <module>   sN    







U
!

