Ë
    :vžj  ã                  ó‚   — d Z ddlm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  G d
„ de«      Zy)z+Tornado handlers for dynamic theme loading.é    )ÚannotationsN)Ú	Generator)Úglob)ÚAny)Úurlparse)ÚFileFindHandler)Úurl_path_joinc                  óf   — e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d		 	 	 	 	 	 	 d
d„Zdd„Zdd„Zy)ÚThemesHandlerz4A file handler that mangles local urls in CSS files.Nc                óâ   — |xs g }g }|D ]*  }|dz   }	|j                  d„ t        |	d¬«      D «       «       Œ, t        |t        «      s|g}||z   }t	        j
                  | |||¬«       || _        y)zInitialize the handler.z
/**/themesc              3  ó    K  — | ]  }|–— Œ y ­w©N© )Ú.0Úpaths     úq/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyterlab_server/themes_handler.pyÚ	<genexpr>z+ThemesHandler.initialize.<locals>.<genexpr>$   s   è ø€ ÐRÑ.Q dœTÑ.Qùs   ‚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_patterns
             r   r   zThemesHandler.initialize   s�   € ð 0Ò5°2ÐØ!ˆ	Û)ˆGØ# lÑ2ˆMØ×ÑÑR¬d°=ÈDÕ.QÓRÕRð *ô
 ˜$¤Ô%Ø�6ˆDØ˜4Ñˆä×"Ñ"Ø�$Ð)9È.õ	
ð %ˆ�ó    c                óž   — t         j                  j                  |«      \  }}|dk7  rt        j                  |||«      S | j                  «       S )zÌRetrieve 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Úexts         r   r'   zThemesHandler.get_content0   sD   € ô —G‘G×$Ñ$ WÓ-‰	ˆˆcØ�&Š=Ü"×.Ñ.¨w¸¸sÓCÐCà�}‰}‹Ðr"   c                óÜ   — | j                   €J ‚t        j                  j                  | j                   «      \  }}|dk7  rt	        j
                  | «      S t        | j                  «       «      S )z:Retrieve the total size of the resource at the given path.r$   )Úabsolute_pathr%   r   r&   r   Úget_content_sizeÚlenr(   )r   r,   r-   s      r   r0   zThemesHandler.get_content_size?   s[   € à×!Ñ!Ð-Ð-Ð-Ü—G‘G×$Ñ$ T×%7Ñ%7Ó8‰	ˆˆcØ�&Š=Ü"×3Ñ3°DÓ9Ð9Ü�4—=‘=“?Ó#Ð#r"   c                óä  ‡— | j                   €J ‚t        | j                   d«      5 }|j                  «       j                  d«      }ddd«       | j                  syt
        j                  j                  | j                  «      j                  t
        j                  d«      }t        | j                  |«      Šd}dˆfd„}t        j                  ||«      j                  d«      S # 1 sw Y   Œ¡xY w)	z"Get the mangled css file contents.NÚrbzutf-8r"   Ú/zurl\('(.*)'\)|url\('(.*)'\)c                óð   •— | j                  «       }t        d„ | j                  «       D «       «      }t        |«      }|j	                  d«      s|j
                  r|S |j                  |t        ‰|«      «      S )z6Replace the matched relative url with the mangled url.c              3  ó&   K  — | ]	  }|sŒ|–— Œ y ­wr   r   )r   Úgs     r   r   z;ThemesHandler._get_css.<locals>.replacer.<locals>.<genexpr>\   s   è ø€ Ð3¡:˜a²œ¡:ùs   ‚Šr4   )ÚgroupÚnextÚgroupsr   Ú
startswithÚschemeÚreplaceÚujoin)Úmr8   ÚpartÚparsedÚbasepaths       €r   Úreplacerz(ThemesHandler._get_css.<locals>.replacerX   s^   ø€ à—G‘G“IˆEäÑ3 1§8¡8¤:Ó3Ó3ˆDô ˜d“^ˆFØ�‰˜sÔ# v§}¢}Ø�à—=‘= ¤u¨X°tÓ'<Ó=Ð=r"   )r?   r   Úreturnr   )r/   ÚopenÚreadÚdecoder   r%   r   Údirnamer=   Úsepr>   ÚreÚsubÚencode)r   ÚfidÚdataÚbasedirÚpatternrC   rB   s         @r   r(   zThemesHandler._get_cssG   sº   ø€ à×!Ñ!Ð-Ð-Ð-Ü�$×$Ñ$ dÔ+¨sØ—8‘8“:×$Ñ$ WÓ-ˆD÷ ,ð �ŠØä—'‘'—/‘/ $§)¡)Ó,×4Ñ4´R·V±V¸SÓAˆÜ˜Ÿ™¨'Ó2ˆð
 1ˆõ	>ô �v‰v�g˜x¨Ó.×5Ñ5°gÓ>Ð>÷7 ,Ð+ús   ¦ C&Ã&C/)NNNN)r   zstr | list[str]r   ú
str | Noner   úlist[str] | Noner   rQ   r   rR   r   r   rD   ÚNone)NN)r)   Ústrr*   ú
int | Noner+   rU   rD   z$bytes | Generator[bytes, None, None])rD   Úint)rD   Úbytes)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r'   r0   r(   r   r"   r   r   r      s’   „ Ù>ð
 (,Ø+/Ø!%Ø/3ð%àð%ð %ð%ð )ð	%ð
 ð%ð -ð%ð ð%ð 
ó%ð8 IMðØðØ#-ðØ;Eðà	-óó$ô?r"   r   )r[   Ú
__future__r   r%   rJ   Úcollections.abcr   r   Útypingr   Úurllib.parser   Újupyter_server.base.handlersr   Újupyter_server.utilsr	   r>   r   r   r"   r   Ú<module>rb      s3   ðÙ 1õ #ã 	Û 	Ý %Ý Ý Ý !å 8Ý 7ôS?�Oõ S?r"   