Ë
    :vžj¾?  ã                  óæ   — d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZmZmZ ddl	mZ ddlmZ d	d
lmZ d	dlmZmZmZmZ  G d„ de«      Z G d„ de«      Z G d„ de«      Z y)zThe extension manager.é    )ÚannotationsN)Ústarmap)Úmulti)	ÚAnyÚBoolÚDictÚ	HasTraitsÚInstanceÚListÚUnicodeÚdefaultÚobserve©Úvalidate)ÚLoggingConfigurableé   )ÚExtensionConfigManager)ÚExtensionMetadataErrorÚExtensionModuleNotFoundÚ
get_loaderÚget_metadatac                  ó(  — e Zd ZdZ ed«      Z edd¬«      Z e«       Z	 e
ej                  «      Z ed«      d„ «       Z ed«      d	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚExtensionPointz‚A simple API for connecting to a Jupyter Server extension
    point defined by metadata and importable from a Python package.
    FNT©Ú
allow_noneÚlogc                ó,   — t        j                  d«      S )Nr   )ÚloggingÚ	getLogger©Úselfs    úq/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyter_server/extension/manager.pyÚ_default_logzExtensionPoint._default_log   s   € ä× Ñ Ð!1Ó2Ð2ó    Úmetadatac                ó  — |d   }	 |d   | _         	 t        j                  | j                   «      | _        d|v r |d   «       | _        |S # t        $ r d}t        |«      d‚w xY w# t        $ r d| j                   › d�}t        |«      d‚w xY w)zValidate metadata.ÚvalueÚmodulez<There is no 'module' key in the extension's metadata packet.NzThe submodule 'z>' could not be found. Are you sure the extension is installed?Úapp)	Ú_module_nameÚKeyErrorr   Ú	importlibÚimport_moduleÚ_moduleÚImportErrorr   Ú_app)r!   Úproposedr%   Úmsgs       r"   Ú_valid_metadatazExtensionPoint._valid_metadata"   s»   € ð ˜GÑ$ˆð	8Ø (¨Ñ 2ˆDÔð
	9Ü$×2Ñ2°4×3DÑ3DÓEˆDŒLð �HÑØ'˜ ™Ó)ˆDŒIØˆøô ò 	8ØPˆCÜ(¨Ó-°4Ð7ð	8ûô ò 	9à! $×"3Ñ"3Ð!4ð 53ð 3ð ô *¨#Ó.°DÐ8ð	9ús   ‡
A ’$A& ÁA#Á&&Bc                ó^   — | j                   r| j                   j                  S | j                  S )z Has this extension point been linked to the server.

        Will pull from ExtensionApp's trait, if this point
        is an instance of ExtensionApp.
        )r)   Ú_linkedr    s    r"   ÚlinkedzExtensionPoint.linked:   s%   € ð �8Š8Ø—8‘8×#Ñ#Ð#Ø�|‰|Ðr$   c                ó   — | j                   S )z'If the metadata includes an `app` field)r0   r    s    r"   r)   zExtensionPoint.appE   s   € ð �y‰yÐr$   c                óR   — | j                   r| j                   j                  «       S i S )z:Return any configuration provided by this extension point.)r)   Ú_jupyter_server_configr    s    r"   ÚconfigzExtensionPoint.configJ   s%   € ð �8Š8Ø—8‘8×2Ñ2Ó4Ð4ð ˆIr$   c                ó   — | j                   S )zuName of the Python package module where the extension's
        _load_jupyter_server_extension can be found.
        )r*   r    s    r"   Úmodule_namezExtensionPoint.module_nameT   s   € ð
 × Ñ Ð r$   c                ó’   — | j                   r| j                   j                  S | j                  j                  d| j                  «      S )z„Name of the extension.

        If it's not provided in the metadata, `name` is set
        to the extensions' module name.
        Úname)r)   r>   r%   Úgetr<   r    s    r"   r>   zExtensionPoint.name[   s6   € ð �8Š8Ø—8‘8—=‘=Ð Ø�}‰}× Ñ  ¨×)9Ñ)9Ó:Ð:r$   c                ó   — | j                   S )z3The imported module (using importlib.import_module))r.   r    s    r"   r(   zExtensionPoint.modulef   s   € ð �|‰|Ðr$   c                ó~   — | j                   r| j                   j                  }|S t        | j                  dd„ «      }|S )zGet a linker.Ú_link_jupyter_server_extensionc                 ó   — y ©N© ©Ú	serverapps    r"   Ú<lambda>z,ExtensionPoint._get_linker.<locals>.<lambda>u   s   €  $r$   )r)   rB   Úgetattrr(   )r!   Úlinkers     r"   Ú_get_linkerzExtensionPoint._get_linkerk   s?   € à�8Š8Ø—X‘X×<Ñ<ˆFð ˆô Ø—‘à0á&óˆFð ˆr$   c                óP   — | j                   }|s| j                  }t        |«      }|S )zGet a loader.)r)   r(   r   )r!   ÚlocÚloaders      r"   Ú_get_loaderzExtensionPoint._get_loadery   s%   € à�h‰hˆÙØ—+‘+ˆCÜ˜C“ˆØˆr$   c                ó‚   — | j                   r| j                   j                  }|S d„ }t        | j                  d|«      }|S )zGet a starter function.c              “  ó   K  — y ­wrD   rE   rF   s    r"   Ú_noop_startz0ExtensionPoint._get_starter.<locals>._noop_start‡   s	   è ø€ Øùs   ‚Ú_start_jupyter_server_extension)r)   rS   rI   r(   )r!   rJ   rR   s      r"   Ú_get_starterzExtensionPoint._get_starter�   sD   € à�8Š8Ø—X‘X×=Ñ=ˆFð ˆòô Ø—‘à1àóˆFð ˆr$   c                ód   — 	 | j                  «        | j                  «        y# t        $ r Y yw xY w)z+Check that both a linker and loader exists.TF)rK   rO   Ú	Exceptionr    s    r"   r   zExtensionPoint.validate“   s8   € ð	Ø×ÑÔØ×ÑÔð øô ò 	Ùð	ús   ‚ # £	/®/c                ó\   — | j                   s | j                  «       } ||«       d| _        yy)z·Link the extension to a Jupyter ServerApp object.

        This looks for a `_link_jupyter_server_extension` function
        in the extension's module or ExtensionApp class.
        TN)r6   rK   r5   )r!   rG   rJ   s      r"   ÚlinkzExtensionPoint.link�   s-   € ð �{Š{Ø×%Ñ%Ó'ˆFÙ�9ÔàˆD�Lð	 r$   c                ó2   — | j                  «       } ||«      S )z·Load the extension in a Jupyter ServerApp object.

        This looks for a `_load_jupyter_server_extension` function
        in the extension's module or ExtensionApp class.
        )rO   )r!   rG   rN   s      r"   ÚloadzExtensionPoint.load©   s   € ð ×!Ñ!Ó#ˆÙ�iÓ Ð r$   c              ƒ  óN   K  — | j                  «       } ||«      ƒ d{  –—† S 7 Œ­w)z€Call's the extensions 'start' hook where it can
        start (possibly async) tasks _after_ the event loop is running.
        N)rT   )r!   rG   Ústarters      r"   ÚstartzExtensionPoint.start²   s'   è ø€ ð ×#Ñ#Ó%ˆÙ˜YÓ'×'Ð'Ð'ús   ‚%ž#Ÿ%) Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r5   r   r0   r   r%   r
   r   ÚLoggerr   r   r#   Úvalidate_traitr3   Úpropertyr6   r)   r:   r<   r>   r(   rK   rO   rT   r   rX   rZ   r]   rE   r$   r"   r   r      sý   „ ññ �5‹k€GÙˆt Ô%€Dá‹v€Há
�7—>‘>Ó
"€CáˆUƒ^ñ3ó ð3ñ �JÓñó  ðð. ñó ðð ñó ðð ñó ðð ñ!ó ð!ð ñ;ó ð;ð ñó ðòòòò$ò
 ò!ó(r$   r   c                  óô   ‡ — e Zd ZdZ ed¬«      Z edd¬«      Z e«       Z	 e«       Z
 edd¬«      Z e e«       d	¬«      Z ed
¬«      Z ed«      d„ «       Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚExtensionPackagez�An API for interfacing with a Jupyter Server extension package.

    Usage:

    ext_name = "my_extensions"
    extpkg = ExtensionPackage(name=ext_name)
    z)Name of the an importable Python package.©ÚhelpFz)Whether the extension package is enabled.Tz:The module for this extension package. None if not enabled)r   rh   z5Extension metadata loaded from the extension package.z|
            The version of this extension package, if it can be found.
            Otherwise, an empty string.
            Úversionc                óJ   — | j                   syt        | j                  dd«      S )NÚ Ú__version__)ÚenabledrI   r(   r    s    r"   Ú_load_versionzExtensionPackage._load_versionÑ   s   € à�|Š|ØÜ�t—{‘{ M°2Ó6Ð6r$   c                ó^   •— t        ‰| �  di |¤Ž | j                  r| j                  «        yy)z Initialize an extension package.NrE   )ÚsuperÚ__init__rm   Ú_load_metadata)r!   ÚkwargsÚ	__class__s     €r"   rq   zExtensionPackage.__init__×   s+   ø€ ä‰ÑÑ"˜6Ò"Ø�<Š<Ø×ÑÕ!ð r$   c                ó6  — | j                   }	 t        || j                  ¬«      \  | _        | _        | j                  D ]2  }t        || j                  ¬«      }|| j                  |j                   <   Œ4 |S # t
        $ r}d|› d|› d�}t        |«      d‚d}~ww xY w)z\Import package and load metadata

        Only used if extension package is enabled
        )ÚloggerzThe module 'z' could not be found (z+). Are you sure the extension is installed?N)r%   r   )	r>   r   r   r(   r%   r/   r   r   Úextension_points)r!   r>   Úer2   ÚmÚpoints         r"   rr   zExtensionPackage._load_metadataÝ   s¤   € ð
 �y‰yˆð	9Ü)5°dÀ4Ç8Á8Ô)LÑ&ˆDŒK˜œð —”ˆAÜ"¨A°4·8±8Ô<ˆEØ05ˆD×!Ñ! %§*¡*Ò-ð ð ˆøô ò 	9à˜t˜fÐ$:¸1¸#ð >3ð 3ð ô *¨#Ó.°DÐ8ûð	9ús   Ž$A5 Á5	BÁ>BÂBc                óV   — t        d„ | j                  j                  «       D «       «      S )z.Validate all extension points in this package.c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrD   r   )Ú.0Ú	extensions     r"   Ú	<genexpr>z,ExtensionPackage.validate.<locals>.<genexpr>ó   s   è ø€ ÐXÑ9W¨I�9×%Ñ%×'Ñ9Wùs   ‚)Úallrw   Úvaluesr    s    r"   r   zExtensionPackage.validateñ   s"   € äÑX¸×9NÑ9N×9UÑ9UÔ9WÓXÓXÐXr$   c                ó‚   — | j                   j                  |d«      }|s!| j                  |   }|j                  |«       yy)zLink an extension point.FN)Ú_linked_pointsr?   rw   rX   )r!   Ú
point_namerG   r6   rz   s        r"   Ú
link_pointzExtensionPackage.link_pointõ   s>   € à×$Ñ$×(Ñ(¨°UÓ;ˆÙØ×)Ñ)¨*Ñ5ˆEØ�J‰J�yÕ!ð r$   c                óB   — | j                   |   }|j                  |«      S )úLoad an extension point.)rw   rZ   ©r!   r„   rG   rz   s       r"   Ú
load_pointzExtensionPackage.load_pointü   s!   € à×%Ñ% jÑ1ˆØ�z‰z˜)Ó$Ð$r$   c              ƒ  ó^   K  — | j                   |   }|j                  |«      ƒ d{  –—† S 7 Œ­w)r‡   N)rw   r]   rˆ   s       r"   Ústart_pointzExtensionPackage.start_point  s+   è ø€ à×%Ñ% jÑ1ˆØ—[‘[ Ó+×+Ð+Ð+ús   ‚$-¦+§-c                óJ   — | j                   D ]  }| j                  ||«       Œ y)zLink all extension points.N)rw   r…   ©r!   rG   r„   s      r"   Úlink_all_pointsz ExtensionPackage.link_all_points  s    € à×/Ô/ˆJØ�O‰O˜J¨	Õ2ñ 0r$   c                ó`   — | j                   D �cg c]  }| j                  ||«      ‘Œ c}S c c}w )úLoad all extension points.)rw   r‰   r�   s      r"   Úload_all_pointsz ExtensionPackage.load_all_points  s-   € àIM×I^ÒI^Ó_ÑI^¸:�—‘ 
¨IÕ6ÐI^Ñ_Ð_ùÒ_s   �+c              ƒ  óf   K  — | j                   D ]  }| j                  ||«      ƒ d{  –—†  Œ y7 Œ­w)r�   N)rw   r‹   r�   s      r"   Ústart_all_pointsz!ExtensionPackage.start_all_points  s/   è ø€ à×/Ô/ˆJØ×"Ñ" :¨yÓ9×9Ñ9ñ 0Ø9ús   ‚%1§/¨1)r^   r_   r`   ra   r   r>   r   rm   r   rƒ   rw   r   r(   r   r%   ri   r   rn   rq   rr   r   r…   r‰   r‹   rŽ   r‘   r“   Ú__classcell__)rt   s   @r"   rf   rf   º   s¤   ø„ ññ ÐCÔD€DÙ�5ÐJÔK€Gá“V€NÙ“vÐÙ˜DÐ'cÔd€FÙ‘D“FÐ!XÔY€HÙðô€Gñ ˆYÓñ7ó ð7ô
"òò(Yò"ò%ò
,ò
3ò
`ö:r$   rf   c                  ó  — e Zd ZdZ eed¬«      Z e«       Z e	d«      d„ «       Z
 ed«      d„ «       Z ed¬«      Zed	„ «       Z ed
¬«      Zed„ «       Zed„ «       Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z y)ÚExtensionManagerz©High level interface for finding, validating,
    linking, loading, and managing Jupyter Server extensions.

    Usage:
    m = ExtensionManager(config_manager=...)
    Tr   Úconfig_managerc                ó<   — t        «       }| j                  |«       |S rD   )r   Ú_load_config_manager©r!   r—   s     r"   Ú_load_default_config_managerz-ExtensionManager._load_default_config_manager!  s   € ä/Ó1ˆØ×!Ñ! .Ô1ØÐr$   c                óT   — |j                   r| j                  |j                   «       y y rD   )Únewr™   )r!   Úchanges     r"   Ú_config_manager_changedz(ExtensionManager._config_manager_changed'  s    € à�:Š:Ø×%Ñ% f§j¡jÕ1ð r$   zq
        Dictionary with extension package names as keys
        and ExtensionPackage objects as values.
        rg   c                óZ   — t        t        | j                  j                  «       «      «      S )z8Returns an extensions dictionary, sorted alphabetically.)ÚdictÚsortedÚ
extensionsÚitemsr    s    r"   Úsorted_extensionsz"ExtensionManager.sorted_extensions7  s!   € ô ”F˜4Ÿ?™?×0Ñ0Ó2Ó3Ó4Ð4r$   z|
        Dictionary with extension names as keys

        values are True if the extension is linked, False if not.
        c           
     óô   — | j                   j                  «       D ���ci c]E  \  }}||j                  j                  «       D �ch c]  }|j                  sŒ|j                  ’Œ c}“ŒG c}}}S c c}w c c}}}w )zCReturn mapping of extension names and sets of ExtensionApp objects.)r£   r¤   rw   r�   r)   )r!   r>   r~   rz   s       r"   Úextension_appszExtensionManager.extension_appsH  so   € ð
 $(§?¡?×#8Ñ#8Ô#:õ
á#:‘��ið ¨)×*DÑ*D×*KÑ*KÔ*MÓ[Ñ*M ÐQV×QZÓQZ�5—9“9Ð*MÑ[Ñ[Ø#:ó
ð 	
ùÚ[ùô
s   Ÿ%A3ÁA.ÁA.Á$A3Á.A3c                ó®   — | j                   j                  «       D ���ci c]'  }|j                  j                  «       D ]  \  }}||“Œ
 Œ) c}}}S c c}}}w )zCReturn mapping of extension point names and ExtensionPoint objects.)r£   r�   rw   r¤   )r!   r'   r>   rz   s       r"   rw   z!ExtensionManager.extension_pointsP  sZ   € ð
 Ÿ™×/Ñ/Ô1õ
á1�Ø$×5Ñ5×;Ñ;Ö=‘��eð �%‰Kà=ð Ø1ó
ð 	
ùô 
s   Ÿ,Ac                ó   — || _         y)z1Add extensions found by an ExtensionConfigManagerN)r—   rš   s     r"   Úfrom_config_managerz$ExtensionManager.from_config_managerY  s   € ð -ˆÕr$   c                óF   — |j                  «       }| j                  |«       y)z Actually load our config managerN)Úget_jpserver_extensionsÚfrom_jpserver_extensions)r!   r—   Újpserver_extensionss      r"   r™   z%ExtensionManager._load_config_manager^  s    € à,×DÑDÓFÐØ×%Ñ%Ð&9Õ:r$   c                óZ   — |j                  «       D ]  \  }}| j                  ||¬«       Œ y)z:Add extensions from 'jpserver_extensions'-like dictionary.)rm   N)r¤   Úadd_extension)r!   r®   r>   rm   s       r"   r­   z)ExtensionManager.from_jpserver_extensionsc  s,   € à0×6Ñ6Ö8‰MˆD�'Ø×Ñ˜t¨WÐÕ5ñ 9r$   c                óð   — 	 t        ||¬«      }|| j                  |<   y# t        $ rM}| j                  r| j                  j                  r‚ | j
                  j                  d|||d¬«       Y d}~yd}~ww xY w)zeTry to add extension to manager, return True if successful.
        Otherwise, return False.
        )r>   rm   Tz-%s | error adding extension (enabled: %s): %s©Úexc_infoNF)rf   r£   rV   rG   Ú!reraise_server_extension_failuresr   Úwarning)r!   Úextension_namerm   Úextpkgrx   s        r"   r°   zExtensionManager.add_extensionh  sz   € ð	Ü%¨>À7ÔKˆFØ.4ˆD�O‰O˜NÑ+Øøäò 		Ø�~Š~ $§.¡.×"RÒ"RØØ�H‰H×ÑØ?ØØØØð ÷ ð ð ûð		ús   ‚ Ÿ	A5¨AA0Á0A5c                ó¸  — | j                   j                  |d«      }| j                  |   }|sU|j                  rH	 |j	                  | j
                  «       d| j                   |<   | j                  j                  d|«       yyy# t        $ rL}| j
                  r| j
                  j                  r‚ | j                  j                  d||d¬«       Y d}~yd}~ww xY w)zLink an extension by name.FTz'%s | extension was successfully linked.z %s | error linking extension: %sr²   N)Úlinked_extensionsr?   r£   rm   rŽ   rG   r   ÚinforV   r´   rµ   )r!   r>   r6   r~   rx   s        r"   Úlink_extensionzExtensionManager.link_extension}  s¿   € à×'Ñ'×+Ñ+¨D°%Ó8ˆØ—O‘O DÑ)ˆ	Ù˜)×+Ò+ð]à×)Ñ)¨$¯.©.Ô9Ø/3�×&Ñ& tÑ,Ø—‘—‘ÐGÈÕNð ,ˆvøô ò ]Ø—>’> d§n¡n×&VÒ&VØØ—‘× Ñ Ð!CÀTÈ1ÐW[Ð ×\Ñ\ûð]ús   »AB Â	CÂACÃCc                óz  — | j                   j                  |«      }|rF|j                  r9	 |j                  | j                  «       | j
                  j                  d|«       yyy# t        $ rL}| j                  r| j                  j                  r‚ | j
                  j                  d||d¬«       Y d}~yd}~ww xY w)zLoad an extension by name.z'%s | extension was successfully loaded.z.%s | extension failed loading with message: %rTr²   N)
r£   r?   rm   r‘   rG   r   rº   rV   r´   rµ   ©r!   r>   r~   rx   s       r"   Úload_extensionzExtensionManager.load_extensionŒ  s£   € à—O‘O×'Ñ'¨Ó-ˆ	á˜×*Ò*ð	OØ×)Ñ)¨$¯.©.Ô9ð —‘—‘ÐGÈÕNð +ˆ9øô ò Ø—>’> d§n¡n×&VÒ&VØØ—‘× Ñ ØDÀdÈAÐX\ð !÷ ñ ûðús   «A% Á%	B:Á.AB5Â5B:c              ƒ  ó–  K  — | j                   j                  |«      }|rN|j                  rA	 |j                  | j                  «      ƒ d{  –—†  | j
                  j                  d|«       yyy7 Œ## t        $ rL}| j                  r| j                  j                  r‚ | j
                  j                  d||d¬«       Y d}~yd}~ww xY w­w)zStart an extension by name.Nz(%s | extension was successfully started.z/%s | extension failed starting with message: %rTr²   )
r£   r?   rm   r“   rG   r   ÚdebugrV   r´   rµ   r½   s       r"   Ústart_extensionz ExtensionManager.start_extensionœ  s­   è ø€ à—O‘O×'Ñ'¨Ó-ˆ	á˜×*Ò*ð	QØ×0Ñ0°·±Ó@×@Ð@ð —‘—‘ÐIÈ4ÕPð +ˆ9à@ùÜò Ø—>’> d§n¡n×&VÒ&VØØ—‘× Ñ ØEÀtÈQÐY]ð !÷ ñ ûðüsA   ‚*C	­A1 ÁA/ÁA1 ÁC	Á/A1 Á1	CÁ:ACÂ<C	ÃCÃC	c              ƒ  óê   K  — |D ]h  }| j                   j                  d||j                  «       |j                  «       ƒ d{  –—†  | j                   j                  d||j                  «       Œj y7 Œ.­w)z.Call the shutdown hooks in the specified apps.z%s | extension app %r stoppingNz%s | extension app %r stopped)r   rÀ   r>   Ústop_extension)r!   r>   Úappsr)   s       r"   rÃ   zExtensionManager.stop_extension¬  sW   è ø€ ãˆCØ�H‰H�N‰NÐ;¸TÀ3Ç8Á8ÔLØ×$Ñ$Ó&×&Ð&Ø�H‰H�N‰NÐ:¸DÀ#Ç(Á(ÕKñ à&ús   ‚A A3ÁA1Á/A3c                óH   — | j                   D ]  }| j                  |«       Œ y)zHLink all enabled extensions
        to an instance of ServerApp
        N)r¥   r»   ©r!   r>   s     r"   Úlink_all_extensionsz$ExtensionManager.link_all_extensions³  ó"   € ð ×*Ô*ˆDØ×Ñ Õ%ñ +r$   c                óH   — | j                   D ]  }| j                  |«       Œ y)zULoad all enabled extensions and append them to
        the parent ServerApp.
        N)r¥   r¾   rÆ   s     r"   Úload_all_extensionsz$ExtensionManager.load_all_extensions¼  rÈ   r$   c              ƒ  óŽ   K  — t        | j                  D �cg c]  }| j                  |«      ‘Œ c}«      ƒ d{  –—†  yc c}w 7 Œ
­w)zStart all enabled extensions.N)r   r¥   rÁ   rÆ   s     r"   Ústart_all_extensionsz%ExtensionManager.start_all_extensionsÅ  s>   è ø€ ô ¸D×<RÒ<RÓSÑ<R°D�T×)Ñ)¨$Õ/Ð<RÑSÓT×TÑTùÒSÐTús   ‚A–>®
A¸A¹Ac              ƒ  óÄ   K  — t        t        t        | j                  t	        t        | j                  «      j                  «       «      «      «      «      ƒ d{  –—†  y7 Œ­w)z*Call the shutdown hooks in all extensions.N)r   Úlistr   rÃ   r¢   r¡   r§   r¤   r    s    r"   Ústop_all_extensionsz$ExtensionManager.stop_all_extensionsË  s?   è ø€ ä”Dœ ×!4Ñ!4´f¼TÀ$×BUÑBUÓ=V×=\Ñ=\Ó=^Ó6_Ó`ÓaÓb×bÒbús   ‚AA ÁAÁA c                ó    — t        t        | j                  «      j                  «       «      D ]  \  }}|D ]  }|j	                  «       sŒ  y Œ! y)zMCheck for any activity currently happening across all extension applications.TN)r¢   r¡   r§   r¤   Úcurrent_activity)r!   Ú_rÄ   r)   s       r"   Úany_activityzExtensionManager.any_activityÏ  sC   € äœd 4×#6Ñ#6Ó7×=Ñ=Ó?Ö@‰GˆAˆtÛ�Ø×'Ñ'Õ)Úñ ñ Ar$   N)F)!r^   r_   r`   ra   r
   r   r—   r   rG   r   r›   r   rŸ   r   r£   rd   r¥   r¹   r§   rw   rª   r™   r­   r°   r»   r¾   rÁ   rÃ   rÇ   rÊ   rÌ   rÏ   rÓ   rE   r$   r"   r–   r–     sõ   „ ññ Ð4ÀÔF€Ná“€IáÐÓñó ðñ
 ÐÓñ2ó ð2ñ ðô€Jð ñ5ó ð5ñ ðôÐð ñ
ó ð
ð ñ
ó ð
ò-ò
;ò
6ó
ò*]òOò Qò Lò&ò&òUòcó r$   r–   )!ra   Ú
__future__r   r,   r   Ú	itertoolsr   Útornado.genr   Ú	traitletsr   r   r   r	   r
   r   r   r   r   r   rc   Útraitlets.configr   r:   r   Úutilsr   r   r   r   r   rf   r–   rE   r$   r"   Ú<module>rÚ      s]   ðÙ å "ã Û Ý å ß [× [Õ [Ý 0Ý 0å *ß \Ó \ôe(�Yô e(ôPX:Ð*ô X:ôv Ð*õ  r$   