Ë
    ÁvžjV  ã            
       óÄ  — d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Zddl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 ddlmZmZ dd	lmZ dd
lmZmZmZ ddl m!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/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6  G d„ dejn                  jp                  «      Z9 ejt                  d«      Z; ejt                  d«      xs  ejt                  d«      xs e;Z< ejt                  d«      xs  ejt                  d«      xs e<xs e;Z= e)e$jb                  «      Z>i Z?dZ@e<r| e!e<«      ZAeAj„                  j‡                  d«      \  ZDZEZFe> e)d«      k\  r*d e$jŽ                  e<¬«       e$jŽ                  e=¬«      dœiZ?nde<e=dœiZ? e9«       Z@e@j‘                  eDeF«       de$j’                  d eJd!eJd"eJd#eKf
d$„ZL G d%„ d&e4«      ZMy)'úOExtension manager using pip as package manager and PyPi.org as packages source.é    N)ÚdatetimeÚ	timedeltaÚtimezone)Úpartial)Úgroupby)Úenviron)ÚPath)ÚCalledProcessErrorÚrun)ÚTarFile)ÚAnyÚCallableÚOptional)Úurlparse)ÚZipFile)Ú
alru_cache)ÚVersion)ÚCFloatÚCIntÚUnicodeÚconfigÚobserve)Ú__version__)ÚActionResultÚExtensionManagerÚExtensionManagerMetadataÚExtensionPackagec                   ó   — e Zd Zdd„Zd„ Zy)ÚProxiedTransportNc                 ó$   — ||f| _         || _        y ©N)ÚproxyÚproxy_headers)ÚselfÚhostÚportÚheaderss       úk/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyterlab/extensions/pypi.pyÚ	set_proxyzProxiedTransport.set_proxy*   s   € Ø˜4�ZˆŒ
Ø$ˆÕó    c                 óž   — t        j                  j                  | j                  Ž }|j	                  || j
                  ¬«       ||f| _        |S )N©r(   )ÚhttpÚclientÚHTTPConnectionr#   Ú
set_tunnelr$   Ú_connection)r%   r&   Ú
connections      r)   Úmake_connectionz ProxiedTransport.make_connection.   sF   € Ü—[‘[×/Ñ/°·±Ð<ˆ
Ø×Ñ˜d¨D×,>Ñ,>ÐÔ?Ø Ð+ˆÔØÐr+   )NN)Ú__name__Ú
__module__Ú__qualname__r*   r4   © r+   r)   r    r    )   s   „ ó%ór+   r    Ú	ALL_PROXYÚ
http_proxyÚ
HTTP_PROXYÚhttps_proxyÚHTTPS_PROXYÚ:z0.28.0Úmounts)r#   )zhttp://zhttps://Úproxiesr/   ÚnameÚlatest_versionÚbase_urlÚreturnc              ƒ   ó$  K  — | j                  |d|› d|› d�z   ddi¬«      ƒ d {  –—† }|j                  dk  rNt        j                  |j                  «      j                  d«      }dD �ci c]  }||j                  |«      “Œ c}S i S 7 Œcc c}w ­w)	NÚ/ú/jsonúContent-Typeúapplication/jsonr-   é�  Úinfo)	ÚauthorÚbugtrack_urlÚdocs_urlÚ	home_pageÚlicenseÚpackage_urlÚproject_urlÚproject_urlsÚsummary)ÚgetÚstatus_codeÚjsonÚloadsÚtext)r/   rA   rB   rC   ÚresponseÚdataÚks          r)   Ú_fetch_package_metadatar]   Z   s±   è ø€ ð —Z‘ZØ�Q�t�f˜A˜nÐ-¨UÐ3Ñ3ØÐ!3Ð4ð  ó ÷ €Hð ×Ñ˜cÒ!Ü�z‰z˜(Ÿ-™-Ó(×,Ñ,¨VÓ4ˆñ

ó
ñ
�ð ˆt�x‰x˜‹{‰Nð
ñ
ð 	
ð ˆ	ð/úò
ùs"   ‚#B¥B	¦ABÁ+BÂBÂBc                   ó°  ‡ — e Zd ZdZ eddd¬«      Z eddd¬«      Z eddd	¬«      Z	 ed
dd¬«      Z
	 	 	 d&dee   dee   deej                     ddfˆ fd„Zedefd„«       Zdedee   fd„Zdedefd„Zdededefd„Z ed«      d„ «       Zdedededeeeef   ee   f   fd„Zde eeef      fd „Z!d'd!ed"ee   de"fd#„Z#dede"fd$„Z$d!edefd%„Z%ˆ xZ&S )(ÚPyPIExtensionManagerr   zhttps://pypi.org/pypiTzThe base URL of PyPI index.)r   Úhelpg     Àr@z.PyPI extensions list cache timeout in seconds.iÜ  z$The cache size for package metadata.g      ð?zGThrottling time in seconds between PyPI requests using the XML-RPC API.NÚapp_optionsÚext_optionsÚparentrD   c                 ó�  •— t         ‰| �  |||«       t        j                  d	i t        ¤Ž| _        t        t        | j
                  «      | _        | j                  d| j                  i«       t        j                  j                  | j                  t        ¬«      | _        t!        j"                  t$        j&                  ¬«      t)        | j*                  dz  ¬«      z
  | _        d | _        | j0                  j3                  d| j                  › d�«       t        r-| j0                  j5                  dt        j6                  › �«       y y )
NÚnew)Ú	transport©Útzç)\�Âõ(ð?©Úsecondsz%Extensions list will be fetched from Ú.z=Extensions will be fetched using proxy, proxy host and port: r8   )ÚsuperÚ__init__ÚhttpxÚAsyncClientÚ_httpx_client_argsÚ_httpx_clientr   r]   Ú$_observe_package_metadata_cache_sizeÚpackage_metadata_cache_sizeÚxmlrpcr/   ÚServerProxyrC   Úxmlrpc_transport_overrideÚ_rpc_clientr   Únowr   Úutcr   Úcache_timeoutÚ5_PyPIExtensionManager__last_all_packages_request_timeÚ)_PyPIExtensionManager__all_packages_cacheÚlogÚdebugrK   r#   )r%   ra   rb   rc   Ú	__class__s       €r)   rn   zPyPIExtensionManager.__init__�   s  ø€ ô 	‰Ñ˜ k°6Ô:Ü"×.Ñ.ÑDÔ1CÑDˆÔä'.Ô/FÈ×HZÑHZÓ'[ˆÔ$Ø×1Ñ1°5¸$×:ZÑ:ZÐ2[Ô\ä!Ÿ=™=×4Ñ4Ø�M‰MÔ%>ð 5ó 
ˆÔô 19·±ÄÇÁÔ0MÔPYØ×&Ñ&¨Ñ-ôQ
ñ 1
ˆÔ-ð %)ˆÔ!à�‰�‰Ð>¸t¿}¹}¸oÈQÐOÔPÝ$Ø�H‰H�M‰MØOÔPi×PoÑPoÐOpÐqõð %r+   c                 ó8   — t        ddt        j                  «      S )zExtension manager metadata.ÚPyPIT)r   ÚsysÚprefix©r%   s    r)   ÚmetadatazPyPIExtensionManager.metadata§   s   € ô (¨°´c·j±jÓAÐAr+   Úpkgc              ƒ   ó®  K  — 	 | j                   j                  | j                  d|› d�z   ddi¬«      ƒ d{  –—† }|j                  dk  r0t	        j
                  |j                  «      j                  di «      }n| j                  j                  d	|›�«       y	 t        j                  |j                  d
d«      «      xs dS 7 ŒŒ# t        $ r Y yw xY w­w)z¹Return the latest available version for a given extension.

        Args:
            pkg: The extension to search for
        Returns:
            The latest available version
        rF   rG   rH   rI   r-   NrJ   rK   z+Failed to get package information on PyPI; ÚversionÚ )rr   rU   rC   rV   rW   rX   Úcontentr~   r   r   Úget_semver_versionÚ	Exception)r%   r‡   rZ   r[   s       r)   Úget_latest_versionz'PyPIExtensionManager.get_latest_version¬   sÕ   è ø€ ð	XØ!×/Ñ/×3Ñ3Ø—‘ ! C 5¨ Ñ.¸ÐI[Ð8\ð 4ó ÷ ˆHð ×#Ñ# cÒ)Ü—z‘z (×"2Ñ"2Ó3×7Ñ7¸ÀÓC‘à—‘—‘Ð!LÈXÈLÐYÔZØð ô $×6Ñ6°t·x±xÀ	È2Ó7NÓOÒWÐSWÐWðùô ò 	Ùð	üs?   ‚C„3C ·C¸A!C ÂCÂ)CÃC Ã	CÃCÃCÃCÚ	extensionc                 ó    — |j                   �(|j                   }|d   dk(  r| j                  |d   «      S | j                  |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
        ÚpackageManagerÚpythonÚpackageName)ÚinstallÚ_normalize_namerA   )r%   r�   Úinstall_metadatas      r)   Úget_normalized_namez(PyPIExtensionManager.get_normalized_nameÃ   sV   € ð ×ÑÐ(Ø(×0Ñ0ÐØÐ 0Ñ1°XÒ=Ø×+Ñ+Ð,<¸]Ñ,KÓLÐLØ×#Ñ# I§N¡NÓ3Ð3r+   Ú	recursiveÚfnc              ‡   óà  K  — t         j                  j                  j                  «       }	  |j                  d|g|¢­Ž ƒ d{  –—† }|S 7 Œ# t
        j                  j                  $ �r}|j                  dk(  rç|j                  j                  d«      rÌd}t        j                  d|j                  «      }|�t        |j                  d«      xs d«      }| j                  j!                  d|› d	�«       t#        j$                  || j&                  z  d
z   «      ƒ d{  –—†7   |r | j(                  d|g|¢­Ž ƒ d{  –—†7  }n |j                  d|g|¢­Ž ƒ d{  –—†7  }Y d}~S d}~ww xY w­w)a/  Throttle XMLRPC API request

        Args:
            recursive: Whether to call the throttling recursively once or not.
            fn: API method to call
            *args: API method arguments
        Returns:
            Result of the method
        Raises:
            xmlrpc.client.Fault
        Ni�ÿÿzHTTPTooManyRequests:ri   z!Limit may reset in (\d+) seconds.é   Ú1z>HTTPTooManyRequests - Perform next call to PyPI XMLRPC API in zs.g{®Gáz„?F)ÚtornadoÚioloopÚIOLoopÚcurrentÚrun_in_executorru   r/   ÚFaultÚ	faultCodeÚfaultStringÚ
startswithÚreÚsearchÚintÚgroupr~   rK   ÚasyncioÚsleepÚrpc_request_throttlingÚ&_PyPIExtensionManager__throttleRequest)	r%   r˜   r™   ÚargsÚcurrent_loopr[   ÚerrÚdelayÚmatchs	            r)   Ú__throttleRequestz&PyPIExtensionManager.__throttleRequestÖ   sM  è ø€ ô —~‘~×,Ñ,×4Ñ4Ó6ˆð	OØ5˜×5Ñ5°d¸BÐFÀÒF×FˆDð$ ˆð% GùÜ�}‰}×"Ñ"ó 	OØ�}‰} Ò&¨3¯?©?×+EÑ+EØ&ô,ð �ÜŸ	™	Ð"FÈÏÉÓX�ØÐ$Ü §¡¨A£Ò 5°#Ó6�EØ—‘—‘ØTÐUZÐT[Ð[]Ð^ôô —m‘m E¨D×,GÑ,GÑ$GÈ$Ñ$NÓO×OÑOÙØ!7 ×!7Ñ!7¸¸rÐ!IÀDÒ!I×IÐI‘Dà!= ×!=Ñ!=¸dÀBÐ!NÈÒ!N×NÐN�Dûàˆûð#	Oüse   ‚)E.¬A ÁA
ÁA ÁE.Á
A ÁE+Á*B3E&ÄD ÄE&Ä<D?Ä=E&ÅEÅE&Å E.Å&E+Å+E.rt   c                 óh   —  t        |d   ¬«      t        t        | j                  «      «      | _        y )Nre   )Úmaxsize)r   r   r]   rr   )r%   Úchanges     r)   rs   z9PyPIExtensionManager._observe_package_metadata_cache_sizeø   s+   € à'H¤z¸&À¹-Ô'HÜÔ+¨T×-?Ñ-?Ó@ó(
ˆÕ$r+   ÚqueryÚpageÚper_pagec              ƒ   ó,  ‡‡K  — | j                  «       ƒ d{  –—† }i }g }t        t        ˆfd„|«      d„ «      D �]ì  \  }}t        |«      d   \  }	}
| j	                  ||
| j
                  «      ƒ d{  –—† }| j                  |«      }|j                  d«      xs i }|j                  d«      }|j                  d«      xs |j                  d«      }|j                  d	«      xs |j                  d
«      }|j                  d«      xs |j                  d«      }|xs0 |j                  d«      xs |j                  d«      xs
 |xs |xs |}t        ||j                  d«      ||j                  d«      |j                  d«      t        j                  |
«      d|||j                  d«      |¬«      }d}|||fD �cg c]  }|sŒt        |«      j                  «       ‘Œ  }}ddg}|D ]*  Š‰|v rd} n"t        ˆfd„dD «       «      rd} n
d‰v sŒ(d} n |j                  ||f«       �Œï t        |d„ ¬«      }|dz
  |z  }||z   }||| }|D ]  \  }	}|||j                   <   Œ t#        j$                  t'        |«      |z  «      }||fS 7 �Œq7 �Œc c}w ­w)aË  List the available extensions.

        Note:
            This will list the packages based on the classifier
                Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt

            Then it filters it with the query and sorts by organization priority:
            1. Project Jupyter (@jupyter)
            2. JupyterLab Community (@jupyterlab-contrib)
            3. Others

        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
        Nc                 ó   •— ‰| d   v S ©Nr   r8   )Úmr·   s    €r)   Ú<lambda>z4PyPIExtensionManager.list_packages.<locals>.<lambda>  s   ø€ °E¸Q¸q¹T±Mr+   c                 ó   — | d   S r¼   r8   )Úes    r)   r¾   z4PyPIExtensionManager.list_packages.<locals>.<lambda>  s   € ÐWXÐYZÒW[r+   éÿÿÿÿrS   zSource CoderO   ÚHomepagerN   ÚDocumentationrM   zBug TrackerrR   rQ   rT   rL   rP   Úprebuilt)rA   ÚdescriptionÚhomepage_urlrL   rP   rB   Úpkg_typeÚbug_tracker_urlÚdocumentation_urlÚpackage_manager_urlÚrepository_urlé   z-https://github.com/jupyterlab/jupyterlab_apodz0https://github.com/jupyterlab/extension-examplesé   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr"   r8   )Ú.0ÚorgÚurls     €r)   Ú	<genexpr>z5PyPIExtensionManager.list_packages.<locals>.<genexpr>J  s   øè ø€ ð á_˜ð ˜3”JÙ_ùs   ƒ)zgithub.com/jupyter/zjupyter.orgzgithub.com/jupyterlab/r›   zgithub.com/jupyterlab-contrib/é   c                 ó*   — | d   | d   j                   fS )Nr   r›   ©rA   )Úxs    r)   r¾   z4PyPIExtensionManager.list_packages.<locals>.<lambda>V  s   € ¸A¸a¹DÀ!ÀAÁ$Ç)Á)Ñ;Lr+   )Úkey)Ú)_PyPIExtensionManager__get_all_extensionsr   ÚfilterÚlistr]   rC   r•   rU   r   r   rŒ   ÚstrÚlowerÚanyÚappendÚsortedrA   ÚmathÚceilÚlen)r%   r·   r¸   r¹   ÚmatchesÚ
extensionsÚall_matchesrA   r©   Ú_rB   r[   Únormalized_nameÚpackage_urlsÚ
source_urlrÆ   rÉ   rÈ   Úbest_guess_home_urlr�   ÚpriorityrÑ   Úurls_to_checkÚexcludeÚsorted_matchesÚ	start_idxÚend_idxÚpage_matchesÚtotal_pagess    `                   `       r)   Úlist_packagesz"PyPIExtensionManager.list_packagesþ   s×  ùè ø€ ð, ×1Ñ1Ó3×3ˆàˆ
Øˆä"¤6Ó*AÀ7Ó#KÉ^×\‰KˆD�%Ü $ U£¨B¡ÑˆAˆ~Ø×5Ñ5°d¸NÈDÏMÉMÓZ×ZˆDà"×2Ñ2°4Ó8ˆOØŸ8™8 NÓ3Ò9°rˆLà%×)Ñ)¨-Ó8ˆJØŸ8™8 KÓ0ÒP°L×4DÑ4DÀZÓ4PˆLØ $§¡¨Ó 4Ò Y¸×8HÑ8HÈÓ8YÐØ"Ÿh™h ~Ó6ÒY¸,×:JÑ:JÈ=Ó:YˆOð ò #Ø—8‘8˜MÓ*ò#à—8‘8˜MÓ*ò#ð %ò#ð ò	#ð
 #ð  ô )Ø$Ø ŸH™H YÓ/Ø0Ø—x‘x Ó)ØŸ™ Ó+Ü/×BÑBÀ>ÓRØ#Ø /Ø"3Ø$(§H¡H¨]Ó$;Ø)ôˆIð ˆHà-7¸ÐGZÑ,[óÙ,[ SÒ_b”�C“—‘Õ Ð,[ð ð ð @ØBðˆGó
 %�Ø˜'‘>Ø �HÙÜó á_óô ð  !�HÙØ5¸Ò<Ø �HÙð %ð ×Ñ ¨)Ð4Ö5ðw ]ôz   Ñ1LÔMˆð ˜A‘X Ñ)ˆ	Ø˜hÑ&ˆØ% i°Ð8ˆã(‰LˆAˆyØ)2ˆJ�y—~‘~Ò&ð )ô —i‘i¤ NÓ 3°hÑ >Ó?ˆà˜;Ð&Ð&ð] 4ùð [ûòFùsB   „J˜J	™AJÁ3JÁ4E	JÆ=JÇJÇ /JÈA:JÊJÊJc              ƒ   óÀ  K  — | j                   �Ht        j                  t        j                  ¬«      | j
                  t        | j                  ¬«      z   kD  ry| j                  j                  d«       | j                  d| j                  j                  dg«      ƒ d {  –—† | _         t        j                  t        j                  ¬«      | _        | j                   S 7 Œ>­w)Nrg   rj   z?Requesting PyPI.org RPC API for prebuilt JupyterLab extensions.Tz<Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt)r}   r   ry   r   rz   r|   r   r{   r~   r   r­   rx   Úbrowser…   s    r)   Ú__get_all_extensionsz)PyPIExtensionManager.__get_all_extensionsd  s®   è ø€ Ø×$Ñ$Ð,´·±Ü�|‰|ô1
à×1Ñ1´IÀd×FXÑFXÔ4YÑYò1Zð �H‰H�N‰NÐ\Ô]Ø.2×.DÑ.DØØ× Ñ ×'Ñ'ØOÐPó/÷ )ˆDÔ%ô
 5=·L±LÄHÇLÁLÔ4QˆDÔ1à×(Ñ(Ð(ð)ús   ‚BCÂCÂ?CrA   r‰   c              ƒ   óL  ‡K  — t         j                  j                  j                  «       }t	        j
                  «       5 }t	        j                  d|d¬«      5 }|j                  dt        › �«       |j                  «        t        j                  ddddd	d
dd|j                  g
}|�|j                  ‰› d|› �«       n|j                  ‰«       i }	 |j                  «       }|j                  dd«       |j                  dd«       |j                  dd«       |j!                  dt#        t$        |dd¬«      «      ƒ d{  –—† }	t'        j(                  |	j*                  j-                  d«      «      }
t/        t1        ˆfd„|
j3                  dg «      «      «      }| j4                  j7                  dt'        j8                  |
«      › d�«       | j4                  j7                  ddjA                  |«      › d�«       |j!                  dt#        t$        |d¬«      «      ƒ d{  –—† }	| j4                  j7                  d |	jB                  › �«       | j4                  j7                  d!|	j*                  j-                  d«      › �«       |	j<                  j-                  d«      }|	jB                  d"k(  �r@| j4                  j7                  d#|› �«       d}	 |j3                  d$i «      j3                  d%«      }|��›| jD                  j3                  |«      ƒ d{  –—† }|jF                  d&k  �rG|jI                  d'«      r‹tK        tM        jN                  |jP                  «      «      5 }t1        d(„ |jS                  «       «      D ];  }t'        j(                  |jU                  |«      «      }|j3                  d)«      }|€Œ; n ddd«       nÌ|jI                  d*«      r»tW        tM        jN                  |jP                  «      «      5 }t1        d+„ |jY                  «       «      D ]J  }t'        jZ                  |j]                  |j_                  |«      «      «      }|j3                  d)«      }|€ŒJ n ddd«       n!| j4                  j7                  d,|› d-|›�«       d/g}|�<|j3                  d0i «      }d1|v r|j                  d1«       d2|v r|j                  d2«       ta        d3|¬4«      cddd«       cddd«       S | j4                  jc                  d5‰› d6|	jB                  › d7|› �«       ta        d8|¬9«      cddd«       cddd«       S 7 �Œü# t:        $ r5}| j4                  j7                  d|j<                  › �|¬«       Y d}~�Œ«d}~wt>        $ r(}| j4                  j7                  d|¬«       Y d}~�ŒÚd}~ww xY w7 �Œ�7 �Œ # 1 sw Y   �Œ0xY w# 1 sw Y   �Œ=xY w# t>        $ r(}| j4                  j7                  d.|¬«       Y d}~�Œld}~ww xY w# 1 sw Y   nxY w	 ddd«       y# 1 sw Y   yxY w­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:
            name: The extension name
            version: The version to install; default None (i.e. the latest possible)
        Returns:
            The action result
        zw+F)ÚmodeÚdirÚdeletezjupyterlab==ú-mÚpipr”   ú
--no-inputz--quietz--progress-barÚoffz--constraintNz==rÁ   z	--dry-runz--reportÚ-T)Úcapture_outputÚcheckúutf-8c                 ól   •— | j                  di «      j                  d«      ‰j                  dd«      k(  S )Nr†   rA   ræ   rÿ   )rU   Úreplace)ÚprA   s    €r)   r¾   z.PyPIExtensionManager.install.<locals>.<lambda>¦  s-   ø€  !§%¡%¨
°BÓ"7×";Ñ";¸FÓ"CÀtÇ|Á|ÐTWÐY\ÓG]Ò"]r+   zActions to be executed by pip rl   z!Fail to get installation report: ©Úexc_infoz Fail to get installation report.úExecuting 'Ú Ú'©r   úreturn code: ústdout: r   ústderr: Údownload_inforÑ   rJ   z.whlc                 ó2   — t        | «      j                  dk(  S ©Nzpackage.json©r
   rA   ©Úfs    r)   r¾   z.PyPIExtensionManager.install.<locals>.<lambda>Æ  ó   € ´$°q³'·,±,À.Ò2Pr+   Ú
jupyterlabztar.gzc                 ó2   — t        | «      j                  dk(  S r  r  r  s    r)   r¾   z.PyPIExtensionManager.install.<locals>.<lambda>Ð  r  r+   zFailed to get 'z'; zFail to get package.json.ÚfrontendÚ	discoveryÚkernelÚserverÚok©ÚstatusÚneeds_restartzFailed to install ú: code Ú
Úerror©r  Úmessage)2r�   rž   rŸ   r    ÚtempfileÚTemporaryDirectoryÚNamedTemporaryFileÚwriter   Úflushrƒ   Ú
executablerA   rÞ   ÚcopyÚinsertr¡   r   r   rW   rX   ÚstdoutÚdecodeÚnextrÙ   rU   r~   r   Údumpsr   Ústderrr�   ÚjoinÚ
returncoderr   rV   Úendswithr   ÚioÚBytesIOr‹   ÚnamelistÚreadr   ÚgetnamesÚloadÚextractfileÚ	getmemberr   r"  )r%   rA   r‰   r¯   Úve_dirÚfconstraintÚcmdlineÚ
pkg_actionÚtmp_cmdÚresultÚaction_inforÀ   r°   r"  Újlab_metadataÚdownload_urlrZ   ÚwheelÚfilenamer[   ÚsdistÚ
follow_upsr  s    `                     r)   r”   zPyPIExtensionManager.installr  sQ  øè ø€ ô —~‘~×,Ñ,×4Ñ4Ó6ˆä×'Ñ'Ô)¨VÜ×'Ñ'¨T°vÀeÕLÐP[à×Ñ ¬[¨MÐ:Ô;Ø×ÑÔô —‘ØØØØØØ ØØØ× Ñ ðˆGð Ð"Ø—‘ $  r¨'¨Ð3Õ4à—‘˜tÔ$àˆJð\Ø!Ÿ,™,›.�Ø—‘˜r ;Ô/Ø—‘˜r :Ô.Ø—‘˜r 3Ô'Ø+×;Ñ;Øœ'¤# w¸tÈ4ÔPó ÷ �ô #Ÿj™j¨¯©×)=Ñ)=¸gÓ)FÓG�Ü!ÜÛ]Ø#Ÿ™¨	°2Ó6óó�
ð —‘—‘Ð!?ÄÇ
Á
È;Ó@WÐ?XÐXYÐZÔ[à�H‰H�N‰N˜[¨¯©°'Ó):Ð(;¸1Ð=Ô>à'×7Ñ7Ø”gœc 7¸4Ô@ó÷ ˆFð �H‰H�N‰N˜]¨6×+<Ñ+<Ð*=Ð>Ô?Ø�H‰H�N‰N˜X f§m¡m×&:Ñ&:¸7Ó&CÐ%DÐEÔFØ—M‘M×(Ñ(¨Ó1ˆEØ× Ñ  AÓ%Ø—‘—‘ ¨%¨Ð1Ô2à $�ðLØ(2¯©°ÈÓ(K×(OÑ(OÐPUÓ(V�LØ#Ñ/Ø)-×);Ñ);×)?Ñ)?ÀÓ)M×#M˜Ø#×/Ñ/°#Ó5Ø+×4Ñ4°VÔ<Ü%,¬R¯Z©Z¸×8HÑ8HÓ-IÔ%JÈeÜ4:Ù(PØ(-¯©Ó(8ö5&¨ô 04¯z©z¸%¿*¹*ÀXÓ:NÓ/O¨Ø8<¿¹ÀÓ8N¨Ø+8Ñ+DÙ,1ð5&÷ &KÐ%Jð ".×!6Ñ!6°xÔ!@Ü%,¬R¯Z©Z¸×8HÑ8HÓ-IÔ%JÈeÜ4:Ù(PØ(-¯©Ó(8ö5&¨ô 04¯y©yØ,1×,=Ñ,=¸e¿o¹oÈhÓ>WÓ,Xó0*¨ð 9=¿¹ÀÓ8N¨Ø+8Ñ+DÙ,1ð5&÷ &KÐ%Jð !ŸH™HŸN™N¨_¸\¸NÈ#ÈhÈ\Ð+ZÔ[ð
 ð�
ð !Ð,Ø -× 1Ñ 1°+¸rÓ B�IØ 9Ñ,Ø"×)Ñ)¨(Ô3Ø 9Ñ,Ø"×)Ñ)¨(Ô3ä#¨4¸zÔJ÷K MÐL÷ *Ñ)ðP —‘—‘Ð!3°D°6¸À×ARÑARÐ@SÐSUÐV[ÐU\Ð]Ô^Ü#¨7¸EÔB÷Q MÐL÷ *Ñ)ð:úô &ò [Ø—‘—‘Ð!BÀ1Ç8Á8À*ÐMÐXY�×ZÒZûÜò QØ—‘—‘ÐAÈC�×PÒPûðQúðùð $Nù÷ &KÑ%Jú÷ &KÑ%Jûô !ò LØ—H‘H—N‘NÐ#>È�N×KÒKûðLú÷q MÐLúÐL÷ *×)Ñ)üs*  ƒ=X$Á XÁA9XÃA,T>Ä?T;Å AT>ÆBXÈV.È B.XËAWÌV1ÌAWÍAV4Î6V4Î9AWÏ;A%WÑ!WÑ$*WÒAXÓ	XÓ$
X$Ó.:XÔ(	XÔ1
X$Ô;T>Ô>	V+Õ*U7Õ1XÕ7V+ÖV&Ö XÖ&V+Ö+XÖ1WÖ4V>Ö9W×W×W×	W?×W:×4X×:W?×?XØX	ØXØ	X$ØX!ØX$c           	   ƒ   óÖ  K  — t         j                  j                  j                  «       }t        j
                  ddddd|g}d}	 |j                  «       }|j                  d«       |j                  dt        t        |d¬«      «      ƒ d{  –—† }t        d	„ t        d
„ |j                  j                  d«      j                  «       «      «      }t        d„ t        t         |«      «      D ]:  }t#        j$                  |j'                  «       «      }	|	j)                  d«      }|€Œ: n | j,                  j/                  ddj1                  |«      › d�«       |j                  dt        t        |d¬«      «      ƒ d{  –—† }| j,                  j/                  d|j2                  › �«       | j,                  j/                  d|j                  j                  d«      › �«       |j4                  j                  d«      }|j2                  dk(  rl| j,                  j/                  d|› �«       dg}|�<|j)                  di «      }d|v r|j7                  d«       d|v r|j7                  d«       t9        d|¬«      S | j,                  j;                  d|› d|j2                  › d|› �«       t9        d |¬!«      S 7 �Œ$# t*        $ r(}
| j,                  j/                  d|
¬«       Y d}
~
�Œ·d}
~
ww xY w7 �Œl­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ü   Ú	uninstallz--yesrý   NTr  c                 ó$   — | j                  d«      S r  )r4  ©Úlines    r)   r¾   z0PyPIExtensionManager.uninstall.<locals>.<lambda>  s   € ˜TŸ]™]¨>Ô:r+   c                 ó"   — | j                  «       S r"   )ÚstriprM  s    r)   r¾   z0PyPIExtensionManager.uninstall.<locals>.<lambda>  s
   €  §¡¤r+   r  c                 ó    — | j                   dk(  S r  rÕ   r  s    r)   r¾   z0PyPIExtensionManager.uninstall.<locals>.<lambda>  s   € ˜!Ÿ&™& NÒ2r+   r  z%Fail to list files to be uninstalled.r  r  r	  r
  r  r  r   r  r  r  r  r  r  r  zFailed to installed r   r!  r"  r#  )r�   rž   rŸ   r    rƒ   r*  r+  Úremover¡   r   r   rÙ   Úmapr-  r.  Ú
splitlinesr
   rW   rX   Ú
read_bytesrU   r�   r~   r   r2  r3  r1  rÞ   r   r"  )r%   r�   r¯   r?  rD  rA  rB  ÚlinesÚfilepathr[   rÀ   r"  rI  r  s                 r)   rK  zPyPIExtensionManager.uninstallí  sž  è ø€ ô —~‘~×,Ñ,×4Ñ4Ó6ˆä�N‰NØØØØØØð
ˆð ˆð	PØ—l‘l“nˆGØ�N‰N˜7Ô#Ø'×7Ñ7Ø”gœc 7¸4Ô@ó÷ ˆFô Ù:ÜÑ-¨v¯}©}×/CÑ/CÀGÓ/L×/WÑ/WÓ/YÓZóˆEô #Ù2Ü”D˜%Ó ö�ô —z‘z (×"5Ñ"5Ó"7Ó8�Ø $§¡¨Ó 6�Ø Ñ,Ùðð 	�‰�‰˜ S§X¡X¨gÓ%6Ð$7°qÐ9Ô:à#×3Ñ3Ø”'œ#˜w°tÔ<ó
÷ 
ˆð 	�‰�‰˜ v×'8Ñ'8Ð&9Ð:Ô;Ø�‰�‰˜ &§-¡-×"6Ñ"6°wÓ"?Ð!@ÐAÔBØ—‘×$Ñ$ WÓ-ˆØ×Ñ Ò!Ø�H‰H�N‰N˜X e WÐ-Ô.àðˆJð Ð(Ø)×-Ñ-¨k¸2Ó>�	Ø˜yÑ(Ø×%Ñ% hÔ/Ø˜yÑ(Ø×%Ñ% hÔ/ä t¸:ÔFÐFà�H‰H�N‰NÐ1°)°¸GÀF×DUÑDUÐCVÐVXÐY^ÐX_Ð`ÔaÜ w¸Ô>Ð>ðUúô ò 	PØ�H‰H�N‰NÐBÈQˆN×OÒOûð	Púð

ûsX   ‚AK)ÁAJ2 ÂJ/ÂBJ2 Ä$J2 Ä'AK)Å:K&Å;D4K)Ê/J2 Ê2	K#Ê;KËK)ËK#Ë#K)c                 óf   — |j                  dd«      j                  dd«      j                  dd«      S )zÂNormalize extension name.

        Remove `@` from npm scope and replace `/` and `_` by `-`.

        Args:
            name: Extension name
        Returns:
            Normalized name
        Ú@rŠ   rF   rÿ   ræ   )r  )r%   rA   s     r)   r•   z$PyPIExtensionManager._normalize_name6  s/   € ð �|‰|˜C Ó$×,Ñ,¨S°#Ó6×>Ñ>¸sÀCÓHÐHr+   )NNNr"   )'r5   r6   r7   Ú__doc__r   rC   r   r{   r   rt   r¬   r   Údictr   ÚConfigurablern   Úpropertyr   r†   rÛ   rŽ   r   r—   Úboolr   r   r­   r   rs   r¨   Útupleró   rÚ   rØ   r   r”   rK  r•   Ú__classcell__)r€   s   @r)   r_   r_   z   sÏ  ø„ ÙYáÐ.°tÐB_Ô`€HáØ˜Ð$Tô€Mñ #'Ø�TÐ Fô#Ðñ $ØØØVôÐð '+Ø&*Ø04ñ	à˜d‘^ðð ˜d‘^ðð ˜×,Ñ,Ñ-ð	ð
 
õð4 ðBÐ2ò Bó ðBðX¨Cð X°H¸S±Mó Xð.4Ð-=ð 4À#ó 4ð& °ð  ¸8ð  Èsó  ñD Ð*Ó+ñ
ó ,ð
ð
d'Øðd'Ø #ðd'Ø/2ðd'à	ˆt�CÐ)Ð)Ñ*¨H°S©MÐ9Ñ	:ód'ðL)¨D°°s¸C°x±Ñ,Aó )ñyC #ð yC°¸±ð yCÈó yCðvG?¨ð G?°ó G?ðR
I Cð 
I¨C÷ 
Ir+   r_   )NrZ  rª   Úhttp.clientr.   r5  rW   rà   r¦   rƒ   r%  Úxmlrpc.clientru   r   r   r   Ú	functoolsr   Ú	itertoolsr   Úosr	   Úpathlibr
   Ú
subprocessr   r   Útarfiler   Útypingr   r   r   Úurllib.parser   Úzipfiler   ro   r�   Ú	async_lrur   Úpackaging.versionr   Ú	traitletsr   r   r   r   r   Újupyterlab._versionr   Újupyterlab.extensions.managerr   r   r   r   r/   Ú	Transportr    rU   Úall_proxy_urlÚhttp_proxy_urlÚhttps_proxy_urlÚ_httpx_versionrq   rw   r:   ÚnetlocÚ	partitionÚ
proxy_hostræ   Ú
proxy_portÚAsyncHTTPTransportr*   rp   rÛ   r[  r]   r_   r8   r+   r)   Ú<module>r{     sé  ðñ Vã Û Û 	Û Û Û 	Û 
Û Û ß 2Ñ 2Ý Ý Ý Ý ß .Ý ß *Ñ *Ý !Ý ã Û Ý  Ý %ß <Õ <å +÷ó ô	�v—}‘}×.Ñ.ô 	ð �—‘˜KÓ(€ð �—‘˜\Ó*ÒX¨k¨g¯k©k¸,Ó.GÒXÈ=€à€G‡K�K�ÓÒ_ + '§+¡+¨mÓ"<Ò_ÀÒ_ÐR_ð ñ
 ˜×*Ñ*Ó+€ØÐ à Ð áÙ˜.Ó)€JØ *× 1Ñ 1× ;Ñ ;¸CÓ @Ñ€J��:à™ Ó*Ò*àØ3˜5×3Ñ3¸.ÔIØ4˜E×4Ñ4¸?ÔKñð
Ñð Ø)Ø+ñð
Ðñ !1Ó 2ÐØ×'Ñ'¨
°JÔ?ðØ×Ñðà
ðð ðð ð	ð
 
óô@FIÐ+õ FIr+   