
    GhV              
          S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
rSSKJrJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJr  SS
KJrJrJr  SSK J!r!  SSK"J#r#  SSK$r$SSK%r%SSK&J'r'  SSK(J)r)  SSK*J+r+J,r,J-r-J.r.J/r/  SSK0J1r1  SSK2J3r3J4r4J5r5J6r6   " S S\Rn                  Rp                  5      r9\Rt                  " S5      r;\Rt                  " S5      =(       d    \Rt                  " S5      =(       d    \;r<\Rt                  " S5      =(       d$    \Rt                  " S5      =(       d    \<=(       d    \;r=\)" \$Rb                  5      r>0 r?Sr@\<(       aw  \!" \<5      rA\AR                  R                  S5      u  rDrErF\>\)" S5      :  a$  S\$R                  " \<S9\$R                  " \=S9S.0r?OS\<\=S.0r?\9" 5       r@\@R                  \D\F5        S\$R                  S \JS!\JS"\JS#\K4
S$ jrL " S% S&\45      rMg)'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                   $    \ rS rSrSS jrS rSrg)ProxiedTransport)   Nc                      X4U l         X0l        g N)proxyproxy_headers)selfhostportheaderss       mC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\jupyterlab/extensions/pypi.py	set_proxyProxiedTransport.set_proxy*   s    Z
$    c                     [         R                  R                  " U R                  6 nUR	                  XR
                  S9  X4U l        U$ )Nr)   )httpclientHTTPConnectionr$   
set_tunnelr%   _connection)r&   r'   
connections      r*   make_connection ProxiedTransport.make_connection.   sB    [[//<
d,>,>?+r-   )r4   r$   r%   )NN)__name__
__module____qualname____firstlineno__r+   r6   __static_attributes__ 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://proxiesr1   namelatest_versionbase_urlreturnc                 &  #    U R                  USU SU S3-   SS0S9I S h  vN nUR                  S:  aQ  [        R                  " UR                  5      R                  S5      nS Vs0 s H  nXeR                  U5      _M     sn$ 0 $  Ngs  snf 7f)	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)r1   rF   rG   rH   responsedataks          r*   _fetch_package_metadatarb   Z   s      ZZQtfAn-U33!34    H c!zz(--(,,V4



 xx{N

 	
 	/
s"    BB
AB*BBBc                     ^  \ rS rSrSr\" SSSS9r\" SSSS9r\	" S	SS
S9r
\" SSSS9r   S(S\\   S\\   S\\R                     SS4U 4S jjjr\S\4S j5       rS\S\\   4S jrS\S\4S jrS\S\S\4S jr\" S5      S 5       rS\S\S\S\\\\4   \\   4   4S  jr S\!\\\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r&S'r'U =r($ )*PyPIExtensionManagerz   r   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parentrI   c                   > [         TU ]  XU5        [        R                  " S	0 [        D6U l        [        [        U R
                  5      U l        U R                  SU R                  05        [        R                  R                  U R                  [        S9U l        [         R"                  " [$        R&                  S9[)        U R*                  S-  S9-
  U l        S U l        U R0                  R3                  SU R                   S35        [        (       a-  U R0                  R5                  S[        R6                   35        g g )
Nnew)	transporttz)\(?secondsz%Extensions list will be fetched from .z=Extensions will be fetched using proxy, proxy host and port: r=   )super__init__httpxAsyncClient_httpx_client_args_httpx_clientr   rb   $_observe_package_metadata_cache_sizepackage_metadata_cache_sizexmlrpcr1   ServerProxyrH   xmlrpc_transport_override_rpc_clientr   nowr   utcr   cache_timeout5_PyPIExtensionManager__last_all_packages_request_time)_PyPIExtensionManager__all_packages_cachelogdebugrP   r$   )r&   rg   rh   ri   	__class__s       r*   rt   PyPIExtensionManager.__init__   s    	6:"..D1CD'./FHZHZ'[$115$:Z:Z2[\!==44MM%> 5 
 190MPY&&-Q
 1
- %)!>t}}oQOP$$HHMMOPiPoPoOpq %r-   c                 8    [        SS[        R                  5      $ )zExtension manager metadata.PyPIT)r   sysprefixr&   s    r*   metadataPyPIExtensionManager.metadata   s     (cjjAAr-   pkgc                   #     U R                   R                  U R                  SU S3-   SS0S9I Sh  vN nUR                  S:  a1  [        R
                  " UR                  5      R                  S0 5      nO U R                  R                  S	U< 35        g [        R                  " UR                  S
S5      5      =(       d    S$  N! [         a     gf = f7f)zReturn the latest available version for a given extension.

Args:
    pkg: The extension to search for
Returns:
    The latest available version
rK   rL   rM   rN   r/   NrO   rP   z+Failed to get package information on PyPI; version )rx   rZ   rH   r[   r\   r]   contentr   r   r   get_semver_version	Exception)r&   r   r_   r`   s       r*   get_latest_version'PyPIExtensionManager.get_latest_version   s     	X!//33!C5.I[8\ 4  H ##c)zz("2"2377C!LXLYZ  $66txx	27NOWSWW  		s?   C0C C
A$C C/C
C 
CCCC	extensionc                     UR                   b)  UR                   nUS   S:X  a  U R                  US   5      $ U R                  UR                  5      $ )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
packageManagerpythonpackageName)install_normalize_namerF   )r&   r   install_metadatas      r*   get_normalized_name(PyPIExtensionManager.get_normalized_name   sV     ((00 01X=++,<],KLL##INN33r-   	recursivefnc                   #    [         R                  R                  R                  5       n UR                  " SU/UQ76 I Sh  vN nU$  N! [
        R                  R                   Ga  nUR                  S:X  a  UR                  R                  S5      (       a  Sn[        R                  " SUR                  5      nUb#  [        UR                  S5      =(       d    S5      nU R                  R!                  SU S	35        ["        R$                  " XpR&                  -  S
-   5      I Sh  vN    U(       a#  U R(                  " SU/UQ76 I Sh  vN  n SnAU$ UR                  " SU/UQ76 I Sh  vN  n SnAW$ SnAff = f7f)zThrottle 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:ro   z!Limit may reset in (\d+) seconds.   1z>HTTPTooManyRequests - Perform next call to PyPI XMLRPC API in zs.g{Gz?F)tornadoioloopIOLoopcurrentrun_in_executorr{   r1   Fault	faultCodefaultString
startswithresearchintgroupr   rP   asynciosleeprpc_request_throttling&_PyPIExtensionManager__throttleRequest)	r&   r   r   argscurrent_loopr`   errdelaymatchs	            r*   __throttleRequest&PyPIExtensionManager.__throttleRequest   sR     ~~,,446	O%55dBFFFD$ % G}}"" 	O}}&3??+E+E&, , 		"FX$A 5#6ETUZT[[]^ mmE,G,G$G$$NOOO!%!7!7r!ID!IIID  ".!=!=dB!N!NNND#	Osq   )FA A
A F
A F+C E>+D.,#E>EE>FE>2E53E>8F>FFrz   c                 b    [        US   S9" [        [        U R                  5      5      U l        g )Nrk   )maxsize)r   r   rb   rx   )r&   changes     r*   ry   9PyPIExtensionManager._observe_package_metadata_cache_size   s)    '1&-'H+T-?-?@(
$r-   querypageper_pagec                   ^^#    U R                  5       I Sh  vN n0 n/ n[        [        U4S jU5      S 5       GH)  u  px[        U5      S   u  pU R	                  XzU R
                  5      I Sh  vN nU R                  U5      nUR                  S5      =(       d    0 nUR                  S5      nUR                  S5      =(       d    UR                  S5      nUR                  S	5      =(       d    UR                  S
5      nUR                  S5      =(       d    UR                  S5      nU=(       dD    UR                  S5      =(       d,    UR                  S5      =(       d    U=(       d    U=(       d    Un[        UUR                  S5      UUR                  S5      UR                  S5      [        R                  " U
5      SUUUR                  S5      US9nSnXU4 Vs/ s H%  nU(       d  M  [        U5      R                  5       PM'     nnSS/nU H5  mTU;   a  Sn  O,[        U4S jS 5       5      (       a  Sn  OST;   d  M3  Sn  O   UR                  UU45        GM,     [        US S9nUS-
  U-  nUU-   nUUU nU H  u  n	nUUUR                   '   M     ["        R$                  " ['        U5      U-  5      nUU4$  GN GNZs  snf 7f)aS  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                    > TU S   ;   $ Nr   r=   )mr   s    r*   <lambda>4PyPIExtensionManager.list_packages.<locals>.<lambda>  s    EQqTMr-   c                     U S   $ r   r=   )es    r*   r   r     s    WXYZW[r-   rX   zSource CoderT   HomepagerS   DocumentationrR   zBug TrackerrW   rV   rY   rQ   rU   prebuilt)rF   descriptionhomepage_urlrQ   rU   rG   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   .   >#    U  H
  nUT;   v   M     g 7fr#   r=   ).0orgurls     r*   	<genexpr>5PyPIExtensionManager.list_packages.<locals>.<genexpr>J  s      _ 3J_s   )zgithub.com/jupyter/zjupyter.orgzgithub.com/jupyterlab/r   zgithub.com/jupyterlab-contrib/   c                 *    U S   U S   R                   4$ )Nr   r   rF   )xs    r*   r   r   V  s    AaD!A$));Lr-   )key))_PyPIExtensionManager__get_all_extensionsr   filterlistrb   rH   r   rZ   r   r   r   strloweranyappendsortedrF   mathceillen)r&   r   r   r   matches
extensionsall_matchesrF   r   _rG   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_packages"PyPIExtensionManager.list_packages   s    , 1133
"6*A7#K^\KD $UBA55dDMMZZD"2248O88N39rL%))-8J88K0PL4D4DZ4PL $ 4 Y8H8H8Y"hh~6Y,:J:J=:YO  #88M*#88M*# %# 	#
 #   )$ HHY/0xx)+/BB>R# /"3$(HH]$;)I H-7GZ,[,[S_b C ,[   @BG
 %'> H _    !H5< H % )45w ]z  1LM AX)	h&%i8(LAy)2Jy~~& ) iiN 3h >?;&&] 4 [FsB   KKAK1K2E3K%K4K7KA=KKKc                   #    U R                   bD  [        R                  " [        R                  S9U R
                  [        U R                  S9-   :  aw  U R                  R                  S5        U R                  SU R                  R                  S/5      I S h  vN U l         [        R                  " [        R                  S9U l        U R                   $  N<7f)Nrm   rp   z?Requesting PyPI.org RPC API for prebuilt JupyterLab extensions.Tz<Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt)r   r   r   r   r   r   r   r   r   r   r   r~   browser   s    r*   __get_all_extensions)PyPIExtensionManager.__get_all_extensionsd  s     $$,||1
11IdFXFX4YY1Z HHNN\].2.D.D  ''OP/ )D%
 5=LLHLL4QD1((()s   BCC=CrF   r   c                   ^#    [         R                  R                  R                  5       n[        R
                  " 5        n[        R                  " SUSS9 nUR                  S[         35        UR                  5         [        R                  SSSSS	S
SSUR                  /
nUb  UR                  T SU 35        OUR                  T5        0 n UR                  5       nUR                  SS5        UR                  SS5        UR                  SS5        UR!                  S[#        [$        USSS95      I Sh  vN n	[&        R(                  " U	R*                  R-                  S5      5      n
[/        [1        U4S jU
R3                  S/ 5      5      5      nU R4                  R7                  S[&        R8                  " U
5       S35        U R4                  R7                  SSRA                  U5       S35        UR!                  S[#        [$        USS95      I Sh  vN n	U R4                  R7                  S U	RB                   35        U R4                  R7                  S!U	R*                  R-                  S5       35        U	R<                  R-                  S5      nU	RB                  S":X  GaZ  U R4                  R7                  S#U 35        Sn UR3                  S$0 5      R3                  S%5      nUGb  U RD                  R3                  U5      I Sh  vN nURF                  S&:  Ga\  URI                  S'5      (       a  [K        [L        RN                  " URP                  5      5       n[1        S( URS                  5       5       H>  n[&        R(                  " URU                  U5      5      nUR3                  S)5      nUc  M>    O   SSS5        OURI                  S*5      (       a  [W        [L        RN                  " URP                  5      5       n[1        S+ URY                  5       5       HM  n[&        RZ                  " UR]                  UR_                  U5      5      5      nUR3                  S)5      nUc  MM    O   SSS5        O#O"U R4                  R7                  S,U S-U< 35        S//nUb@  UR3                  S00 5      nS1U;   a  UR                  S15        S2U;   a  UR                  S25        [a        S3US49sSSS5        sSSS5        $ U R4                  Rc                  S5T S6U	RB                   S7U 35        [a        S8US99sSSS5        sSSS5        $  GN! [:         a2  nU R4                  R7                  SUR<                   3US9   SnAGNSnAf[>         a%  nU R4                  R7                  SUS9   SnAGNSnAff = f GN GN! , (       d  f       GN0= f! , (       d  f       GNB= f! [>         a%  nU R4                  R7                  S.US9   SnAGNoSnAff = f! , (       d  f       O= f SSS5        g! , (       d  f       g= f7f):ah  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   > U R                  S0 5      R                  S5      TR                  SS5      :H  $ )Nr   rF   r   r  )rZ   replace)prF   s    r*   r   .PyPIExtensionManager.install.<locals>.<lambda>  s-    !%%
B"7";";F"Ct||TWY\G]"]r-   zActions to be executed by pip rr   z!Fail to get installation report: exc_infoz Fail to get installation report.Executing ' 'r  return code: stdout: r   stderr: download_infor   rO   z.whlc                 2    [        U 5      R                  S:H  $ Nzpackage.jsonr
   rF   fs    r*   r   r        $q',,.2Pr-   
jupyterlabztar.gzc                 2    [        U 5      R                  S:H  $ r"  r#  r$  s    r*   r   r    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   
executablerF   r   copyinsertr   r   r   r\   r]   stdoutdecodenextr   rZ   r   r   dumpsr   stderrr   join
returncoderx   r[   endswithr   ioBytesIOr   namelistreadr   getnamesloadextractfile	getmemberr   r3  )r&   rF   r   r   ve_dirfconstraintcmdline
pkg_actiontmp_cmdresultaction_infor   r   r3  jlab_metadatadownload_urlr_   wheelfilenamer`   sdist
follow_upsr*  s    `                     r*   r   PyPIExtensionManager.installr  sQ     ~~,,446'')V''TveLP[[M:;    G "$r'34t$J\!,,.r;/r:.r3'+;;'#wt4P   #jj)=)=g)FG!]#	26
 !?

;@W?XXYZ[HHNN['):(;1=>'77gc74@ F HHNN]6+<+<*=>?HHNNXfmm&:&:7&C%DEFMM((1E  A%%12 $L(2(K(O(OPU(VL#/)-););)?)?)M#M#//#5+44V<<%,RZZ8H8H-I%Je4:(P(-(85& 04zz%**X:N/O8<8N+8+D,15& &K%J ".!6!6x!@!@%,RZZ8H8H-I%Je4:(P(-(85& 04yy,1,=,=eooh>W,X0* 9=8N+8+D,15& &K%J "A !HHNN_\N#h\+Z[
 
 !, - 1 1+r BI9,"))(39,"))(3#4zJK ML *)P !3D6ARAR@SSUV[U\]^#7EBQ ML *): & [!B188*MXYZ QACPQ $N &K%J &K%J ! LHHNN#>NKLq MLL *))sY  >YX6A:XA)U<U=AUBXV?B/XAW)WAW)%AW?WW)X?W)A%W4W8W) X"W)$AX3	X6<
Y7X=	X6
YU
V<'V
X
V<V71X7V<<XW)
WW)XW)
W&!W)$X&W))
X3XXXX
X)	%X6-	Y6
Y Yc           	        #    [         R                  R                  R                  5       n[        R
                  SSSSSU/nSn UR                  5       nUR                  S5        UR                  S[        [        USS95      I Sh  vN n[        S	 [        S
 UR                  R                  S5      R                  5       5      5      n[        S [        [         U5      5       H=  n["        R$                  " UR'                  5       5      n	U	R)                  S5      nUc  M=    O    U R,                  R/                  SSR1                  U5       S35        UR                  S[        [        USS95      I Sh  vN nU R,                  R/                  SUR2                   35        U R,                  R/                  SUR                  R                  S5       35        UR4                  R                  S5      nUR2                  S:X  an  U R,                  R/                  SU 35        S/nUb@  UR)                  S0 5      nSU;   a  UR7                  S5        SU;   a  UR7                  S5        [9        SUS9$ U R,                  R;                  SU SUR2                   SU 35        [9        S US!9$  GN&! [*         a%  n
U R,                  R/                  SU
S9   Sn
A
GNSn
A
ff = f GNj7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  	uninstallz--yesr  NTr  c                 $    U R                  S5      $ r"  )rE  lines    r*   r   0PyPIExtensionManager.uninstall.<locals>.<lambda>  s    T]]>:r-   c                 "    U R                  5       $ r#   )stripr_  s    r*   r   ra    s
    r-   r  c                      U R                   S:H  $ r"  r   r$  s    r*   r   ra    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 r1  r2  r3  r4  )r   r   r   r   r   r;  r<  remover   r   r   r   mapr>  r?  
splitlinesr
   r\   r]   
read_bytesrZ   r   r   r   rC  rD  rB  r   r   r3  )r&   r   r   rP  rU  rR  rS  linesfilepathr`   r   r3  rZ  r*  s                 r*   r]  PyPIExtensionManager.uninstall  s     ~~,,446NN
 	PllnGNN7#'77gc74@ F :-v}}/C/CG/L/W/W/YZE #2D%  zz("5"5"78 $ 6 , 	SXXg%6$7q9:#33'#wt<
 
 	v'8'8&9:;&--"6"6w"?!@AB$$W-!HHNNXeW-.J ()--k2>	y(%%h/y(%%h/t:FFHHNN1)GFDUDUCVVXY^X_`aw>>U  	PHHNNBQNO	P

sd   AK&AJ1 J.	BJ1 $J1 %K&&J1 (AK&9K#:D4K&.J1 1
K ;KK&K  K&c                 f    UR                  SS5      R                  SS5      R                  SS5      $ )zNormalize extension name.

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

Args:
    name: Extension name
Returns:
    Normalized name
@r   rK   r  r   )r  )r&   rF   s     r*   r   $PyPIExtensionManager._normalize_name6  s/     ||C$,,S#6>>sCHHr-   )__all_packages_cache __last_all_packages_request_timerb   rx   r~   )NNNr#   ))r8   r9   r:   r;   __doc__r   rH   r   r   r   rz   r   r   dictr   Configurablert   propertyr   r   r   r   r   r   boolr   r   r   r   ry   r   tupler  r   r   r   r   r]  r   r<   __classcell__)r   s   @r*   rd   rd   z   s   Y.tB_`H$TM #'T F# $V '+&*04	d^ d^ ,,-	
 
 4 B2 B BXC XHSM X.4-= 4# 4&   8  s  D *+
 ,

d'd' #d'/2d'	tC))*HSM9	:d'L)DsCx,A )yC# yC yC yCvG? G? G?R
IC 
IC 
I 
Ir-   rd   )Nrq  r   http.clientr0   rF  r\   r   r   r   r6  xmlrpc.clientr{   r   r   r   	functoolsr   	itertoolsr   osr	   pathlibr
   
subprocessr   r   tarfiler   typingr   r   r   urllib.parser   zipfiler   ru   r   	async_lrur   packaging.versionr   	traitletsr   r   r   r   r   jupyterlab._versionr   jupyterlab.extensions.managerr   r   r   r   r1   	Transportr    rZ   all_proxy_urlhttp_proxy_urlhttps_proxy_url_httpx_versionrw   r}   r?   netloc	partition
proxy_hostr   
proxy_portAsyncHTTPTransportr+   rv   r   rr  rb   rd   r=   r-   r*   <module>r     s   V   	   	 
   2 2     .  * * !      % < < + 	v}}.. 	 K( \*Xgkk,.GX=KK_'++m"<__R_ 
 **+   .)J * 1 1 ; ;C @J:** 33.I!44?K
 )+
 !1 2''
J?
  	
 
@FI+ FIr-   