a
    oDf:                     @   s|  d 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mZ ddlZddlZddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ eejZ eejd d Z!edd Z"dd Z#d.ddZ$d/ddZ%d0ddZ&d1ddZ'd2ddZ(dd Z)d3dd Z*d4d"d#Z+d5d$d%Z,d6d&d'Z-d7d(d)Z.d8d*d+Z/d9d,d-Z0dS ):z9
Utilities for building custom models included in panel.
    N)ThreadPoolExecutor)cachepartial)Model   )configpanel_extension)RESOURCE_URLS)ReactiveHTML)BasicTemplate)DesigndistZbundledc                  C   sf   zFdd l } ddlm} ddlm} |  d d }|t ||dW S  ty`   t  Y S 0 d S )Nr   )CacheControl)SeparateBodyFileCacheZholovizzpanel.compiler)r   )	platformdirscachecontrolr   Zcachecontrol.cachesr   Zuser_cache_pathrequestsSessionImportError)r   r   r   	cache_dir r   [/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/panel/compiler.py_session    s    r   c                 C   s   zt  j| ddd  }}W n^ tyx   zt  j| dddd  }}W n. tyr } zd | }}W Y d }~n
d }~0 0 Y n0 ||fS )N
   )timeoutF)verifyr   )r   get	Exception)urlresponseerrorer   r   r   	_download.   s    &r"   c              	   C   s6   |d u rt | |||d n|tt | |||d d S )N)explicit_dirext)_write_bundled_filesappendr   )namefilesr#   r$   download_listr   r   r   write_bundled_files<   s    r*   c              	   C   s<  |  dd  }|D ]}|ds\t|   | }|jjddd ttd | | q| dd }t	|\}}|rd	|  d
| d| d}	t
|	|| d}
t	|
\}}|tjrtjj|tjd d }n0tjjtjj| ddd    ddd   }|p|}t||}|jjddd t|}|r^t||s^|d| 7 }|drt|d}||j W d    n1 s0    Y  nF|jd}t|ddd}|| W d    n1 s0    Y  |rt| dddd"}||jd W d    q1 s,0    Y  qd S )N.httpTparentsexist_oktheme?r   zFailed to fetch z dependency: z. Errored with z.map /z//r   ).ttfz.wasmwbutf-8wencoding)splitlower
startswith
BUNDLE_DIRparentmkdirshutilcopyfileBASE_DIRr"   ConnectionErrorr   Znpm_cdnospathjoinreplacejoinpathstrendswithopenwritecontentdecode)r'   r(   r#   r$   
model_nameZbundle_file	dest_pathr   r    msgZmap_fileZmap_response_bundle_pathZobj_dirfilenamefrN   r   r   r   r%   B   s@    



0
.*r%   Fc                 C   s2   |d u rt | ||d n|tt | ||d d S )N)r'   module)_write_bundled_tarballr&   r   )tarballr'   rW   r)   r   r   r   write_bundled_tarballi   s    rZ   c              	      s   |r| dd  nd}t| d \}}|r2|t }||j |d tj	|d}| 
dg }|D ]j| d rl sqlj| d d}	tfd	d
|D rqltjj|	 d }
| d dtjj}|rt|||
 nt||
  jjddd |j}t  |rR drR d d   drR d7  t fdd
dD r| }t	 d}|| W d    n1 s0    Y  ql| d}t	 ddd}|| W d    ql1 s0    Y  ql|  d S )Nr+   r,   r3   tarr   )fileobjexcludesrcc                 3   s   | ]}t   j|V  qd S N)fnmatchr'   .0exc)tarfr   r   	<genexpr>~       z)_write_bundled_tarball.<locals>.<genexpr>r4   destTr.   z.jsindexz.mjsc                 3   s   | ]}  |V  qd S r_   rK   rb   ftrU   r   r   re      rf   r5   z.eotz.woffz.woff2r6   r7   r8   r9   )r;   r<   r"   ioBytesIOrM   rN   seektarfilerL   r   r'   r=   isfilerH   anyrE   rF   rG   sepr>   rI   r?   r@   extractfilerJ   rK   readrO   close)rY   r'   rW   rP   r   r    rV   Ztar_objr]   rF   rT   rQ   ZfobjrN   r   )rU   rd   r   rX   o   sF    

,,rX   c                 C   s*   |d u rt | | n|tt | | d S r_   )_write_bundled_zipr&   r   )r'   resourcer)   r   r   r   write_bundled_zip   s    r{   c           
   	      sh  t |d \}}|r|t }||j |d t|}|dg }|	 D ]
|d d}tfdd|D sTdrqT|
dtjj}t| |  jjd	d	d
 |}	t  t fdddD rt d}||	 W d    n1 s0    Y  qTt ddd }||	d W d    qT1 sP0    Y  qT|  d S )Nzipr   r]   r^   r3   c                 3   s   | ]}t   |V  qd S r_   )r`   ra   )zipfr   r   re      rf   z%_write_bundled_zip.<locals>.<genexpr>r4   Tr.   c                 3   s   | ]}  |V  qd S r_   rj   rk   rm   r   r   re      rf   rn   r6   r8   r7   r9   )r"   ro   rp   rM   rN   rq   zipfileZipFiler   namelistrH   rt   rK   rE   rF   ru   r>   rI   r?   r@   rw   rJ   rL   rO   rx   )
r'   rz   r   r    rV   Zzip_objr]   rF   rT   fdatar   )rU   r}   r   ry      s.    

 
,2ry   c                 C   s   t | t|jdi  td|d t | t|jdi  td|d g }|jdi  D ]$\}}||jdi vr^|| q^t | |dd|d |jdi  D ]}t||d qd S )Ncssr)   js
js_modulesrY   Zmjs)r$   r)   )	r*   list
_resourcesr   valuesr>   itemsr&   rZ   )r'   	componentr)   r   tar_nameZ	js_modulerY   r   r   r   write_component_resources   s    $$r   Tc                 C   sX   t  D ]J\}}| r$td| d d|v r<t|||d qd|v rt|||d qd S )NzBundling shared resource r+   r|   r   r[   r'   r)   )r	   r   printr{   rZ   )verboseexternalr)   r'   rz   r   r   r   bundle_resource_urls   s    r   c              	   C   s  t t D ]\}}| r,td| d |jddrL|rLt|||d t	t
|j}t|  }|jddd tt|d D ]}t||tj|  q|j}t|ts|r|gng }|D ]}| }	|jdd  D ]>}
t|
tsqt|
jtr|
jn|
jg}||v r|
j }	qt|	 }|jddd t||tj|  q|j}t|tsv|rr|gng }|D ]}| }	|jdd  D ]F}
t|
tsqt|
jtr|
jn|
jg}||v r|
j }	qt|	 }t||tj|  qzqd S )	N	Bundling 
 resourcesbundleTr   r.   *.cssr   )paramconcrete_descendentsr   r   r   r   r   r   pathlibPathinspectgetfiler?   r>   r<   r@   globrJ   rA   rB   rE   rF   basenameZ_css
isinstancer   __mro__
issubclass__name__Z_js)r   r   r)   r'   templateZtemplate_dirdest_dirr   Ztemplate_cssZ	tmpl_nameclsZtmpl_cssZtmpl_dest_dirZtemplate_jsr   Ztmpl_jsr   r   r   bundle_templates   sJ    


r   c                 C   s   t t D ]<\}}| r*td| d |jddr|rt|||d qtd }|j	ddd t

ttd d d	 D ]}t||tj|  q|d S )
Nr   z design resourcesr   Tr   r1   r.   r   r   )r   r   r   r   r   r   r   r   r>   r@   r   rJ   rC   rA   rB   rE   rF   r   )r   r   r)   r'   ZdesignZtheme_bundle_dirZ
design_cssr   r   r   bundle_themes   s    r   c                 C   s  t j D ]}|dr
t| q
|s*d S i i i   }}}tt }tt	j
 dd |D  }|D ]\}	}
|	ds~qh| rtd|	 d t|
dg t|
dg  pd }t|
d	d }|
}|
jd
d  D ]l}t|dg t|dg  pd }|d u r|d us|d ur4||kr4|r$|||j< n
|||j<  q:|}qt|
dd }|
}|
jd
d  D ]N}t|dd }|d u r||d us|d ur||kr|||j<  q|}qXt|
dd }|
}|
jd
d  D ]L}t|dd }|d u r|d us|d ur||kr|||j<  qh|}qqh| D ]J\}	}| r<td|	 d t|trXt||	|d nt|	||d q| D ].\}	}| rtd|	 d t|	||d qr| D ]\}	}t|	||d qd S )Nzpanel.modelsc                 S   s"   g | ]}|j  d |j |fqS )r+   )
__module__r   )rb   mr   r   r   
<listcomp>  rf   z!bundle_models.<locals>.<listcomp>zpanel.zCollecting r   Z__javascript_raw__Z__javascript_modules_raw__Z__tarball__r   Z__css_raw__Z__resources__r   z model JS resourcesr   r   z model CSS resources)r   Z_importsr   r=   
__import__r   r   r
   r   r   Zmodel_class_reverse_mapr   r   getattrr   r   r   dictrZ   r*   )r   r   r)   impZjs_filesZ	css_filesZresource_filesreactivemodelsr'   modelZprev_jsfilesZprev_jsbundleZprev_clsr   ZjsfilesZprev_cssfilesZcssfilesZprev_resources	resourcesZ	res_filesr   r   r   bundle_models  s    










r   c                 C   sd   t d }|jddd ttjjd d d }tt|d D ]}t	||t
j|  qBd S )NZimagesTr.   docZ_staticZicons*)r>   r@   r   r   __file__r?   r   rJ   rA   rB   rE   rF   r   )r   r   r)   r   Zicon_dirZiconr   r   r   bundle_iconsW  s
    r   c                 C   s   g }t | ||d t| ||d t| ||d t| ||d t| ||d t  }|dd |}W d    n1 sv0    Y  |D ]}|r|  qd S )N)r   r   r)   c                 S   s   |  S r_   r   )xr   r   r   <lambda>h  rf   z"bundle_resources.<locals>.<lambda>)r   r   r   r   r   r   mapresult)r   r   r)   executorZfuturesfuturer   r   r   bundle_resources_  s    .r   )NNN)NN)NFN)NF)N)N)FTN)FTN)FTN)FTN)FTN)FT)1__doc__r`   r   r   ro   rE   r   rA   rr   r~   concurrent.futuresr   	functoolsr   r   r   r   Zbokeh.modelr   r   r   Zio.resourcesr	   r   r
   Ztemplate.baser   r1   r   r   r   r?   rC   r>   r   r"   r*   r%   rZ   rX   r{   ry   r   r   r   r   r   r   r   r   r   r   r   <module>   sJ   


'

(




0

K
