o
    eH                     @   s   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m	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d
ZdZdddZdddZdd ZG dd deZe dd Zdd ZdS )    N)BytesIO)request)	LogReader)MemCache)GraphReader)lib)ClientManager)logger       c                 C   s   ||| dS )N)statusmsgdata )r   r   r   r   r   CD:\Projects\ConvertPro\env\Lib\site-packages\visualdl/server/api.py
gen_result#   s   r   application/jsonc                    s    fdd}|S )Nc                    s   t   fdd}|S )Nc              
      s   d }d}d}z | g|R i |}W n t y, } zd|}d}W Y d }~nd }~ww dkr:tt|||}trC| }n1}d urtdv rtt }tjd|d}	|	 }
|	
|
 W d    n1 skw   Y  | }||fS )	Nr   r   z{}r   zcontent-encodingwb)modefileobj)	Exceptionformatjsondumpsr   callabler   gzipGzipFileencodewritegetvalue)selfargskwargsr   r   r   eZheaders_outputbuffpZ
gzip_value)funcheadersmimetyper   r   wrapper)   s0   


z*result.<locals>.decorator.<locals>.wrapper)	functoolswraps)r(   r+   r)   r*   )r(   r   	decorator(   s   zresult.<locals>.decoratorr   )r*   r)   r/   r   r.   r   result'   s   r0   c                 O   s.   t jt| tg|R i |}|std |S )Nz#Internal server error. Retry later.)r   retryerror_retry_timeserror_sleep_timer	   error)functionr#   r$   resr   r   r   try_callG   s   
r7   c                   @   s  e Zd Zdd Zdd Zdd Ze dd Zd	d
 Ze dd Z	e dd Z
e dd Ze dd Ze dd Ze dd Ze dd Ze dd Ze dd Ze dd Ze dd  Ze d!d" Ze d#d$ Ze d%d& Ze d'd( Ze d)d* Zed+dod-d.Ze d/d0 Ze d1d2 Zed+dod3d4Zed+dod5d6Ze d7d8 Zed9dpd;d<Ze d=d> Z ed?dpd@dAZ!e dBdC Z"edDdpdEdFZ#e 	G	H	IdqdJdKZ$e dLdM Z%edNdOdP Z&edQdRdS Z'e dTdU Z(e dVdW Z)e dXdY Z*e dZd[ Z+e d\d] Z,e d^d_ Z-edQd`da dbdc Z.e ddde Z/e dfdg Z0e dhdi Z1e djdk Z2e dldm Z3dnS )rApic                 C   s~   t || _t|| _| j| j |r)d|v r| j| || j_tj	|| _
nd| _
t| j| _t|d}t|| _d S )Nvdlgraphr   )timeout)r   _readerr   _graph_readerZset_displaynameset_input_graphmodelospathbasename
model_namer   graph_reader_client_managerr   r   	cache_get_cache)r"   logdirr>   cache_timeoutcacher   r   r   __init__P   s   


zApi.__init__c                 O   s   | j ||| jg|R i |S N)rE   r;   r"   keyr(   r#   r$   r   r   r   _get`   s   zApi._getc                 O   s    | j |t|| jg|R i |S rJ   )rE   r7   r;   rK   r   r   r   _get_with_retryc   s    zApi._get_with_retryc                 C      |  dtjS )Nzdata/components)rM   r   Zget_componentsr"   r   r   r   
componentsf      zApi.componentsc                 C   s2   t  }|| jjdd || jjdd |S )zE
        Get all component tabs supported by readers in Api.
        T)update)setrS   r;   component_tabsr<   )r"   tabsr   r   r   rU   j   s   zApi.component_tabsc                 C   rO   )Nz	data/runs)rM   r   Zget_runsrP   r   r   r   runss   rR   zApi.runsc                 C   s   t j}| j|}t|S rJ   )r   remote_addrrC   get_datar   Zget_graph_runs)r"   	client_ipgraph_readerr   r   r   
graph_runsw   s   
zApi.graph_runsc                 C   rO   )Nz	data/tags)rM   r   get_tagsrP   r   r   r   tags}   rR   zApi.tagsc                 C   rO   )Nz	data/logs)rM   r   Zget_logsrP   r   r   r   logs   rR   zApi.logsc                 C   rO   )Nzdata/plugin/scalars/tags)rN   r   Zget_scalar_tagsrP   r   r   r   scalar_tags      zApi.scalar_tagsc                 C   rO   )Nzdata/plugin/multiscalars/tags)rN   r   Zget_scalars_tagsrP   r   r   r   scalars_tags   ra   zApi.scalars_tagsc                 C   rO   )Nzdata/plugin/images/tags)rN   r   Zget_image_tagsrP   r   r   r   
image_tags   ra   zApi.image_tagsc                 C   rO   )Nzdata/plugin/text/tags)rN   r   Zget_text_tagsrP   r   r   r   	text_tags   rR   zApi.text_tagsc                 C   rO   )Nzdata/plugin/audio/tags)rN   r   Zget_audio_tagsrP   r   r   r   
audio_tags   ra   zApi.audio_tagsc                 C   rO   )Nzdata/plugin/embeddings/tags)rN   r   Zget_embeddings_tagsrP   r   r   r   embedding_tags   ra   zApi.embedding_tagsc                 C   rO   )Nzdata/plugin/pr_curves/tags)rN   r   Zget_pr_curve_tagsrP   r   r   r   pr_curve_tags   ra   zApi.pr_curve_tagsc                 C   rO   )Nzdata/plugin/roc_curves/tags)rN   r   Zget_roc_curve_tagsrP   r   r   r   roc_curve_tags   ra   zApi.roc_curve_tagsc                 C   rO   )Nzdata/plugin/hparams/importance)rN   r   Zget_hparam_importancerP   r   r   r   hparam_importance   ra   zApi.hparam_importancec                 C   rO   )Nzdata/plugin/hparams/indicators)rN   r   Zget_hparam_indicatorrP   r   r   r   hparam_indicator   ra   zApi.hparam_indicatorc                 C   rO   )Nzdata/plugin/hparams/list)rN   r   Zget_hparam_listrP   r   r   r   hparam_list   ra   zApi.hparam_listc                 C   "   t jd||}| |tj||S )Nzdata/plugin/hparams/metric)r?   r@   joinrN   r   Zget_hparam_metric)r"   runmetricrL   r   r   r   hparam_metric      zApi.hparam_metricztext/csvtsvc                 C      t jd|}| |tj|S )Nzdata/plugin/hparams/data)r?   r@   rm   rN   r   Zget_hparam_data)r"   typerL   r   r   r   hparam_data      zApi.hparam_datac                 C   rl   )Nzdata/plugin/scalars/scalars)r?   r@   rm   rN   r   Z
get_scalarr"   rn   tagrL   r   r   r   scalar_list   rq   zApi.scalar_listc                 C   &   t jd|||}| |tj|||S )Nz data/plugin/multiscalars/scalars)r?   r@   rm   rN   r   Zget_scalars)r"   rn   rx   sub_tagrL   r   r   r   scalars_list   s   zApi.scalars_listc                 C   rz   )Nzdata/plugin/scalars/data)r?   r@   rm   rN   r   Zget_scalar_data)r"   rn   rx   rt   rL   r   r   r   scalar_data   s   zApi.scalar_datac                 C   s*   t jd||||}| |tj||||S )Nzdata/plugin/multiscalars/data)r?   r@   rm   rN   r   Zget_scalars_data)r"   rn   rx   r{   rt   rL   r   r   r   scalars_data   s   zApi.scalars_datac                 C   rl   )Nzdata/plugin/images/images)r?   r@   rm   rN   r   Zget_image_tag_stepsr"   r   rx   rL   r   r   r   
image_list   rq   zApi.image_listz	image/pngr   c                 C   2   t |}tjd||t|}| |tj|||S )Nz"data/plugin/images/individualImage)intr?   r@   rm   strrN   r   Zget_individual_imager"   r   rx   indexrL   r   r   r   image_image      zApi.image_imagec                 C   rl   )Nzdata/plugin/text/text)r?   r@   rm   rN   r   Zget_text_tag_stepsr   r   r   r   	text_list   rq   zApi.text_listz
text/plainc                 C   r   )Nzdata/plugin/text/individualText)r   r?   r@   rm   r   rN   r   Zget_individual_textr   r   r   r   	text_text   r   zApi.text_textc                 C   rl   )Nzdata/plugin/audio/audio)r?   r@   rm   rN   r   Zget_audio_tag_stepsrw   r   r   r   
audio_list   rq   zApi.audio_listz	audio/wavc                 C   r   )Nz!data/plugin/audio/individualAudio)r   r?   r@   rm   r   rN   r   Zget_individual_audio)r"   rn   rx   r   rL   r   r   r   audio_audio   r   zApi.audio_audiodefaultpcar   c                 C   s4   t |}tjd|t||}| |tj||||S )Nz!data/plugin/embeddings/embeddings)r   r?   r@   rm   r   rN   r   Zget_embeddings)r"   rn   rx   	reduction	dimensionrL   r   r   r   embedding_embedding  s   
zApi.embedding_embeddingc                 C   rO   )Nzdata/plugin/embeddings/list)rN   r   Zget_embeddings_listrP   r   r   r   embedding_list  ra   zApi.embedding_listztext/tab-separated-valuesc                 C   rs   )Nzdata/plugin/embeddings/metadata)r?   r@   rm   rN   r   Zget_embedding_labelsr"   namerL   r   r   r   embedding_metadata  rv   zApi.embedding_metadatazapplication/octet-streamc                 C   rs   )Nzdata/plugin/embeddings/tensor)r?   r@   rm   rN   r   Zget_embedding_tensorsr   r   r   r   embedding_tensor  rv   zApi.embedding_tensorc                 C   rO   )Nzdata/plugin/histogram/tags)rN   r   Zget_histogram_tagsrP   r   r   r   histogram_tags  ra   zApi.histogram_tagsc                 C   rl   )Nzdata/plugin/histogram/histogram)r?   r@   rm   rN   r   Zget_histogramrw   r   r   r   histogram_list#  rq   zApi.histogram_listc                 C   rl   )Nzdata/plugin/pr_curves/pr_curve)r?   r@   rm   rN   r   Zget_pr_curverw   r   r   r   pr_curves_pr_curve(  rq   zApi.pr_curves_pr_curvec                 C   rl   )Nz data/plugin/roc_curves/roc_curve)r?   r@   rm   rN   r   Zget_roc_curverw   r   r   r   roc_curves_roc_curve-  rq   zApi.roc_curves_roc_curvec                 C   rs   )Nzdata/plugin/pr_curves/steps)r?   r@   rm   rN   r   Zget_pr_curve_stepr"   rn   rL   r   r   r   pr_curves_steps2  rv   zApi.pr_curves_stepsc                 C   rs   )Nzdata/plugin/roc_curves/steps)r?   r@   rm   rN   r   Zget_roc_curve_stepr   r   r   r   roc_curves_steps7  rv   zApi.roc_curves_stepsc                 C   s   t | jrdd| j iS d S )NzContent-Dispositionzattachment; filename="%s")lenrB   )sr   r   r   <lambda><  s
   
zApi.<lambda>c                 C   s   t jd}| |tjS )Nzdata/plugin/graphs/static_graph)r?   r@   rm   rN   r   Zget_static_graph)r"   rL   r   r   r   graph_static_graph<  s   zApi.graph_static_graphc                 C   sl   t j}| j|}|d ur| dkrd}nd}nd}|d ur+| dkr(d}nd}nd}tj||||dS )NtrueTF)
expand_allrefreshr   rX   rC   rY   lowerr   Z	get_graph)r"   rn   r   r   rZ   r[   r   r   r   graph_graphC  s   zApi.graph_graphc                 C   sr   t j}| j|}t j}d|v r5t jd }d|jv r%||j d d S d|jv r7||j d d S d S d S )NfileZpdmodelr9   )	r   rX   rC   rY   filesfilenamer=   streamread)r"   rZ   r[   r   Zfile_handler   r   r   graph_uploadX  s   


zApi.graph_uploadc                 C   l   t j}| j|}|d ur| dkrd}nd}nd}|d ur+| dkr(d}nd}nd}t|||||S Nr   TFr   )r"   rn   nodeidexpand
keep_staterZ   r[   r   r   r   graph_manipulatef  s   zApi.graph_manipulatec                 C   r   r   )r   rX   rC   rY   r   r   Zget_graph_search)r"   rn   r   r   is_noderZ   r[   r   r   r   graph_searchz  s   zApi.graph_searchc                 C   s   t j}| j|}t||S rJ   )r   rX   rC   rY   r   Zget_graph_all_nodes)r"   rn   rZ   r[   r   r   r   graph_get_all_nodes  s   zApi.graph_get_all_nodesN)rr   )r   )r   r   r   )4__name__
__module____qualname__rI   rM   rN   r0   rQ   rU   rW   r\   r^   r_   r`   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rp   ru   ry   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   r   r8   O   s    
	


































r8   c                 G   sP   t  }| jrt| jS | jr$|D ]}||d| |d qt|S g dS )zi
    Get component tabs in all apis, so tabs can be presented according to existed data in frontend.
    rU   static_graph)r   Zx2paddleZfastdeploy_serverZfastdeploy_client)rT   rU   listrF   rS   add)Zvdl_argsZrequest_argsZapisZall_tabsapir   r   r   get_component_tabs  s   
r   c                    st  t | ||}i d|jg fd|jg fd|jg fd|jg fd|jg fd|jg fd|jg fd|jg fd	|j	g fd
|j
g fd|jg fd|jg fd|jg fd|jg fd|jddgfd|jg dfd|jg dfi d|jg dfd|jddgfd|jg dfd|jddgfd|jg dfd|jddgfd|jg dfd|jg d fd!|jg fd"|jd#gfd$|jd#gfd%|jddgfd&|jg d'fd(|jg fd)|j g fd*|j!g d+fd,|j"dgf|j#g d-f|j$ddgf|j%ddgf|j&dgf|j'dgf|j(g f|j)d.gf|j*g f|j+g f|j,dd/gf|j-g fd0 d1t.f fd2d3}|S )4NrQ   rW   r\   r^   r_   zscalar/tagszscalars/tagsz
image/tagsz	text/tagsz
audio/tagszembedding/tagszhistogram/tagszpr-curve/tagszroc-curve/tagszscalar/listrn   rx   zscalars/list)rn   rx   r{   zscalar/data)rn   rx   rt   zscalars/data)rn   rx   r{   rt   z
image/listzimage/image)rn   rx   r   z	text/listz	text/textz
audio/listzaudio/audiozembedding/embedding)rn   rx   r   r   zembedding/listzembedding/tensorr   zembedding/metadatazhistogram/listzgraph/graph)rn   r   r   zgraph/static_graphzgraph/uploadzgraph/search)rn   r   r   r   zgraph/get_all_nodes)rn   r   r   r   rt   ro   )zgraph/manipulatezpr-curve/listzroc-curve/listzpr-curve/stepszroc-curve/stepszhparams/importancezhparams/datazhparams/indicatorszhparams/listzhparams/metricrU   r@   c                    sH    | }|sttddddd fS |\}} fdd|D }|| S )N   zapi not found)r   r   r   c                    s   g | ]}  |qS r   )get).0r   r#   r   r   
<listcomp>  s    z1create_api_call.<locals>.call.<locals>.<listcomp>)r   r   r   r   )r@   r#   ZroutemethodZcall_arg_namesZ	call_argsZroutesr   r   call  s   
zcreate_api_call.<locals>.call)/r8   rQ   rW   r\   r^   r_   r`   rb   rc   rd   re   rf   r   rg   rh   ry   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri   ru   rj   rk   rp   rU   r   )rF   r>   rG   r   r   r   r   r   create_api_call  s   








	







 
!"$%


3	r   )Nr   r   )r   N)r,   r   r   r?   ior   Zflaskr   Zvisualdlr   Zvisualdl.python.cacher   Zvisualdl.reader.graph_readerr   Zvisualdl.serverr   Zvisualdl.server.client_managerr   Zvisualdl.server.logr	   r2   r3   r   r0   r7   objectr8   r   r   r   r   r   r   <module>   s.   

   J
