
    Mh	h                        d Z ddlZddlZddlmZmZmZmZ ddlm	Z	 ddl
mZmZ ddlZddlmZ ddlmZ ddlmZmZ dd	lmZmZmZmZmZ d
dddZd Z ej        d           ej        d           ej        d          dZd Z ed           G d d                      Z  ed           G d d                      Z! ed           G d d                      Z" ed           G d de"                      Z# ed           G d d                      Z$e G d  d!                      Z% G d" d#e          Z& G d$ d%e&          Z'dS )&z'Base classes for the extension manager.    N)	dataclassfieldfieldsreplace)Path)OptionalUnion)
translator)Enum)ConfigurableLoggingConfigurable)_AppHandler_ensure_optionsdisable_extensionenable_extensionget_app_infoz-alpha.z-beta.z-rc.)abrcc                 R    t          |          }|                                | d<   dS )z0Ensure that the app info has compat_errors fieldcompat_errorsN)r   _get_extension_compat)infoapp_optionshandlers      ]/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyterlab/extensions/manager.py_ensure_compat_errorsr      s+    +&&G#99;;D    z*(?P<name>.*) needs to be included in buildz+(?P<name>.*) needs to be removed from buildz:(?P<name>.*) changed from (?P<oldver>.*) to (?P<newver>.*)install	uninstallupdatec                 .   t          |           }|                    d          }g g g d}|D ]f}t                                          D ]J\  }}|                    |          }|r.||                             |                    d                     Kg|S )z8Get info about packages scheduled for (un)install/updateT)fastr   name)r   build_check_message_mapitemsmatchappendgroup)r   r   messagesstatusmsgkeypatternr)   s           r   _build_check_infor1   )   s    +&&G"""--H";;F 8 8(..00 	8 	8LCMM#&&E 8s""5;;v#6#6777	8 Mr   T)frozenc                      e Zd ZU dZeed<   eed<   eed<   eed<   dZeed<   dZeed	<   d
Z	e
e         ed<   dZeed<   dZeed<   d
Ze
e         ed<   d
Ze
e         ed<   dZeed<   dZeed<   dZeed<   d
Ze
e         ed<   d
Ze
e         ed<   d
Ze
e         ed<   d
Ze
e         ed<   d
Ze
e         ed<   d
Ze
e         ed<   d
S )ExtensionPackagea  Extension package entry.

    Attributes:
        name: Package name
        description: Package description
        homepage_url: Package home page
        pkg_type: Type of package - ["prebuilt", "source"]
        allowed: [optional] Whether this extension is allowed or not - default True
        approved: [optional] Whether the package is approved by your administrators - default False
        companion: [optional] Type of companion for the frontend extension - [None, "kernel", "server"]; default None
        core: [optional] Whether the package is a core package or not - default False
        enabled: [optional] Whether the package is enabled or not - default False
        install: [optional] Extension package installation instructions - default None
        installed: [optional] Whether the extension is currently installed - default None
        installed_version: [optional] Installed version - default ""
        latest_version: [optional] Latest available version - default ""
        status: [optional] Package status - ["ok", "warning", "error"]; default "ok"
        author: [optional] Package author - default None
        license: [optional] Package license - default None
        bug_tracker_url: [optional] Package bug tracker URL - default None
        documentation_url: [optional] Package documentation URL - default None
        package_manager_url: Package home page in the package manager - default None
        repository_url: [optional] Package code repository URL - default None
    r%   descriptionhomepage_urlpkg_typeTallowedFapprovedN	companioncoreenabledr    	installed installed_versionlatest_versionokr-   authorlicensebug_tracker_urldocumentation_urlpackage_manager_urlrepository_url)__name__
__module____qualname____doc__str__annotations__r8   boolr9   r:   r   r;   r<   r    dictr=   r?   r@   r-   rB   rC   rD   rE   rF   rG    r   r   r4   r4   7   so         2 IIIMMMGTHd#Ix}###D$GT"GXd^""" $Ix~$$$sNCFC FHSM   !GXc]!!!%)OXc])))'+x}+++)-#---$(NHSM(((((r   r4   c                   f    e Zd ZU dZeed<   dZee         ed<    ee	          Z
e	e         ed<   dS )ActionResultzAction result

    Attributes:
        status: Action status - ["ok", "warning", "error"]
        message: Action status explanation
        needs_restart: Required action follow-up - Valid follow-up are "frontend", "kernel" and "server"
    r-   Nmessagedefault_factoryneeds_restart)rH   rI   rJ   rK   rL   rM   rS   r   r   listrV   rP   r   r   rR   rR   h   s\           KKK!GXc]!!!$uT:::M49:::::r   rR   c                   P    e Zd ZU dZ ee          Zee         ed<   dZ	e
ed<   dS )PluginManagerOptionsal  Plugin manager options.

    Attributes:
        lock_all: Whether to lock (prevent enabling/disabling) all plugins.
        lock_rules: A list of plugins or extensions that cannot be toggled.
            If extension name is provided, all its plugins will be disabled.
            The plugin names need to follow colon-separated format of `extension:plugin`.
    rT   
lock_rulesFlock_allN)rH   rI   rJ   rK   r   	frozensetrZ   rL   rM   r[   rN   rP   r   r   rY   rY   y   sO           "'y!A!A!AJ	#AAAHdr   rY   c                       e Zd ZU dZ ee          Zee         ed<    ee          Z	ee         ed<   dZ
eed<    ee          Zeed<   dS )	ExtensionManagerOptionsa  Extension manager options.

    Attributes:
        allowed_extensions_uris: A list of comma-separated URIs to get the allowed extensions list
        blocked_extensions_uris: A list of comma-separated URIs to get the blocked extensions list
        listings_refresh_seconds: The interval delay in seconds to refresh the lists
        listings_tornado_options: The optional kwargs to use for the listings HTTP requests as described on https://www.tornadoweb.org/en/stable/httpclient.html#tornado.httpclient.HTTPRequest
    rT   allowed_extensions_urisblocked_extensions_urisi  listings_refresh_secondslistings_tornado_optionsN)rH   rI   rJ   rK   r   setr_   rL   rM   r`   ra   intrO   rb   rP   r   r   r^   r^      s           ).c(B(B(BSXBBB(-c(B(B(BSXBBB$+c+++%*U4%@%@%@d@@@@@r   r^   c                   F    e Zd ZU dZeed<   dZeed<   dZe	e         ed<   dS )ExtensionManagerMetadataa#  Extension manager metadata.

    Attributes:
        name: Extension manager name to be displayed
        can_install: Whether the extension manager can un-/install packages (default False)
        install_path: Installation path for the extensions (default None); e.g. environment path
    r%   Fcan_installNinstall_path)
rH   rI   rJ   rK   rL   rM   rg   rN   rh   r   rP   r   r   rf   rf      sK           IIIK"&L(3-&&&&&r   rf   c                   p    e Zd ZU dZ ee          Zeeeee	e
f                  f         ed<   dZeed<   dS )ExtensionsCachez{Extensions cache

    Attributes:
        cache: Extension list per page
        last_page: Last available page result
    rT   cache   	last_pageN)rH   rI   rJ   rK   r   rO   rk   rd   r   rL   r4   rM   rm   rP   r   r   rj   rj      sg           ?DeTX>Y>Y>YE4Xd3(8#89::;YYYIsr   rj   c            	       4    e Zd ZdZ eg ddd                              d          Z	 	 	 dd	ee         d
ee         dee	         ddf fdZ
defdZdee         dee         fdZdeeee         f         defdZdeeee         f         defdZ xZS )PluginManagera  Plugin manager enables or disables plugins unless locked.

    It can also disable/enable all plugins in an extension.

    Args:
        app_options: Application options
        ext_options: Plugin manager (subset of extension manager) options
        parent: Configurable parent

    Attributes:
        app_options: Application options
        options: Plugin manager options
    )
sys_prefixusersystemrp   z:Level at which to manage plugins: sys_prefix, user, system)valuesdefault_valuehelpT)configNr   ext_optionsparentreturnc                 x   t                                          |           | j                            d| j        j         d| j         d           t          |          | _        d t          t                    D             fd|pi                                 D             }t          di || _        d S )N)rx   zPlugins in z will managed on the z levelc                     h | ]	}|j         
S rP   r%   ).0fs     r   	<setcomp>z)PluginManager.__init__.<locals>.<setcomp>   s    MMM1MMMr   c                 $    i | ]\  }}|v 	||S rP   rP   )r}   optionvalueplugin_options_fields      r   
<dictcomp>z*PluginManager.__init__.<locals>.<dictcomp>   s5     
 
 
--- E---r   rP   )super__init__logdebug	__class__rH   levelr   r   r   rY   r(   options)selfr   rw   rx   plugin_optionsr   r   s        @r   r   zPluginManager.__init__   s     	'''Z$.1ZZ
ZZZ	
 	
 	
 +;77MM7K0L0LMMM
 
 
 
"-"3!:!:!<!<
 
 

 ,==n==r   c                 R   K   t          | j        j                  | j        j        dS )z8Get information about locks on plugin enabling/disabling)	lockRules	allLocked)rW   r   rZ   r[   r   s    r   plugin_lockszPluginManager.plugin_locks   s/       dl566.
 
 	
r   plugins_or_extensionsc                    | j         j        rt          |          S t                      }d | j         j        D             }|D ]C}d|v r$|| j         j        v r|                    |           *||v r|                    |           D|S )z9Find a subset of plugins (or extensions) which are lockedc                 D    h | ]}|                     d           d         S ):r   )split)r}   plugins     r   r   z-PluginManager._find_locked.<locals>.<setcomp>   s6     *
 *
 *
%+FLLa *
 *
 *
r   r   )r   r[   rc   rZ   add)r   r   locked_subsetextensions_with_locked_pluginsr   s        r   _find_lockedzPluginManager._find_locked   s    <  	.,---*
 *
/3|/F*
 *
 *
& , 	* 	*Ff}}T\444!%%f---999 !!&)))r   pluginsc                   K   t          |t                    r|n|g}|                     |          }t          j        d          }|r:t          d|                    d          d                    |          z             S 	 |D ]}t          || j	        | j
                   t          ddg	          S # t          $ r(}t          dt          |                    cY d
}~S d
}~ww xY w)zDisable a set of plugins (or an extension).

        Args:
            plugins: The list of plugins to disable
        Returns:
            The action result
        
jupyterlaberrorz=The following plugins cannot be disabled as they are locked: , r-   rS   r   r   rA   frontendr-   rV   N)
isinstancerW   r   r
   loadrR   gettextjoinr   r   r   	Exceptionreprr   r   lockedtransr   errs         r   disablezPluginManager.disable   s$      (66E''WI""7++-- 	S  ))F##$   	C! Z Z!&d6FdjYYYYYtJ<HHHH 	C 	C 	CwS		BBBBBBBBB	C   2B6 6
C( C#C(#C(c                   K   t          |t                    r|n|g}|                     |          }t          j        d          }|r:t          d|                    d          d                    |          z             S 	 |D ]}t          || j	        | j
                   t          ddg	          S # t          $ r(}t          dt          |                    cY d
}~S d
}~ww xY w)zEnable a set of plugins (or an extension).

        Args:
            plugins: The list of plugins to enable
        Returns:
            The action result
        r   r   z<The following plugins cannot be enabled as they are locked: r   r   r   rA   r   r   N)r   rW   r   r
   r   rR   r   r   r   r   r   r   r   r   s         r   enablezPluginManager.enable  s$      (66E''WI""7++-- 	R  ))F##$   	C! Y Y T5ETZXXXXXtJ<HHHH 	C 	C 	CwS		BBBBBBBBB	Cr   NNN)rH   rI   rJ   rK   r   tagr   r   rO   r   r   r   rW   rL   r\   r   r	   rR   r   r   __classcell__r   s   @r   ro   ro      sx         D///"I   
cc	 
 '+&*)-	> >d^> d^> &	>
 
> > > > > >&
D 
 
 
 
$s) 	#    &CU3S	>%: C| C C C C4CE#tCy.$9 Cl C C C C C C C Cr   ro   c                   L    e Zd ZdZ	 	 	 d"dee         dee         dee         ddf fdZd Ze	de
fd	            Zd
edee         fdZdedededeeeef         ee         f         fdZd#d
edee         defdZd
edefdZededefd            Zd
edefdZ	 d$dee         dededeee         ee         f         fdZdee         dededdfdZd%dZ	 d&deeef         fdZdedee         fdZdee         fdZdedefd Z	 d$dee         dededdfd!Z  xZ!S )'ExtensionManagera  Base abstract extension manager.

    Note:
        Any concrete implementation will need to implement the five
        following abstract methods:
        - :ref:`metadata`
        - :ref:`get_latest_version`
        - :ref:`list_packages`
        - :ref:`install`
        - :ref:`uninstall`

        It could be interesting to override the :ref:`get_normalized_name`
        method too.

    Args:
        app_options: Application options
        ext_options: Extension manager options
        parent: Configurable parent

    Attributes:
        log: Logger
        app_dir: Application directory
        core_config: Core configuration
        app_options: Application options
        options: Extension manager options
    Nr   rw   rx   ry   c                    t                                          |||           | j        j        | _        t          | j        j                  | _        | j        j        | _        t          di |pi | _	        i | _
        d | _        d| _        d | _        t          | j	        j                  st          | j	        j                  rt          | j	        j                  dk    | _        | j        s7t          | j	        j                  dk    r| j                            d           t$          j                            | j        | j	        j        dz  d          | _        | j                                         d S d S )	N)r   rw   rx   Tr   zqYou have define simultaneously blocked and allowed extensions listings. The allowed listing will take precedence.i  g?)callback_timejitterrP   )r   r   r   loggerr   r   app_dircore_configr^   r   _extensions_cache_listings_cache_listings_block_mode_listing_fetchlenr_   r`   warningtornadoioloopPeriodicCallback_fetch_listingsra   start)r   r   rw   rx   r   s       r   r   zExtensionManager.__init__H  su    	[kRXYYY#*D,455+7.EE+2CEEGI/3$(!IMt|344 	(DL<`8a8a 	((+DL,P(Q(QUV(VD%, T\5Y1Z1Z]^1^1^   H   #*."A"A$"lCdJ #B # #D
 %%'''''	( 	(r   c                 J    | j         | j                                          d S d S N)r   stopr   s    r   __del__zExtensionManager.__del__f  s.    *$$&&&&& +*r   c                     t                      )zExtension manager metadata.NotImplementedErrorr   s    r   metadatazExtensionManager.metadataj  s     "###r   	extensionc                 "   K   t                      )zReturn the latest available version for a given extension.

        Args:
            pkg: The extension name
        Returns:
            The latest available version
        r   r   r   s     r   get_latest_versionz#ExtensionManager.get_latest_versiono  s       "###r   querypageper_pagec                 "   K   t                      )ab  List the available extensions.

        Args:
            query: The search extension query
            page: The result page
            per_page: The number of results per page
        Returns:
            The available extensions in a mapping {name: metadata}
            The results last page; None if the manager does not support pagination
        r   r   r   r   r   s       r   list_packageszExtensionManager.list_packagesy         "###r   versionc                 "   K   t                      )a  Install the required extension.

        Note:
            If the user must be notified with a message (like asking to restart the
            server), the result should be
            {"status": "warning", "message": "<explanation for the user>"}

        Args:
            extension: The extension name
            version: The version to install; default None (i.e. the latest possible)
        Returns:
            The action result
        r   )r   r   r   s      r   r    zExtensionManager.install  s       "###r   c                 "   K   t                      )aj  Uninstall the required extension.

        Note:
            If the user must be notified with a message (like asking to restart the
            server), the result should be
            {"status": "warning", "message": "<explanation for the user>"}

        Args:
            extension: The extension name
        Returns:
            The action result
        r   r   s     r   r!   zExtensionManager.uninstall  r   r   c           	      d    t          j        dd t          j        dd|           d                   S )a;  Convert a Python version to Semver version.

        It:

        - drops ``.devN`` and ``.postN``
        - converts ``aN``, ``bN`` and ``rcN`` to ``-alpha.N``, ``-beta.N``, ``-rc.N`` respectively

        Args:
            version: Version to convert
        Returns
            Semver compatible version
        z(a|b|rc)(\d+)$c                 p    t           |                     d                    |                     d           S )Nrl      )PYTHON_TO_SEMVERr+   )ms    r   <lambda>z5ExtensionManager.get_semver_version.<locals>.<lambda>  s+    )!''!**5CqwwqzzCC r   z\.(dev|post)\d+r>   r   )resubsubn)r   s    r   get_semver_versionz#ExtensionManager.get_semver_version  s8     vCCG&G44Q7
 
 	
r   c                     |j         S )a  Normalize extension name.

        Extension have multiple parts, npm package, Python package,...
        Sub-classes may override this method to ensure the name of
        an extension from the service provider and the local installed
        listing is matching.

        Args:
            extension: The extension metadata
        Returns:
            The normalized name
        r|   r   s     r   get_normalized_namez$ExtensionManager.get_normalized_name  s     ~r   rl      c                   K   || j         vs|| j         |         j        vr|                     |||           d{V  | j        &| j        | j                                         d{V  | j         |         j        |         }|i }t          |                                          }|>| j        6t          | j                  }g }| j        r|	                                D ]w\  }}||vr%|
                    t          |d                     .|j        rB| j                            d| d           |
                    t          |d                     xn|	                                D ]w\  }}||v r%|
                    t          |d                     .|j        rB| j                            d| d           |
                    t          |d                     x|| j         |         j        fS )aL  List extensions for a given ``query`` search term.

        This will return the extensions installed (if ``query`` is None) or
        available if allowed by the listing settings.

        Args:
            query: [optional] Query search term.

        Returns:
            The extensions
            Last page of results
        NT)r8   zBlocked extension 'z' is installed.FzNot allowed extension ')r   rk   refreshr   r   callbackrW   rs   r   r(   r*   r   r?   r   r   rm   )	r   r   r   r   rk   
extensionslistingr%   exts	            r   list_extensionsz ExtensionManager.list_extensions  sE      ...$d>TUZ>[>a2a2a,,udH555555555 'D,?,K%..000000000&u-3D9=E%,,..))
!5!A4/00GJ( G!& G GID#7**"))'#t*D*D*DEEEE. G(()Tt)T)T)TUUU"))'#u*E*E*EFFFG "' G GID#w"))'#t*D*D*DEEEE. G(()X4)X)X)XYYY"))'#u*E*E*EFFF41%8BBBr   c                    K   || j         v rd| j         |         j        |<   |                     |||           d{V  dS )zRefresh the list of extensions.N)r   rk   _update_extensions_listr   s       r   r   zExtensionManager.refresh  sY      D***8<D"5)/5**5$AAAAAAAAAAAr   c                 8  K   g }t           j                                        }| j        rt	          | j        j                  r| j                            d| j        j                    | j        j        D ]b} |j	        |fi | j        j
         d{V }t          j        |j                  }|                    |                    dg                      cnt	          | j        j                  r| j                            d| j        j                    | j        j        D ]b} |j	        |fi | j        j
         d{V }t          j        |j                  }|                    |                    dg                      cd |D             | _        dS )z-Fetch the listings for the extension manager.z!Fetching blocked extensions from Nblocked_extensionsz!Fetching allowed extensions from allowed_extensionsc                      i | ]}|d          |S r|   rP   )r}   rs     r   r   z4ExtensionManager._fetch_listings.<locals>.<dictcomp>  s    <<<&	1<<<r   )r   
httpclientAsyncHTTPClientr   r   r   r`   r   r   fetchrb   jsonloadsbodyextendgetr_   r   )r   rulesclientblocked_extensions_urir   jallowed_extensions_uris          r   r   z ExtensionManager._fetch_listings  s     #3355$ 	>4<788 
B^8\^^   /3l.R B B**fl. ,?       A 
16**ALL';R!@!@AAAA566 
	>HMMZDL4XZZ   +/,*N > >&&&,* l;        Jqv&&QUU#7<<====<<e<<<r   Tc                 \  K   | j         }t          |          }t          |          }t          ||           i }|d                                         D ]\  }}d}|}	|d                             |d          rd}|                     |          }
t          d)i d|
d|	                    dd	          d
|                    dd	          d||d         vdddt          	                    |d                   dddt          	                    |d                   d|d|                    di           ddd| 
                    |          d|                    di                               d|                    d                    d|                    d          d|                    di                               d          d|                    di                               d|                    d                    }|r/t          ||                     |j                   d{V            }|||
<   |d!                                         D ]\  }}||d"         v rd}|d                             |d          rd}n|                                D ]}||v rd#}	|                     |          }
t          |
|                    dd	          |d         ||d         vdt          	                    |d                   dt          	                    |d                   |d$| 
                    |          |                    di                               d|                    d                    |                    d          |                    di                               d          |                    di                               d|                    d                    %          }|r/t          ||                     |j                   d{V            }|||
<   |d&         D ]f}|                     |          }|K|                     |          }
t          |
|                    dd	          |                    d'd	          dddt          	                    |d                   t          	                    |d                   d#d|                    di                               d|                    d                    |                    d          |                    di                               d          |                    di                               d|                    d                    (          }|||
<   h|S )*zGet the installed extensions.

        Args:
            get_latest_version: Whether to fetch the latest extension version or not.
        Returns:
            The installed extensions as a mapping {name: metadata}
        )r   federated_extensionsrA   r   Nr   r%   r5   r>   r6   urlr<   disabledr;   Fr@   r   r=   Tr?   r-   r    r7   prebuiltr:   rB   rC   rD   bugsrG   
repository)r@   r   shadowed_extsr   source)r%   r5   r6   r<   r;   r@   r=   r?   r-   r7   r:   rB   rC   rD   rG   r!   homepage)r%   r5   r6   r=   r<   r;   r@   r?   r-   r7   rB   rC   rD   rG   rP   )r   r   r1   r   r(   r  _normalize_namer4   r   r   _get_companionr   r   r%   rs   _get_scheduled_uninstall_info)r   r   r   r   build_check_infor   r%   datar-   pkg_infonormalized_namepkgpackagess                r   _get_installed_extensionsz*ExtensionManager._get_installed_extensions  s      &444,[99dK000
 56<<>> 	. 	.JD$FHO$((t44 ! "22488O"   $_$LL;;; "XXeR000 T*%555	
 U  0BB4	?SSS $ #3"E"Ed9o"V"V"V v B/// $ --d333 xx"--11&$((8:L:LMMM +++ !% 4 4 8 8 ? ? ?   $xxb99==eTXXlE[E[\\\!C& " [c8O8OPSPX8Y8Y2Y2Y2Y2Y2Y2YZZZ*-J''|,2244  	.  	.JD$tO,,,FO$((t44 +  0 7 7 9 9 + +Hx''!*"22488O"$ HH]B77!%[T*%55/BB4	?SS"2"E"Ed9o"V"V!--d33xx"--11&$((8:L:LMM++ $ 4 4 8 8 ? ?#xxb99==eTXXlE[E[\\  C" " [c8O8OPSPX8Y8Y2Y2Y2Y2Y2Y2YZZZ*-J''$[1 	2 	2D55d;;D"&"6"6t"<"<&( $ ; ;!%*b!9!9#!#3#F#FtI#W#W&6&I&I$y/&Z&Z$'88Hb1155fdhhx>P>PQQ HHY//$(HHVR$8$8$<$<U$C$C#'88L"#=#=#A#A%R^I_I_#`#`    /2
?+r   r  c                 h    d }d|d         v r%d|d         d         v rd}nd|d         d         v rd}|S )N	discoveryr   serverkernelrP   )r   r  r:   s      r   r  zExtensionManager._get_companion  sS    	$|,,,4-k:::$		T,/<<<$	r   c                     | j         dz  dz  |z  dz  }|                                rB|                                5 }t          j        |          cddd           S # 1 swxY w Y   dS dS )zDGet information about a package that is scheduled for uninstallationstagingnode_moduleszpackage.jsonN)r   existsopenr   r   )r   r%   targetfids       r   r  z.ExtensionManager._get_scheduled_uninstall_info  s    	)N:TANR==?? 	 &#y~~& & & & & & & & & & & & & & & & & & 4s   AA!$A!r%   c                     |S )zNormalize extension name; by default does nothing.

        Args:
            name: Extension name
        Returns:
            Normalized name
        rP   )r   r%   s     r   r  z ExtensionManager._normalize_name  s	     r   c                 (  K   d}|!|                      |||           d{V \  }}n|                                  d{V }|| j        v r+|| j        |         j        |<   |pd| j        |         _        dS t          ||i|pd          | j        |<   dS )zUpdate the list of extensionsNrl   )r   r  r   rk   rm   rj   )r   r   r   r   rm   r   s         r   r   z(ExtensionManager._update_extensions_list  s       	*.*<*<UD(*S*S$S$S$S$S$S$S!J		  $==????????JD***8BD"5)/56?n1D"5)333,;T:<NPYP^]^,_,_D"5)))r   r   r   )Nrl   r   )ry   N)T)"rH   rI   rJ   rK   r   rO   r   r   r   propertyrf   r   rL   r   rd   tupler4   r   rR   r    r!   staticmethodr   r   rW   r   r   r   r  r  r  r  r   r   r   s   @r   r   r   ,  s{        : '+&*)-	( (d^( d^( &	(
 
( ( ( ( ( (<' ' ' $2 $ $ $ X$$# $(3- $ $ $ $$$ #$/2$	tC))*HSM9	:$ $ $ $$ $s $Xc] $l $ $ $ $ $ $ $ $ $ $ 
C 
C 
 
 
 \
&-= #      KM,C ,Cc],C14,CDG,C	t$%x}4	5,C ,C ,C ,C\B8C= B Bs Bt B B B B= = = => "&h h	c##	$h h h hT4 HSM    Xd^    C C     KM` `c]`14`DG`	` ` ` ` ` ` ` `r   r   )(rK   r   r   dataclassesr   r   r   r   pathlibr   typingr   r	   r   #jupyterlab_server.translation_utilsr
   	traitletsr   traitlets.configr   r   jupyterlab.commandsr   r   r   r   r   r   r   compiler'   r1   r4   rR   rY   r^   rf   rj   ro   r   rP   r   r   <module>r5     st   - -
  				 9 9 9 9 9 9 9 9 9 9 9 9       " " " " " " " "  : : : : : :       > > > > > > > >              #@@ < < < rzGHHJKKbjVWW    $-) -) -) -) -) -) -) -)` $; ; ; ; ; ; ; ;  $        $A A A A A2 A A A  $' ' ' ' ' ' ' ' 	 	 	 	 	 	 	 	tC tC tC tC tC' tC tC tCnF` F` F` F` F`} F` F` F` F` F`r   