o
    i                     @   sX   d 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
 G dd deZdS )	z+Tornado handlers for dynamic theme loading.    N)glob)urlparse)FileFindHandler)url_path_joinc                   @   s<   e Zd ZdZ				dddZdddZdd Zd	d
 ZdS )ThemesHandlerz4A file handler that mangles local urls in CSS files.Nc           
      K   sn   |pg }g }|D ]}|d }	| dd t|	ddD  qt|ts%|g}|| }tj| |||d || _dS )zInitialize the handler.z
/**/themesc                 S   s   g | ]}|qS  r   ).0pathr   r   [/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyterlab_server/themes_handler.py
<listcomp>!   s    z,ThemesHandler.initialize.<locals>.<listcomp>T)	recursive)default_filenameno_cache_pathsN)extendr   
isinstancelistr   
initialize
themes_url)
selfr	   r   r   r   labextensions_pathkwargs	ext_pathsext_dirtheme_patternr   r   r
   r      s   

zThemesHandler.initializec                 C   s.   t j|\}}|dkrt|||S |  S )zRetrieve the content of the requested resource which is located
        at the given absolute path.

        This method should either return a byte string or an iterator
        of byte strings.
        .css)osr	   splitextr   get_content_get_css)r   abspathstartendbaseextr   r   r
   r   -   s   zThemesHandler.get_contentc                 C   s>   | j dusJ tj| j \}}|dkrt| S t|  S )z:Retrieve the total size of the resource at the given path.Nr   )absolute_pathr   r	   r   r   get_content_sizelenr   )r   r"   r#   r   r   r
   r%   :   s
   
zThemesHandler.get_content_sizec                    s   | j dusJ t| j d}| d}W d   n1 sw   Y  tj| jtjd}t	| j
| d} fdd}t|||dS )z"Get the mangled css file contents.Nrbzutf-8/zurl\('(.*)'\)|url\('(.*)'\)c                    sL   |   }dd |  D d }t|}|ds|jr|S ||t |S )z6Replace the matched relative url with the mangled url.c                 S   s   g | ]}|r|qS r   r   )r   gr   r   r
   r   U   s    z<ThemesHandler._get_css.<locals>.replacer.<locals>.<listcomp>r   r(   )groupgroupsr   
startswithschemereplaceujoin)mr*   partparsedbasepathr   r
   replacerQ   s   z(ThemesHandler._get_css.<locals>.replacer)r$   openreaddecoder   r	   dirnamer.   sepr/   r   resubencode)r   fiddatabasedirpatternr5   r   r3   r
   r   C   s   zThemesHandler._get_css)NNNN)NN)__name__
__module____qualname____doc__r   r   r%   r   r   r   r   r
   r      s    

	r   )rE   r   r;   r   urllib.parser   jupyter_server.base.handlersr   jupyter_server.utilsr   r/   r   r   r   r   r
   <module>   s    