U
    öÕ/eÙ
  ã                   @  s^   d Z ddlmZ ddlZe e¡ZddlZddlm	Z	 ddl
mZmZ dZG dd„ deƒZdS )	zC Serve static files from multiple, dynamically defined locations.

é    )ÚannotationsN)ÚDict)Ú	HTTPErrorÚStaticFileHandler)ÚMultiRootStaticHandlerc                      sP   e Zd Zdddœdd„Zeddddœ‡ fdd	„ƒZddd
dœ‡ fdd„Z‡  ZS )r   zDict[str, str]ÚNone)ÚrootÚreturnc                 C  s   || _ d | _d S ©N)r   Údefault_filename)Úselfr   © r   úP/tmp/pip-unpacked-wheel-f5fndrjf/bokeh/server/views/multi_root_static_handler.pyÚ
initialize0   s    z!MultiRootStaticHandler.initializeÚstr)r   Úpathr	   c                   sb   z|  tjd¡\}}W n tk
r2   tdƒ‚Y nX | |d ¡}|d k	rVtƒ  ||¡S tdƒ‚d S )Né   i”  )ÚsplitÚosÚsepÚ
ValueErrorr   ÚgetÚsuperÚget_absolute_path)Úclsr   r   ÚnameZartifact_pathÚartifacts_dir©Ú	__class__r   r   r   4   s    z(MultiRootStaticHandler.get_absolute_pathz
str | None)r   Úabsolute_pathr	   c                   s2   |  ¡ D ]$\}}| |¡rtƒ  ||¡  S qd S r
   )ÚitemsÚ
startswithr   Úvalidate_absolute_path)r   r   r   r   r   r   r   r   r"   A   s    
z-MultiRootStaticHandler.validate_absolute_path)Ú__name__Ú
__module__Ú__qualname__r   Úclassmethodr   r"   Ú__classcell__r   r   r   r   r   .   s   r   )Ú__doc__Ú
__future__r   ÚloggingÚ	getLoggerr#   Úlogr   Útypingr   Ztornado.webr   r   Ú__all__r   r   r   r   r   Ú<module>   s   
