o
    e                     @   s  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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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 dl!m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ ej,-ej.dZ/ddgZ0e0d  Z1ej,2ej,3ej4d  Z5ej,-e/dZ6ej,-e/dZ7dZ8dd Z9de#fdd Z:d!d" Z;d(d#d$Z<d%d& Z=e>d'kre=  dS dS ))    N)Flask)make_responseredirect)request)Response)	send_file)Babel)__version__)get_start_arguments)create_fastdeploy_api_call)create_model_convert_api_call)create_profiler_api_call)create_api_call)get_component_tabs)
parse_args)	ParseArgs)info)upload_to_dev)Template)update_utilserverenzhz./distz./mock_data/z/alivec                    sR  t jd }dd |_tdd d}d|j_d|jd< t|jd	< fd
dt|d}t	j
jj tj
t t jrItj  jd dd jsttjttjrfdndjd u rndnjd	|dfdd}|ddd }|d fdd}|d 	fdd}|jd dd gd! fd"d#}|jd$ dd gd!fd%d&}	|jd' dd gd!fd(d)}
|jd* dd gd!fd+d,}|jd- dd gd!fd.d/}|jd0 dd gd!d1tffd2d3}|d4  fd5d6}|t d7d8 }|S )9Nz	flask.clic                  W   s   d S N )xr   r   CD:\Projects\ConvertPro\env\Lib\site-packages\visualdl/server/app.py<lambda>A   s    zcreate_app.<locals>.<lambda>visualdl)Zstatic_folderT   ZSEND_FILE_MAX_AGE_DEFAULTZBABEL_DEFAULT_LOCALEc                     s"    j } | r	| tvrtjt} | S r   )languagesupport_languager   Zaccept_languages
best_match)langargsr   r   
get_localeK   s   zcreate_app.<locals>.get_locale)Zlocale_selector/apic                 S   s    d}t jrdt j  }| | S )N ?)r   query_stringdecode)urlr+   r   r   r   append_query_string]   s   z'create_app.<locals>.append_query_stringZ 63a600296f8a71f576c4806376a9245br)   )ZPUBLIC_PATHZBASE_URIZAPI_URLZTELEMETRY_IDZTHEME/c                      s   t  ddS )N.  coder   r   r.   public_pathr   r   basen   s   zcreate_app.<locals>.basez/favicon.icoc                  S   s&   t jtd} t j| rt| S dS )Nzfavicon.ico)zfile not foundi  )ospathjointemplate_file_pathexistsr   )iconr   r   r   faviconr   s   zcreate_app.<locals>.faviconc                      s   t  d ddS )Nz/indexr0   r1   r   r   r3   r   r   indexy   s   zcreate_app.<locals>.indexz/<path:filename>c                    s>   t d| }|r| nd}|s|jd  ddddd |S )Nz\..+$z
index.htmlZvdl_lngr/   ZStrictF)r7   samesitesecurehttponly)researchrender
set_cookie)filenameZis_not_page_requestresponse)r'   templater   r   serve_static~   s   
z create_app.<locals>.serve_staticz/<path:method>GETPOST)methodsc                    $    | t j\}}}tt|||dS Nmimetypeheadersr   r&   r   r   methoddatarO   rP   )api_callr   r   	serve_api      zcreate_app.<locals>.serve_apiz/profiler/<path:method>c                    rL   rM   rQ   rR   )profiler_api_callr   r   serve_profiler_api   rW   z&create_app.<locals>.serve_profiler_apiz/inference/<path:method>c                    B   t jdkr | t j\}}}n	 | t j\}}}tt|||dS NrJ   rN   r   rS   formr&   r   r   rR   )inference_api_callr   r   serve_inference_api      
z'create_app.<locals>.serve_inference_apiz/fastdeploy/<path:method>c                    rZ   r[   r\   rR   )fastdeploy_api_callr   r   serve_fastdeploy_api   r`   z(create_app.<locals>.serve_fastdeploy_apiz/fastdeploy/fastdeploy_clientc               
      s   zt jdkrdt j t j} n	dt j t j} W n ty5 } zd|}t|W  Y d }~S d }~ww tj	| }|rIt
 d| ddS t
 d ddS )NrJ   create_fastdeploy_clientz{}z$/fastdeploy/fastdeploy_client/app?{}r0   r1   !/fastdeploy/fastdeploy_client/app)r   rS   r]   r&   	Exceptionformatr   urllibparse	urlencoder   )request_argse	error_msgr&   api_pathra   r   r   )serve_fastdeploy_create_fastdeploy_client   s*   

z=create_app.<locals>.serve_fastdeploy_create_fastdeploy_clientz)/fastdeploy/fastdeploy_client/<path:path>r7   c                    s
  d}t jdkr2t jdkrt j}nt j }d|v r$|d d }||d< nd|v r,|d }d|}n!t j }d|v rF|d d }||d< nd|v rN|d }d|}| dkrjt jt j	
d	  d
 d|}nt jt j	
d	  d d|}tj t j|dd t jD t  t jdd}| dkrF|j}|rEd|v rE|d}t|}|dd}	|dd}
|dd}| }z~zl|dddkrytdtjddddd|}|r|dddkrtd tjddddd|}|d}d!|v r|d!d"}n|d#d"}|||}tdtjd$dddd|}|r:|dddkrLtd tjd$dddd|}|d}d!|v r`|d!d%|	}n	|d#d%|	}|	rr|||}tdtjd&dddd|}|r|dddkrtd tjd&dddd|}|d}d!|v r|d!d%|
}n	|d#d%|
}|
r|||}tdtjd'dddd|}|r|dddkrtd tjd'dddd|}|d}d!|v r|d!d%|}n	|d#d%|}|r"|||}tdtjd(dddd|}|rB|dddkrTtd tjd(dddd|}|d}d!|v rh|d!d%d)}n	|d#d%d)}|||}ntdtjd*dddd|}|r|dddkrtd tjd*dddd|}|stdtjd*dddd|}|r|dddkrtd tjd*dddd|}|d}d!|v r|d!d"}n|d#d"}|||}tdtjd+dddd|}|r|dddkrdtd tjd+dddd|}|sdtdtjd+dddd|}|rR|dddkrdtd tjd+dddd|}|d}d!|v rx|d!d%|	}n	|d#d%|	}|	r|||}tdtjd,dddd|}|r|dddkrtd tjd,dddd|}|stdtjd,dddd|}|r|dddkrtd tjd,dddd|}|d}d!|v r|d!d%|
}n	|d#d%|
}|
r|||}tdtjd-dddd|}|r7|dddkr~td tjd-dddd|}|s~tdtjd-dddd|}|rl|dddkr~td tjd-dddd|}|d}d!|v r|d!d%|}n	|d#d%|}|r|||}tdtjd.dddd|}|r|dddkrtd tjd.dddd|}|stdtjd.dddd|}|r|dddkrtd tjd.dddd|}|d}d!|v r|d!d%d)}n	|d#d%d)}|||}W n
 ty9   Y nw W | }n	| }w n|j}d/d0 |jj D }t||j|}|S )1z
        Gradio app server url interface. We route urls for gradio app to gradio server.

        Args:
            path(str): All resource path from gradio server.

        Returns:
            Any thing from gradio server.
        r   rJ   zapplication/jsonrT   r$   rc   appr/   rd   zhttp://localhost:{}/z/fastdeploy/fastdeploy_client/c                 S   s   i | ]\}}|d kr||qS )Hostr   ).0keyvaluer   r   r   
<dictcomp>   s    zWcreate_app.<locals>.request_fastdeploy_create_fastdeploy_client_app.<locals>.<dictcomp>F)rS   r-   rP   rT   cookiesallow_redirects	server_idz	http-portr)   zmetrics-portdefault_model_namer   z""label":\s*{}.*?"value":\s*"".*?}}z	server ipT)ensure_ascii\z\\r   z"label"   z""value":\s*"".*?"label":\s*{}.*?}}z"value": ""z"value": "localhost"z
"value":""zserver portz"value": "{}"zmetrics portz
model namezmodel version1u   服务ipu   推理服务端口u   性能服务端口u   模型名称u   模型版本c                 S   s   g | ]\}}||fqS r   r   )rs   nameru   r   r   r   
<listcomp>H  s    zWcreate_app.<locals>.request_fastdeploy_create_fastdeploy_client_app.<locals>.<listcomp>)r   rS   rO   jsonr]   to_dictr&   r-   replaceZhost_urlrstriprf   requestsrP   get_datarw   contentgetr   r,   rA   rB   dumpsgroupcountre   encoderawitemsr   status_code)r7   r$   rj   port	proxy_urlrespr   ry   Z
start_argsZ	http_portZmetrics_portZ
model_nameZserver_addr_matchZdefault_server_addrZcur_server_addrZhttp_port_matchZdefault_http_portZcur_http_portZmetrics_port_matchZdefault_metrics_portZcur_metrics_portZmodel_name_matchrz   Zcur_model_nameZmodel_version_matchZdefault_model_versionZcur_model_versionrP   rF   rm   r   r   /request_fastdeploy_create_fastdeploy_client_app   s  














































zCcreate_app.<locals>.request_fastdeploy_create_fastdeploy_client_appz/component_tabsc                     s*   t  tjd\} }}tt| ||dS )N)Zvdl_argsrj   rN   )r   r   r&   r   r   )rT   rO   rP   )rU   r&   rX   r   r   component_tabsL  s   z"create_app.<locals>.component_tabsc                   S   s   dS )N)r)      r   r   r   r   r   
check_liveV  s   zcreate_app.<locals>.check_live)!sysmodulesZshow_server_bannerr   loggerdisabledconfigdefault_languager	   r   logdirmodelZcache_timeoutr   r   r   Z	telemetryr   Z	PbUpdaterproductstartr4   api_onlyr   r6   r7   r8   server_pathr9   themeZroutestrcheck_live_path)r&   clirq   Zbabelr5   r<   r=   rH   rV   rY   r_   rb   ro   r   r   r   r   )
rU   rn   r.   r&   ra   r'   r^   rX   r4   rG   r   
create_app>   sz   




	
   	
r   r&   c                 C   s   dj | j| jd}	 z%t|t  td| j| j | jdkr#td | jr.td| jd  W n t	y=   t
d	 Y nw q
| jsO| jrQt|| j  d S d S d S )
Nzhttp://{host}:{port})hostr   Tz8Running VisualDL at http://%s:%s/ (Press CTRL+C to quit)	localhostz[Serving VisualDL on localhost; to expose to the network, use a proxy or pass --host 0.0.0.0z.Running in API mode, only %s/* will be served.r(   g      ?)rf   r   r   r   r   r   r   r   r4   re   timesleepZopen_browser
webbrowseropen)r&   r-   r   r   r   wait_until_live]  s.   
r   c                 C   sX   t di | } td tdt t| }tjt| fd	  |j
d| j| jdd d S )Nr)   z[1;33mVisualDL %s[0mtargetr&   F)debugr   r   Zthreadedr   )r   r6   systemr   r
   r   	threadingThreadr   r   runr   r   )r&   rq   r   r   r   _runu  s   

r   c                 K   s0   d| i}| | tjt|fd}|  |jS )Nr   r   )updatemultiprocessingProcessr   r   pid)r   optionsr&   pr   r   r   r   ~  s
   
r   c                  C   sL   t  } | ddkr | ddkrt| d| d d S d S t|  d S )NdestZserviceZbehaviorZuploadr   r   )r   r   r   r   r%   r   r   r   main  s   r   __main__r   )?r   r   r6   rA   r   r   r   rg   r   r   Zflaskr   r   r   r   r   r   Zflask_babelr	   Zvisualdl.serverr   r
   Z+visualdl.component.inference.fastdeploy_libr   Z.visualdl.component.inference.fastdeploy_serverr   Z1visualdl.component.inference.model_convert_serverr   Z+visualdl.component.profiler.profiler_serverr   Zvisualdl.server.apir   r   Zvisualdl.server.argsr   r   Zvisualdl.server.logr   Zvisualdl.server.server   Zvisualdl.server.templater   Zvisualdl.utilsr   r7   r8   ROOTZ
SERVER_DIRr"   r   abspathdirnameargvr   r9   Zmock_data_pathr   r   r   r   r   r   __name__r   r   r   r   <module>   sd       #
		
