
    Gh	h                     &   S r SSKrSSKrSSKJrJrJrJr  SSKJ	r	  SSK
JrJr  SSKrSSKJr  SSKJr  SSKJrJr  SS	KJrJrJrJrJr  S
SSS.rS r\R:                  " S5      \R:                  " S5      \R:                  " S5      S.rS r\" SS9 " S S5      5       r \" SS9 " S S5      5       r!\" SS9 " S S5      5       r"\" SS9 " S S\"5      5       r#\" SS9 " S S5      5       r$\ " S  S!5      5       r% " S" S#\5      r& " S$ S%\&5      r'g)&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                 @    [        U5      nUR                  5       U S'   g)z0Ensure that the app info has compat_errors fieldcompat_errorsN)r   _get_extension_compat)infoapp_optionshandlers      pC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\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                 
   [        U 5      nUR                  SS9n/ / / S.nU H\  n[        R                  5        HA  u  pVUR	                  U5      nU(       d  M  X5   R                  UR                  S5      5        MC     M^     U$ )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(..0LCMM#&Eu""5;;v#67 1 
 Mr   T)frozenc                   X   \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   Sr\\S'   S	r	\\S
'   Sr
\\   \S'   S	r\\S'   S	r\\S'   Sr\\   \S'   Sr\\   \S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Srg)ExtensionPackage7   a  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____firstlineno____doc__str__annotations__r9   boolr:   r;   r   r<   r=   r    dictr>   r@   rA   r-   rC   rD   rE   rF   rG   rH   __static_attributes__rI   r   r   r4   r4   7   s    2 IMGTHd#Ix}#D$GT"GXd^" $Ix~$sNCFC FHSM !GXc]!%)OXc])'+x}+)-#-$(NHSM(r   r4   c                   T    \ rS rSr% Sr\\S'   Sr\\   \S'   \	" \
S9r\
\   \S'   Srg)	ActionResulth   zAction 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_restartrI   )rJ   rK   rL   rM   rN   rO   rP   rW   r   r   listrZ   rS   rI   r   r   rU   rU   h   s/     K!GXc]!$T:M49:r   rU   c                   D    \ rS rSr% Sr\" \S9r\\   \	S'   Sr
\\	S'   Srg)	PluginManagerOptionsy   aT  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`.
rX   
lock_rulesFlock_allrI   N)rJ   rK   rL   rM   rN   r   	frozensetr_   rO   rP   r`   rQ   rS   rI   r   r   r]   r]   y   s&     "'y!AJ	#AHdr   r]   c                   v    \ rS rSr% Sr\" \S9r\\   \	S'   \" \S9r
\\   \	S'   Sr\\	S'   \" \S9r\\	S'   S	rg
)ExtensionManagerOptions   a  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
rX   allowed_extensions_urisblocked_extensions_urisi  listings_refresh_secondslistings_tornado_optionsrI   N)rJ   rK   rL   rM   rN   r   setre   rO   rP   rf   rg   intrR   rh   rS   rI   r   r   rc   rc      sL     ).c(BSXB(-c(BSXB$+c+%*4%@d@r   rc   c                   F    \ rS rSr% Sr\\S'   Sr\\S'   Sr	\
\   \S'   Srg)	ExtensionManagerMetadata   a  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_pathrI   )rJ   rK   rL   rM   rN   rO   rP   rn   rQ   ro   r   rS   rI   r   r   rl   rl      s&     IK"&L(3-&r   rl   c                   X    \ rS rSr% Sr\" \S9r\\\	\\
\4      4   \S'   Sr\\S'   Srg)	ExtensionsCache   zkExtensions cache

Attributes:
    cache: Extension list per page
    last_page: Last available page result
rX   cache   	last_pagerI   N)rJ   rK   rL   rM   rN   r   rR   rs   rj   r   rO   r4   rP   ru   rS   rI   r   r   rq   rq      s>     ?DTX>YE4Xd3(8#89::;YIsr   rq   c            	          ^  \ rS rSrSr\" / SQSSS9R                  SS9r   SS
\\	   S\\	   S\\
   SS	4U 4S jjjrS\	4S jrS\\   S\\   4S jrS\\\\   4   S\4S jrS\\\\   4   S\4S jrSrU =r$ )PluginManager   a[  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systemry   z:Level at which to manage plugins: sys_prefix, user, system)valuesdefault_valuehelpT)configNr   ext_optionsparentreturnc                   > [         T	U ]  US9  U R                  R                  SU R                  R
                   SU R                   S35        [        U5      U l        [        [        5       Vs1 s H  oDR                  iM     nnU=(       d    0 R                  5        VVs0 s H  u  pgXe;   d  M  Xg_M     nnn[        S0 UD6U l        g s  snf s  snnf )N)r   zPlugins in z will managed on the z levelrI   )super__init__logdebug	__class__rJ   levelr   r   r   r]   r%   r(   options)
selfr   r   r   fplugin_options_fieldoptionvalueplugin_optionsr   s
            r   r   PluginManager.__init__   s     	'$..1122G

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

 ,=n=  N
s   0C#C2Cc                 v   #    [        U R                  R                  5      U R                  R                  S.$ 7f)z8Get information about locks on plugin enabling/disabling)	lockRules	allLocked)r[   r   r_   r`   r   s    r   plugin_locksPluginManager.plugin_locks   s0      dll556..
 	
s   79plugins_or_extensionsc                    U R                   R                  (       a  [        U5      $ [        5       nU R                   R                   Vs1 s H  o3R	                  S5      S   iM     nnU HO  nSU;   a.  X0R                   R                  ;   a  UR                  U5        M5  M7  X4;   d  M>  UR                  U5        MQ     U$ s  snf )z9Find a subset of plugins (or extensions) which are locked:r   )r   r`   ri   r_   splitadd)r   r   locked_subsetpluginextensions_with_locked_pluginss        r   _find_lockedPluginManager._find_locked   s    <<  ,--/3||/F/F*
/FVLLa /F 	' *
 ,Ff}\\444!%%f- 59 !!&) , *
s   	B?pluginsc                   #    [        U[        5      (       a  UOU/nU R                  U5      n[        R                  " S5      nU(       a+  [        SUR                  S5      SR                  U5      -   S9$  U H!  n[        X@R                  U R                  S9  M#     [        SS/S	9$ ! [         a  n[        S[        U5      S9s S
nA$ S
nAff = f7f)z~Disable 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-   rW   r   r   rB   frontendr-   rZ   N)
isinstancer[   r   r
   loadrU   gettextjoinr   r   r   	Exceptionreprr   r   lockedtransr   errs         r   disablePluginManager.disable   s      (66'WI""7+-S ))F#$ 	C!!&6F6FdjjY "tJ<HH 	CwS	BB	C6   A4C71B) (C)
C3CCCCCc                   #    [        U[        5      (       a  UOU/nU R                  U5      n[        R                  " S5      nU(       a+  [        SUR                  S5      SR                  U5      -   S9$  U H!  n[        X@R                  U R                  S9  M#     [        SS/S	9$ ! [         a  n[        S[        U5      S9s S
nA$ S
nAff = f7f)z|Enable 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   rB   r   r   N)r   r[   r   r
   r   rU   r   r   r   r   r   r   r   r   s         r   enablePluginManager.enable  s      (66'WI""7+-R ))F#$ 	C! 5E5ETZZX "tJ<HH 	CwS	BB	Cr   )r   r   NNN)rJ   rK   rL   rM   rN   r   tagr   r   rR   r   r   r   r[   rO   ra   r   r	   rU   r   r   rS   __classcell__r   s   @r   rw   rw      s     /"I 
cc	 
 '+&*)-	>d^> d^> &	>
 
> >&
D 
$s) 	# &CU3S	>%: C| C4CE#tCy.$9 Cl C Cr   rw   c                     ^  \ rS rSrSr   S!S\\   S\\   S\\   SS4U 4S jjjrS	 r	\
S\4S
 j5       rS\S\\   4S jrS\S\S\S\\\\4   \\   4   4S jrS"S\S\\   S\4S jjrS\S\4S jr\S\S\4S j5       rS\S\4S jr S#S\\   S\S\S\\\   \\   4   4S jjrS\\   S\S\SS4S jrS$S jr S%S\\\4   4S jjrS\S\\   4S jrS\\   4S jrS\S\4S jr  S#S\\   S\S\SS4S jjr!S r"U =r#$ )&ExtensionManageri,  a  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   r   r   r   c                 |  > [         TU ]  XUS9  U R                  R                  U l        [        U R                  R                  5      U l        U R                  R                  U l        [        S0 U=(       d    0 D6U l	        0 U l
        S U l        SU l        S U l        [        U R                  R                  5      (       d$  [        U R                  R                   5      (       a  [        U R                  R                  5      S:H  U l        U R                  (       d>  [        U R                  R                   5      S:  a  U R                  R#                  S5        [$        R&                  R)                  U R*                  U R                  R,                  S-  SS9U l        U R                  R/                  5         g g )	N)r   r   r   Tr   zqYou have define simultaneously blocked and allowed extensions listings. The allowed listing will take precedence.i  g?)callback_timejitterrI   )r   r   r   loggerr   r   app_dircore_configrc   r   _extensions_cache_listings_cache_listings_block_mode_listing_fetchlenre   rf   warningtornadoioloopPeriodicCallback_fetch_listingsrg   start)r   r   r   r   r   s       r   r   ExtensionManager.__init__H  s`    	[RXY##**D,,445++77.E+2CEGI/3$(!IMt||3344DLL<`<`8a8a(+DLL,P,P(QUV(VD%,,T\\5Y5Y1Z]^1^   H #*.."A"A$$"llCCdJ #B #D
 %%' 9br   c                 T    U R                   b  U R                   R                  5         g g N)r   stopr   s    r   __del__ExtensionManager.__del__f  s%    *$$& +r   c                     [        5       e)zExtension manager metadata.NotImplementedErrorr   s    r   metadataExtensionManager.metadataj  s     "##r   	extensionc                    #    [        5       e7f)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_version#ExtensionManager.get_latest_versiono  s      "##   querypageper_pagec                    #    [        5       e7f)a"  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_packagesExtensionManager.list_packagesy        "##r   versionc                    #    [        5       e7f)am  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    ExtensionManager.install  s      "##r   c                    #    [        5       e7f)a"  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!   ExtensionManager.uninstall  r   r   c           	      f    [         R                  " SS [         R                  " SSU 5      S   5      $ )zConvert 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    [         U R                  S5          U R                  S5       3$ )Nrt      )PYTHON_TO_SEMVERr+   )ms    r   <lambda>5ExtensionManager.get_semver_version.<locals>.<lambda>  s$    )!''!*56qwwqzlCr   z\.(dev|post)\d+r?   r   )resubsubn)r   s    r   get_semver_version#ExtensionManager.get_semver_version  s1     vvCGG&G4Q7
 	
r   c                     UR                   $ )a7  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_name$ExtensionManager.get_normalized_name  s     ~~r   c                 F  #    XR                   ;  d  X R                   U   R                  ;  a  U R                  XU5      I Sh  vN   U R                  c/  U R                  b"  U R                  R                  5       I Sh  vN   U R                   U   R                  U   nUc  0 n[        UR                  5       5      nUGb?  U R                  Gb1  [        U R                  5      n/ nU R                  (       a  UR                  5        Hp  u  pxXv;  a  UR                  [        USS95        M%  UR                  (       d  M8  U R                  R                  SU S35        UR                  [        USS95        Mr     OUR                  5        Hp  u  pxXv;   a  UR                  [        USS95        M%  UR                  (       d  M8  U R                  R                  SU S35        UR                  [        USS95        Mr     XPR                   U   R                  4$  GN GN7f)a  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)r9   zBlocked extension 'z' is installed.FzNot allowed extension ')r   rs   refreshr   r   callbackr[   r|   r   r(   r*   r   r@   r   r   ru   )	r   r   r   r   rs   
extensionslistingr%   exts	            r   list_extensions ExtensionManager.list_extensions  s     ...$>T>TUZ>[>a>a2a,,uH555 'D,?,?,K%%..000&&u-33D9=E%,,.)
!5!5!A4//0GJ((!&ID*"))'#t*DE...((+>tfO)TU"))'#u*EF "/ "'ID"))'#t*DE...((+B4&)XY"))'#u*EF "/ 11%8BBBB9 6 1s3   AH!H;H!?H B<H! BH!AH!H!c                    #    XR                   ;   a  SU R                   U   R                  U'   U R                  XU5      I Sh  vN   g N7f)zRefresh the list of extensions.N)r   rs   _update_extensions_listr   s       r   r   ExtensionManager.refresh  sB     ***8<D""5)//5**5AAAs   AAA	Ac                 F  #    / n[         R                  R                  5       nU R                  (       a  [	        U R
                  R                  5      (       a  U R                  R                  SU R
                  R                   35        U R
                  R                   Hs  nUR                  " U40 U R
                  R                  D6I Sh  vN n[        R                  " UR                  5      nUR                  UR                  S/ 5      5        Mu     O[	        U R
                  R                   5      (       a  U R                  R                  SU R
                  R                    35        U R
                  R                    Hs  nUR                  " U40 U R
                  R                  D6I Sh  vN n[        R                  " UR                  5      nUR                  UR                  S/ 5      5        Mu     U Vs0 s H  oDS   U_M
     snU l        g GNJ Nhs  snf 7f)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   rf   r   r   fetchrh   jsonloadsbodyextendgetre   r   )r   rulesclientblocked_extensions_urirjallowed_extensions_uris          r   r    ExtensionManager._fetch_listings  s    ##335$$4<<778878\8\7]^ /3ll.R.R*$ll.,,?? A 

166*ALL';R!@A /S 5566HHMM3DLL4X4X3YZ +/,,*N*N& ,,*ll;;  JJqvv&QUU#7<= +O 7<<e&	1e<%  =s8   CH!HC#H!1H2AH!?H
H!H!H!c                 z	  #    U R                   n[        US9n[        U5      n[        X25        0 nUS   R	                  5        GH  u  pgSnUn	US   R                  US5      (       a  SnU R                  U5      n
[        S)0 SU
_SU	R                  SS	5      _S
UR                  SS	5      _SXcS   ;  _SS_S[        R                  US   5      _SS_S[        R                  US   5      _SU_SUR                  S0 5      _SS_SU R                  U5      _SUR                  S0 5      R                  SUR                  S5      5      _SUR                  S5      _SUR                  S0 5      R                  S5      _SUR                  S0 5      R                  SUR                  S5      5      _6nU(       a*  [        XR                  UR                  5      I Sh  vN S 9nXU
'   GM     US!   R	                  5        GH  u  pgXcS"   ;   a  M  SnUS   R                  US5      (       a  SnO UR                  5        H  nXl;   d  M
  S#nM     U R                  U5      n
[        U
UR                  SS	5      US   XcS   ;  S[        R                  US   5      S[        R                  US   5      US$U R                  U5      UR                  S0 5      R                  SUR                  S5      5      UR                  S5      UR                  S0 5      R                  S5      UR                  S0 5      R                  SUR                  S5      5      S%9nU(       a*  [        XR                  UR                  5      I Sh  vN S 9nXU
'   GM     US&    GH  nU R                  U5      nUc  M  U R                  U5      n
[        U
UR                  SS	5      UR                  S'S	5      SSS[        R                  US   5      [        R                  US   5      S#SUR                  S0 5      R                  SUR                  S5      5      UR                  S5      UR                  S0 5      R                  S5      UR                  S0 5      R                  SUR                  S5      5      S(9nXU
'   GM      U$  GN GN<7f)*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_extensionsrB   r   Nr   r%   r6   r?   r7   urlr=   disabledr<   FrA   r   r>   Tr@   r-   r    r8   prebuiltr;   rC   rD   rE   bugsrH   
repository)rA   r  shadowed_extsr   source)r%   r6   r7   r=   r<   rA   r>   r@   r-   r8   r;   rC   rD   rE   rH   r!   homepage)r%   r6   r7   r>   r=   r<   rA   r@   r-   r8   rC   rD   rE   rH   rI   )r   r   r1   r   r(   r  _normalize_namer4   r   r   _get_companionr   r   r%   r|   _get_scheduled_uninstall_info)r   r   r   r   build_check_infor  r%   datar-   pkg_infonormalized_namepkgpackagess                r   _get_installed_extensions*ExtensionManager._get_installed_extensions  s     &&4,[9d0
 56<<>JDFHO$((t44 "2248O" $$LL; "XXeR0 *%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& "c8O8OPSPXPX8Y2YZ*-'; ?> |,224JDO,,FO$((t44  0 7 7 9H'!* !: #2248O"$ HH]B7!%[*%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" "c8O8OPSPXPX8Y2YZ*-'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R;R5A'R;D7R;<R8=*R;+DR;8R;r*  c                 X    S nSUS   ;   a  SUS   S   ;   a  SnU$ SUS   S   ;   a  SnU$ )N	discoveryr   serverkernelrI   )r   r*  r;   s      r   r'  ExtensionManager._get_companion  sR    	$|,,4-k::$	  T,/<<$	r   c                     U R                   S-  S-  U-  S-  nUR                  5       (       a0  UR                  5        n[        R                  " U5      sSSS5        $ g! , (       d  f       g= f)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(  .ExtensionManager._get_scheduled_uninstall_info  sT    	)N:TANR==??#yy~   s   A
A-r%   c                     U$ )zpNormalize extension name; by default does nothing.

Args:
    name: Extension name
Returns:
    Normalized name
rI   )r   r%   s     r   r&   ExtensionManager._normalize_name  s	     r   c                 ^  #    SnUb  U R                  XU5      I Sh  vN u  pTOU R                  5       I Sh  vN nXR                  ;   a9  XPR                  U   R                  U'   U=(       d    SU R                  U   l        g[        X%0U=(       d    S5      U R                  U'   g N Nr7f)zUpdate the list of extensionsNrt   )r   r/  r   rs   ru   rq   )r   r   r   r   ru   r  s         r   r  (ExtensionManager._update_extensions_list  s      	*.*<*<U(*S$S!J	  $==??J***8B""5)//56?n1D""5)3,;T<NPYP^]^,_D""5) %T @s    B-B)B-B+A1B-+B-)r   r   r   r   r   r   r   r   r   r   )Nrt      )r   N)T)$rJ   rK   rL   rM   rN   r   rR   r   r   r   propertyrl   r   rO   r   rj   tupler4   r   rU   r    r!   staticmethodr   r   r[   r  r   r   r/  r'  r(  r&  r  rS   r   r   s   @r   r   r   ,  s;   : '+&*)-	(d^( d^( &	(
 
( (<' $2 $ $$# $(3- $$$ #$/2$	tC))*HSM9	:$$s $Xc] $l $ $ $ $ 
C 
C 
 
&-= #   KM,Cc],C14,CDG,C	t$%x}4	5,C\B8C= B Bs Bt B=> "&h	c##	$hT4 HSM Xd^ C C  KM`c]`14`DG`	` `r   r   )(rN   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   rU   r]   rc   rl   rq   rw   r   rI   r   r   <module>rN     sS   -
  	 9 9  "  :  >  #@ < zzGHJKjjVW $-) -) -)` $; ; ;  $   $A2 A A  $' ' ' 	 	 	tC' tCnF`} F`r   