
    lKjj                     4   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
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j4                  d       ej4                  d       ej4                  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$y)%z'Base classes for the extension manager.    N)	dataclassfieldfieldsreplace)Path)
translator)Enum)ConfigurableLoggingConfigurable)_AppHandler_ensure_optionsdisable_extensionenable_extensionget_app_infoz-alpha.z-beta.z-rc.)abrcc                 @    t        |      }|j                         | d<   y)z0Ensure that the app info has compat_errors fieldcompat_errorsN)r   _get_extension_compat)infoapp_optionshandlers      n/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/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        |       }|j                  d      }g g g d}|D ]U  }t        j                         D ]<  \  }}|j	                  |      }|s||   j                  |j                  d             > W |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_infor/   (   s    +&G"""-H";F(..0LCMM#&Es""5;;v#67 1 
 Mr   T)frozenc                   P   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d
z  ed<   dZ
eed<   dZeed<   d
Zed
z  ed<   d
Zed
z  ed<   dZeed<   dZeed<   dZeed<   d
Zed
z  ed<   d
Zed
z  ed<   d
Zed
z  ed<   d
Zed
z  ed<   d
Zed
z  ed<   d
Zed
z  ed<   y
)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__r6   boolr7   r8   r9   r:   r   dictr;   r=   r>   r+   r@   rA   rB   rC   rD   rE    r   r   r2   r2   6   s    2 IMGTHd IsTz D$GTGTD[!Itd{!sNCFCFC$JGS4Z"&OS4Z&$(sTz(&*t*!%NC$J%r   r2   c                   R    e Zd ZU dZeed<   dZedz  ed<    ee      Z	ee   ed<   y)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)
rF   rG   rH   rI   rJ   rK   rQ   r   listrT   rN   r   r   rP   rP   g   s/     KGS4Z$T:M49:r   rP   c                   B    e Zd ZU dZ ee      Zee   ed<   dZ	e
ed<   y)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`.
    rR   
lock_rulesFlock_allN)rF   rG   rH   rI   r   	frozensetrX   rJ   rK   rY   rL   rN   r   r   rW   rW   x   s&     "'y!AJ	#AHdr   rW   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<   y)	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
    rR   allowed_extensions_urisblocked_extensions_urisi  listings_refresh_secondslistings_tornado_optionsN)rF   rG   rH   rI   r   setr]   rJ   rK   r^   r_   intrM   r`   rN   r   r   r\   r\      sL     ).c(BSXB(-c(BSXB$+c+%*4%@d@r   r\   c                   >    e Zd ZU dZeed<   dZeed<   dZedz  ed<   y)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)	rF   rG   rH   rI   rJ   rK   re   rL   rf   rN   r   r   rd   rd      s&     IK#L#*#r   rd   c                   V    e Zd ZU dZ ee      Zeeeee	f   dz  f   e
d<   dZee
d<   y)ExtensionsCachez{Extensions cache

    Attributes:
        cache: Extension list per page
        last_page: Last available page result
    rR   Ncache   	last_page)rF   rG   rH   rI   r   rM   ri   rb   rJ   r2   rK   rk   rN   r   r   rh   rh      s>     <AQU;VE4T#//04778VIsr   rh   c            	            e Zd ZdZ eg ddd      j                  d      Z	 	 	 dd	edz  d
edz  dedz  ddf fdZ	defdZ
dee   dee   fdZdeee   z  defdZdeee   z  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systemrn   z:Level at which to manage plugins: sys_prefix, user, system)valuesdefault_valuehelpT)configNr   ext_optionsparentreturnc                    t         	|   |       | j                  j                  d| j                  j
                   d| j                   d       t        |      | _        t        t              D ch c]  }|j                   }}|xs i j                         D ci c]  \  }}||v r|| }}}t        di || _        y c c}w c c}}w )N)rv   zPlugins in z will managed on the z levelrN   )super__init__logdebug	__class__rF   levelr   r   r   rW   r#   r&   options)
selfr   ru   rv   fplugin_options_fieldoptionvalueplugin_optionsr}   s
            r   rz   zPluginManager.__init__   s     	'$..1122G

|SYZ	
 +;7067K0LM0L10LM #."3!:!:!<
!<-- EM!< 	 

 ,=n=  N
s   3CC	c                 v   K   t        | j                  j                        | j                  j                  dS w)z8Get information about locks on plugin enabling/disabling)	lockRules	allLocked)rU   r   rX   rY   r   s    r   plugin_lockszPluginManager.plugin_locks   s1      dll556..
 	
s   79plugins_or_extensionsc                 h   | j                   j                  rt        |      S t               }| j                   j                  D ch c]  }|j	                  d      d    }}|D ]G  }d|v r+|| j                   j                  v s |j                  |       2||v s7|j                  |       I |S c c}w )z9Find a subset of plugins (or extensions) which are locked:r   )r   rY   ra   rX   splitadd)r   r   locked_subsetpluginextensions_with_locked_pluginss        r   _find_lockedzPluginManager._find_locked   s    <<  ,--/3||/F/F*
/FVFLLa /F 	' *
 ,Ff}T\\444!%%f-99 !!&) , *
s   B/pluginsc                   K   t        |t              r|n|g}| j                  |      }t        j                  d      }|r.t        d|j                  d      dj                  |      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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+   rQ   r   r~   r?   frontendr+   rT   N)
isinstancerU   r   r   loadrP   gettextjoinr   r   r~   	Exceptionreprr   r   lockedtransr   errs         r   disablezPluginManager.disable   s      (6'WI""7+-S ))F#$ 	C!!&d6F6FdjjY "tJ<HH 	CwS	BB	C6   A,C/6B& %C&	C/C
CC
CCc                   K   t        |t              r|n|g}| j                  |      }t        j                  d      }|r.t        d|j                  d      dj                  |      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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   r?   r   r   N)r   rU   r   r   r   rP   r   r   r   r   r~   r   r   r   s         r   enablezPluginManager.enable  s      (6'WI""7+-R ))F#$ 	C! T5E5ETZZX "tJ<HH 	CwS	BB	Cr   NNN)rF   rG   rH   rI   r	   tagr~   rM   r
   rz   r   rU   rJ   rZ   r   rP   r   r   __classcell__r}   s   @r   rm   rm      s     /"I 
cc	 
 $(#'&*	>D[> D[> t#	>
 
>&
D 
$s) 	# &CS49_ C C4CC$s)O C Cr   rm   c                       e Zd ZdZ	 	 	 d"dedz  dedz  dedz  ddf fdZd Zede	fd	       Z
d
ededz  fdZdedededeeeef   edz  f   fdZd#d
ededz  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dz  dededeee   edz  f   fdZdedz  dededdfdZd%dZdedefdZd#dededz  defdZ	 d&deeef   fdZdededz  fdZdedz  fdZ dedefd Z!	 d$dedz  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   ru   rv   rw   c                 `   t         |   |||       | j                  j                  | _        t        | j                  j                        | _        | j                  j                  | _        t        di |xs i | _	        i | _
        d | _        d| _        d | _        t        | j                  j                        st        | j                  j                         rt        | j                  j                        dk(  | _        | j                  s=t        | j                  j                         dkD  r| j                  j#                  d       t$        j&                  j)                  | j*                  | j                  j,                  dz  d      | _        | j                  j/                          y y )	N)r   ru   rv   Tr   zqYou have define simultaneously blocked and allowed extensions listings. The allowed listing will take precedence.i  g?)callback_timejitterrN   )ry   rz   r   loggerr{   r   app_dircore_configr\   r   _extensions_cache_listings_cache_listings_block_mode_listing_fetchlenr]   r^   warningtornadoioloopPeriodicCallback_fetch_listingsr_   start)r   r   ru   rv   r}   s       r   rz   zExtensionManager.__init__G  s\    	[kRXY##**D,,445++77.E+2CEDF,0$(!FJt||334DLL<`<`8a(+DLL,P,P(QUV(VD%,,T\\5Y5Y1Z]^1^   H #*.."A"A$$"llCCdJ #B #D
 %%' 9br   c                 R    | j                   | j                   j                          y y N)r   stopr   s    r   __del__zExtensionManager.__del__e  s%    *$$& +r   c                     t         )zExtension manager metadata.NotImplementedErrorr   s    r   metadatazExtensionManager.metadatai  s
     "!r   	extensionc                    K   t         w)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_versionn  s      "!   	querypageper_pagec                    K   t         w)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_packagesx        "!r   versionc                    K   t         w)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         w)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           	      b    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                 X    t         | j                  d          | j                  d       S )Nrj      )PYTHON_TO_SEMVERr)   )ms    r   <lambda>z5ExtensionManager.get_semver_version.<locals>.<lambda>  s$    )!''!*56qwwqzlCr   z\.(dev|post)\d+r<   r   )resubsubn)r   s    r   get_semver_versionz#ExtensionManager.get_semver_version  s1     vvCGG&G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   c                   K   || j                   vs|| j                   |   j                  vr| j                  |||       d{    | j                  .| j                  "| j                  j                          d{    | j                   |   j                  |   }|i }t        |j                               }|| j                  t        | j                        }g }| j                  rw|j                         D ]c  \  }}||vr|j                  |       |j                  s)| j                  j                  d| d       |j                  t        |d             e nv|j                         D ]c  \  }}||v r|j                  |       |j                  s)| j                  j                  d| d       |j                  t        |d             e || j                   |   j                  fS 7 7 |w)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
        NzBlocked extension 'z' is installed.F)r6   zNot allowed extension ')r   ri   refreshr   r   callbackrU   rq   r   r&   r(   r=   r{   r   r   rk   )	r   r   r   r   ri   
extensionslistingr#   exts	            r   list_extensionsz ExtensionManager.list_extensions  s     ...$d>T>TUZ>[>a>a2a,,udH555 'D,?,?,K%%..000&&u-33D9=E%,,.)
!5!5!A4//0GJ((!&ID#7*"))#...((+>tfO)TU"))'#u*EF "/ "'ID#w"))#...((+B4&)XY"))'#u*EF "/ 411%8BBBB9 6 1s3   A G;G59G;<G8=B(G;&A6G;AG;8G;c                    K   || j                   v rd| j                   |   j                  |<   | j                  |||       d{    y7 w)zRefresh the list of extensions.N)r   ri   _update_extensions_listr   s       r   r   zExtensionManager.refresh  sG     D***8<D""5)//5**5$AAAs   AAA	Ac                   K   g }t         j                  j                         }| j                  rt	        | j
                  j                        r| j                  j                  d| j
                  j                          | j
                  j                  D ]q  } |j                  |fi | j
                  j                   d{   }t        j                  |j                        }|j                  |j                  dg              s nt	        | j
                  j                         r| j                  j                  d| j
                  j                           | j
                  j                   D ]q  } |j                  |fi | j
                  j                   d{   }t        j                  |j                        }|j                  |j                  dg              s |D ci c]  }|d   |
 c}| _        y7 =7 cc c}w w)z-Fetch the listings for the extension manager.z!Fetching blocked extensions from Nblocked_extensionsz!Fetching allowed extensions from allowed_extensionsr#   )r   
httpclientAsyncHTTPClientr   r   r   r^   r{   r   fetchr`   jsonloadsbodyextendgetr]   r   )r   rulesclientblocked_extensions_urirjallowed_extensions_uris          r   r   z ExtensionManager._fetch_listings  s    ##335$$4<<77878\8\7]^ /3ll.R.R**fll.,,?? A 

166*ALL';R!@A /S 556HHMM3DLL4X4X3YZ +/,,*N*N&&&,,*ll;;  JJqvv&QUU#7<= +O 7<<e&	1e<%  =s8   CHHCH H!A
H+H8
HHHr#   c                   K   | j                   y| j                  | j                          d{    | j                  |      }| j                  D ch c]  }| j                  |       }}| j                  r||vS ||v S 7 Qc c}w w)zDReturn whether the listing policy permits installing this extension.NT)r   r   r   _normalize_namer   )r   r#   
normalizedknormalized_caches        r   _is_allowed_by_listingz'ExtensionManager._is_allowed_by_listing  s     &'&&((())$/
=A=Q=QR=QD003=QR$$%555!111 )Rs!   -BB#BB+BB_versionc                 @   K   | j                  |       d {   S 7 wr   )r  )r   r#   r  s      r   is_install_allowedz#ExtensionManager.is_install_allowed(  s     006666s   c                 d	  K   | j                   }t        |      }t        |      }t        ||       i }|d   j	                         D ]  \  }}d}|}	|d   j                  |d      rd}| j                  |      }
t        d)i d|
d|	j                  dd	      d
|j                  dd	      d||d   vdddt        j                  |d         dddt        j                  |d         d|d|j                  di       ddd| j                  |      d|j                  di       j                  d|j                  d            d|j                  d      d|j                  di       j                  d      d|j                  di       j                  d|j                  d            }|r.t        || j                  |j                         d{          }|||
<    |d!   j	                         D ]  \  }}||d"   v rd}|d   j                  |d      rd}n|j                         D ]	  }||v sd#} | j                  |      }
t        |
|j                  dd	      |d   ||d   vdt        j                  |d         dt        j                  |d         |d$| j                  |      |j                  di       j                  d|j                  d            |j                  d      |j                  di       j                  d      |j                  di       j                  d|j                  d            %      }|r.t        || j                  |j                         d{          }|||
<    |d&   D ]  }| j                  |      }|| j                  |      }
t        |
|j                  dd	      |j                  d'd	      dddt        j                  |d         t        j                  |d         d#d|j                  di       j                  d|j                  d            |j                  d      |j                  di       j                  d      |j                  di       j                  d|j                  d            (      }|||
<   ! |S 7 7 >w)*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_extensionsr?   r   Nr   r#   r3   r<   r4   urlr:   disabledr9   Fr>   r   r;   Tr=   r+   r   r5   prebuiltr8   r@   rA   rB   bugsrE   
repository)r>   r   shadowed_extsr   source)r#   r3   r4   r:   r9   r>   r;   r=   r+   r5   r8   r@   rA   rB   rE   r   homepage)r#   r3   r4   r;   r:   r9   r>   r=   r+   r5   r@   rA   rB   rE   rN   )r   r   r/   r   r&   r   r   r2   r   r   _get_companionr   r   r#   rq   _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,[9dK0
 56<<>JD$FHO$((t4 "2248O" $$LL; "XXeR0 T*%55	
   0BB4	?S  #3"E"Ed9o"V  B/ $ --d3 xx"-11&$((8:LM + !% 4 8 8 ?   $xxb9==eTXXlE[\!C& "c8O8OPSPXPX8Y2YZ*-J'; ?> |,224JD$tO,,FO$((t4  0 7 7 9Hx'!* !: #2248O"$ HH]B7!%[T*%55/BB4	?S"2"E"Ed9o"V!--d3xx"-11&$((8:LM+ $ 4 8 8 ?#xxb9==eTXXlE[\C" "c8O8OPSPXPX8Y2YZ*-J'A 5D %[1D55d;D"&"6"6t"<&( $ ;!%*b!9#!#3#F#FtI#W&6&I&I$y/&Z$'88Hb155fdhhx>PQ HHY/$(HHVR$8$<$<U$C#'88L"#=#A#A%R^I_#`  /2
?+) 2, y 3ZF 3Zs3   GR0R*A$R0;D4R0/R-0-R0DR0-R0r  c                 L    d }d|d   v rd|d   d   v rd}|S d|d   d   v rd}|S )N	discoveryr   serverkernelrN   )r   r  r8   s      r   r  zExtensionManager._get_companion  sR    	$|,,4-k::$	  T,/<<$	r   c                     | j                   dz  dz  |z  dz  }|j                         r/|j                         5 }t        j                  |      cddd       S y# 1 sw Y   yxY w)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  sR    	)N:TANR==?#yy~   s   AA"c                     |S )zNormalize extension name; by default does nothing.

        Args:
            name: Extension name
        Returns:
            Normalized name
        rN   )r   r#   s     r   r   z ExtensionManager._normalize_name  s	     r   c                 N  K   d}|| j                  |||       d{   \  }}n| j                          d{   }|| j                  v r5|| j                  |   j                  |<   |xs d| j                  |   _        yt        ||i|xs d      | j                  |<   y7 7 iw)zUpdate the list of extensionsNrj   )r   r  r   ri   rk   rh   )r   r   r   r   rk   r   s         r   r   z(ExtensionManager._update_extensions_list  s      	*.*<*<UD(*S$S!J	  $==??JD***8BD""5)//56?n1D""5)3,;T:<NPYP^]^,_D""5) %T @s    B%B!B%B#A(B%#B%r   r   )Nrj      )rw   N)T)$rF   rG   rH   rI   rM   r
   rz   r   propertyrd   r   rJ   r   rb   tupler2   r   rP   r   r   staticmethodr   r   rU   r   r   r   rL   r  r  r  r  r  r   r   r   r   s   @r   r   r   +  sb   : $(#'&*	(D[( D[( t#	(
 
(<' "2 " ""# "#* """ #"/2"	tC))*C$J6	7""s "S4Z "< " " " " 
C 
C 
 
&-= #   HJ,C4Z,C.1,CAD,C	t$%sTz1	2,C\B3: BS BC BD B=<2 2 27S 7C$J 7RV 7 "&h	c##	$hT4 C$J TD[ C C  HJ`4Z`.1`AD`	`r   r   )%rI   r   r   dataclassesr   r   r   r   pathlibr   r   #jupyterlab_server.translation_utilsr   	traitletsr	   traitlets.configr
   r   jupyterlab.commandsr   r   r   r   r   r   r   compiler%   r/   r2   rP   rW   r\   rd   rh   rm   r   rN   r   r   <module>r3     sV   -
  	 9 9   :  >  #@ < rzzGHJKbjjVW $-& -& -&` $; ; ;  $   $A2 A A  $$ $ $ 	 	 	tC' tCnV`} V`r   