
    lKjY                     P   d dl Z d dlZd dlmZmZmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZm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 ej2                  j5                  dd      d        Zd Zej2                  j5                  dd       edd       ed      d                      Zej2                  j5                  dd      d        Zd Zd Z  ede      d        Z! ede      d        Z" ede      d        Z#d Z$ ede      d         Z% ede      d!        Z& ede      d"        Z'd# Z(d$ Z) edd       ed      d%               Z* edd       ed      d&               Z+d' Z,g d(Z-ej2                  j5                  d)e-      d*        Z.ej2                  j5                  d)e-      d+        Z/ej2                  j5                  d)e-      d,        Z0d- Z1ej2                  j5                  d.g d/      d0        Z2ej2                  j5                  d1g d2      d3        Z3d4 Z4y)5    N)	AsyncMockMockpatch)web)ConfigConfigurable)PyPIExtensionManagerReadOnlyExtensionManager)ExtensionManagerExtensionPackagePluginManager _check_python_version_compatible)ExtensionHandler   )fake_client_factoryzrequires_python, expected)NT) T>=3.6T)z>=3.6,<4Tz>=99.0F)z<3.0F)zinvalid-specifierTc                 .    t        |       \  }}||k(  sJ y)z5Test the Python version compatibility check function.Nr   )requires_pythonexpectedresult_s       q/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/jupyterlab/tests/test_extensions.py$test_check_python_version_compatibler      s      1AIFAX    c                      dt         j                  j                   dt         j                  j                   } t	        |       d   du sJ y)zFTest that current Python version is compatible with its own specifier.z>=.r   TN)sysversion_infomajorminorr   )currents    r   4test_check_python_version_compatible_current_versionr'   *   sF    3##))*!C,<,<,B,B+CDG+G4Q74???r   z!requires_python, expected_allowed)r   r   r   z)jupyterlab.extensions.pypi.LANGUAGE_PACKS z(jupyterlab.extensions.pypi.xmlrpc.clientc                   K   t        t        ddgg            }t        |      | _        t               }fd}||_        |j	                  d       d{   \  }}t        |      dk(  sJ |d	   }|j                  dk(  sJ |j                  |k(  sJ |sd
|j                  v sJ y|j                  dk(  sJ y7 cw)zSTest that allowed attribute is correctly set based on Python version compatibility.test-extension1.0.0return_valuebrowsec                    K   dddS w)Nr*   A test extension)namesummaryr   r(   )r2   versionbase_urlr   s      r   mock_pkg_metadatazWtest_extension_package_allowed_set_from_python_compatibility.<locals>.mock_pkg_metadataC   s     $).
 	
s   
testNr   r   zRequires Pythonr1   )	r   ServerProxyr	   _fetch_package_metadatalist_extensionslenr2   alloweddescription)	mocked_rpcclientr   expected_allowedproxymanagerr6   
extensionsr   exts	    `       r   <test_extension_package_allowed_set_from_python_compatibilityrD   0   s      ,<g+F*GHIE#'U#; "$G
 '8G#!11&99MJz?a
Q-C88'''';;**** COO333"4444 :s   AB>B<A$B>zversion, expected)	)1rE   )1.0rF   )r+   r+   )z1.0.0a52z1.0.0-alpha.52)z1.0.0b3z1.0.0-beta.3)z	1.0.0rc22z1.0.0-rc.22)z1.0.0rc23.post2z1.0.0-rc.23)z1.0.0rc24.dev2z1.0.0-rc.24)z1.0.0rc25.post4.dev2z1.0.0-rc.25c                 8    t        j                  |       |k(  sJ y N)r   get_semver_version)r4   r   s     r   (test_ExtensionManager_get_semver_versionrJ   X   s     ..w78CCCr   c                    K   t        dddd      fd}| j                  t        d|       t               }|j                          d {   }|gdfk(  sJ y 7 w)N
extension1Extension 1 descriptionr   prebuiltc                     K   diS w)NrL   r(   )argskwargsrL   s     r   mock_installedzGtest_ExtensionManager_list_extensions_installed.<locals>.mock_installedm   s     j))s   _get_installed_extensionsr   r   setattrr
   r:   )monkeypatchrR   rA   rB   rL   s       @r   /test_ExtensionManager_list_extensions_installedrW   j   sf     !,0I2zZJ* 02M~^&(G..00J:,**** 1s   AAAAc                    K   t        dddd      t        dddd      fd}| j                  t        d|       t               }|j                  d	       d {   }|gd
fk(  sJ y 7 w)NrL   rM   r   rN   
extension2Extension 2 descriptionc                     K   dd fS wN)rL   rY   r(   rP   rQ   rL   rY   s     r   	mock_listz>test_ExtensionManager_list_extensions_query.<locals>.mock_list}        (
CTII   list_packagesrC   r   rT   )rV   r^   rA   rB   rL   rY   s       @@r   +test_ExtensionManager_list_extensions_queryrb   y   s|     !,0I2zZJ!,0I2zZJJ 0/9M&(G..u55J:z2A6666 6s   AA/A-A/z"tornado.httpclient.AsyncHTTPClient)new_callablec                 D  K   t        dddd      t        dddd      t        j                  dddigi      j                         | _        fd	}|j                  t        d
|       t        ddhi      }|j                  d       d {   }|gdfk(  sJ y 7 w)NrL   rM   r   rN   rY   rZ   allowed_extensionsr2   c                     K   dd fS wr\   r(   r]   s     r   r^   zDtest_ExtensionManager_list_extensions_query_allow.<locals>.mock_list   r_   r`   ra   allowed_extensions_urishttp://dummy-allowed-extensionext_optionsrC   r   r   jsondumpsencodebodyrU   r
   r:   mock_clientrV   r^   rA   rB   rL   rY   s        @@r   1test_ExtensionManager_list_extensions_query_allowrr           !,0I2zZJ!,0I2zZJzz#76<:P9Q"RSZZ\KJ 0/9M&.1Q0RSG ..u55J:,**** 6   B
B BB c                 D  K   t        dddd      t        dddd      t        j                  dddigi      j                         | _        fd	}|j                  t        d
|       t        ddhi      }|j                  d       d {   }|gdfk(  sJ y 7 w)NrL   rM   r   rN   rY   rZ   blocked_extensionsr2   c                     K   dd fS wr\   r(   r]   s     r   r^   zDtest_ExtensionManager_list_extensions_query_block.<locals>.mock_list   r_   r`   ra   blocked_extensions_urishttp://dummy-blocked-extensionri   rC   r   rk   rp   s        @@r   1test_ExtensionManager_list_extensions_query_blockrz      rs   rt   c                 P  K   t        dddd      t        dddd      t        j                  ddigddigd      j                         | _        fd	}|j                  t        d
|       t        dhdhd      }|j                  d       d {   }|gdfk(  sJ y 7 w)NrL   rM   r   rN   rY   rZ   r2   re   rv   c                     K   dd fS wr\   r(   r]   s     r   r^   zJtest_ExtensionManager_list_extensions_query_allow_block.<locals>.mock_list   r_   r`   ra   rh   ry   rg   rx   ri   rC   r   rk   rp   s        @@r   7test_ExtensionManager_list_extensions_query_allow_blockr      s     !,0I2zZJ!,0I2zZJzz$*L#9":$*L#9":	

 fh J 0/9M&(H'I(H'I
G ..u55J:,**** 6s   BB&B$B&c                  ^   K   t               } | j                  d       d {   du sJ y 7 	w)Nzany-extensionTr	   is_install_allowedrA   s    r   2test_ExtensionManager_is_install_allowed_no_policyr      s-     "$G++O<<DDD<   -+
-c                    K   t        j                  dddigi      j                         | _        t	        ddhi      }|j                  d       d {   du sJ |j                  d       d {   d	u sJ y 7 &7 w)
Nre   r2   jupyterlab-gitrg   rh   ri   Tjupyterlab-evilFrl   rm   rn   ro   r	   r   rq   rA   s     r   2test_ExtensionManager_is_install_allowed_allowlistr      s     zz#76CS:T9U"VW^^`K".1Q0RSG ++,<==EEE++,=>>%GGG >>$   AA>A:A>0A<1
A><A>c                    K   t        j                  dddigi      j                         | _        t	        ddhi      }|j                  d       d {   du sJ |j                  d       d {   d	u sJ y 7 &7 w)
Nrv   r2   r   rx   ry   ri   Fr   Tr   r   s     r   2test_ExtensionManager_is_install_allowed_blocklistr      s     zz#76CT:U9V"WX__aK".1Q0RSG ++,=>>%GGG++,<==EEE ?=r   c                   K   t        j                  ddigddigd      j                         | _        t	        dhdhd      }|j                  d       d {   du sJ |j                  d	       d {   d
u sJ y 7 &7 w)Nr2   r   r|   rh   ry   r~   ri   Tr   Fr   r   s     r   Ctest_ExtensionManager_is_install_allowed_allowlist_takes_precedencer      s     zz$*,<#=">$*,<#=">	

 fh  #(H'I(H'I
G ++,<==EEE++,=>>%GGG >>s$   ABB B6B7
BBc                     K   t               } | j                  d       d {   }|j                  dk(  sJ |j                  dk(  sJ y 7 'w)NrL   errorz%Extension installation not supported.)r
   installstatusmessagerA   r   s     r   test_ExtensionManager_installr      sI     &(G??<00F==G###>>DDDD 1   AA	(Ac                     K   t               } | j                  d       d {   }|j                  dk(  sJ |j                  dk(  sJ y 7 'w)NrL   r   z Extension removal not supported.)r
   	uninstallr   r   r   s     r   test_ExtensionManager_uninstallr     sK     &(G$$\22F==G###>>???? 3r   c           	      Z  	K   dddiddddidddd	d
dd	ddddddidg}t        t        |D cg c]	  }|d   dg c}            }t        |      | _        t               }|D ci c]  }|d   ddi| c}		fd}||_        |j	                  dd       d {   \  }}|D cg c]  }|j
                   c}g dk(  sJ |dk(  sJ |j	                  ddd       d {   \  }}|D cg c]  }|j
                   c}g dk(  sJ y c c}w c c}w 7 zc c}w 7 :c c}w w)Njupyterlab-apodHomepagez-https://github.com/jupyterlab/jupyterlab_apod)r2   project_urlsjupyterlab-gitlabz>https://github.com/jupyterlab-contrib/jupyterlab-gitlab/issuesr   ,https://github.com/jupyterlab/jupyterlab-git)r2   project_urljupyterlab-rainbow-bracketsz9https://github.com/krassowski/jupyterlab-rainbow-bracketsnbdimez!https://github.com/jupyter/nbdime)r2   	home_pageriseSource Codez*https://github.com/jupyterlab-contrib/riser2   r+   r,   r.   r4   c                    K   |    S wrH   r(   )r2   lbrB   s      r   r6   zKtest_ExtensionManager_list_extensions_query_sort.<locals>.mock_pkg_metadata9  s     $s   	r      )per_page)r   r   r      )pager   )r   r   r   )r   r8   r	   r9   r:   r2   )
r>   extension_data	extensionr@   rA   r6   
first_pagepages_countsecond_pagerB   s
            @r   0test_ExtensionManager_list_extensions_query_sortr     s    
 &K	
 (\	
 %I	

 2V	
 (KLK	
-N< P^!_P^99V#4g">P^!_`E $(U#; "$G O]N\	&Iw<)<<nJ  '8G#$+$;$;B$;$KKJ,67JyINNJ7 <    !%,%<%<RaRS%<%TTK,78KyINNK8 =   3 "` L7  U8sX   /D+D ,D+,D=%D+"D#D+.D(D+)D$*D+5D&D+D+&D+c                 H  K   t        dddddddd	      }t        d
ddddddddd
      }t        t        ddgddgddgddgddgd
dgd
dgg            }t        |      | _        t               }d }||_        |j                  d       d {   }|||gdfk(  sJ y 7 w)Nr   4A JupyterLab extension for version control using gitr   rN   0.37.1Jupyter Development TeamBSD-3-Clause(https://pypi.org/project/jupyterlab-git/)r2   r=   homepage_urlpkg_typelatest_versionauthorlicensepackage_manager_urljupyterlab-github)JupyterLab viewer for GitHub repositoriesChttps://github.com/jupyterlab/jupyterlab-github/blob/main/README.md3.0.1Ian Rose6https://github.com/jupyterlab/jupyterlab-github/issues+https://pypi.org/project/jupyterlab-github//https://github.com/jupyterlab/jupyterlab-github)
r2   r=   r   r   r   r   r   bug_tracker_urlr   repository_urlz0.33.0z0.34.0z0.34.1z0.37.0z3.0.0r,   r.   c                   K   | dk(  roi dddddd dd ddd	d
dd dddddddi ddddddddddddi dddddg d d!g d"g d#d$g d%g d&g d'g d(d)d*g d+d,d-d.d.d.d/d0d d1d d2d S i dd3dd4dd dd dd5d	d6dd dddddddd7d8d9d:dd;dd<dddddd=ddi dd>dddg d?d!g d"d@gd$g d%g d&g d'g d(dAd*g d+dBd-d.d.d.d/d0d d1d d2d S w)CNr   r2   r4   r   stable_versionbugtrack_urlpackage_urlr   release_urlz/https://pypi.org/project/jupyterlab-git/0.37.1/docs_urlr   r   download_urlr   r   r   r   r   author_email
maintainermaintainer_emailr3   r   r   r   keywordsz7Jupyter,JupyterLab,JupyterLab3,jupyterlab-extension,GitplatformLinuxclassifiers)Framework :: Jupyter"Framework :: Jupyter :: JupyterLab'Framework :: Jupyter :: JupyterLab :: 30Framework :: Jupyter :: JupyterLab :: Extensions<Framework :: Jupyter :: JupyterLab :: Extensions :: PrebuiltzIntended Audience :: Developersz%Intended Audience :: Science/Research&License :: OSI Approved :: BSD LicenseProgramming Language :: Python#Programming Language :: Python :: 3z&Programming Language :: Python :: 3.10%Programming Language :: Python :: 3.6%Programming Language :: Python :: 3.7%Programming Language :: Python :: 3.8%Programming Language :: Python :: 3.9requiresrequires_dist)zjupyter-serverznbdime (~=3.1)nbformat	packagingpexpectzcoverage ; extra == 'dev'z#jupyterlab (~=3.0) ; extra == 'dev'zpre-commit ; extra == 'dev'zpytest ; extra == 'dev'zpytest-asyncio ; extra == 'dev'zpytest-cov ; extra == 'dev'z!pytest-tornasync ; extra == 'dev'zcoverage ; extra == 'tests'z%jupyterlab (~=3.0) ; extra == 'tests'zpre-commit ; extra == 'tests'zpytest ; extra == 'tests'z!pytest-asyncio ; extra == 'tests'zpytest-cov ; extra == 'tests'z#pytest-tornasync ; extra == 'tests'z!hybridcontents ; extra == 'tests'zjupytext ; extra == 'tests'providesprovides_dist	obsoletesobsoletes_distr   z<4,>=3.6requires_external_pypi_ordering7   	downloads)last_day	last_week
last_monthcheesecake_code_kwalitee_idcheesecake_documentation_idcheesecake_installability_idr   r   r   z1https://pypi.org/project/jupyterlab-github/3.0.1/r   r   r   )r   zBug Trackerr   r   zjupyter@googlegroups.comr   zJupyter,JupyterLab,JupyterLab3)r   r   r   r   r   r   r   r   r   r   r   r   zjupyterlab (~=3.0)r      r(   )nr   r   s      r   r6   zJtest_PyPiExtensionManager_list_extensions_query.<locals>.mock_pkg_metadata}  s    V $$SH(H8H !$H 	H
 IH PH DH KH H rH H 4H H bH #BH  Q!H" >#H$ U%H& G'H(   )HJ BKHL   "MHz B{H|  }H~ RH@ !"AHB ":CHD $REHF !"GHH "2RPIHJ .tKHL .tMHN /OH	
V3+373 !$3 	3
 L3 R3 D3 R3 3 r3  e#[#T!3  *!3"  :#3$ b%3& #B'3( F)3* >+3, <-3. G/30   13L BM3N  "6!7O3P BQ3R  S3T RU3V !"W3X "7Y3Z $R[3\ !"]3^ "2RP_3` .ta3b .tc3d /e3W	
s   C'C)gitr   )r   r   r8   r	   r9   r:   )r>   rL   rY   r@   rA   r6   rB   s          r   /test_PyPiExtensionManager_list_extensions_queryr   R  s      "JC)F	J " ?ZPIHJ !8,!8,!8,!8,!8,$g.$g.

E $(U#; "$G@
D '8G#..u55J:z2A6666 6s   BB"B B"c                  |   K   d} t        t        dd| ii            }t        |      }|j                  | k(  sJ y w)Nz https://mylocal.pypi.server/pypir	   r5   configparent)r   r   r	   r5   )BASE_URLr  rA   s      r   +test_PyPiExtensionManager_custom_server_urlr    sC     1H)?*hAW(X!YZF"&1Gx'''s   :<)user
sys_prefixsystemlevelc                 x   K   t        t        dd| ii            }t        |      }|j                  | k(  sJ y w)Nr	   r  r   r   r   r   r	   r  r  r  rA   s      r   &test_PyPiExtensionManager_custom_levelr    s<     )?'5AQ(R!STF"&1G==E!!!   8:c                 x   K   t        t        dd| ii            }t        |      }|j                  | k(  sJ y wNr   r  r   r   r	  r
  s      r   /test_PyPiExtensionManager_inherits_custom_levelr    s;     7E:J(K!LMF"&1G==E!!!r  c                 x   K   t        t        dd| ii            }t        |      }|j                  | k(  sJ y wr  )r   r   r   r  r
  s      r   test_PluginManager_custom_levelr  !  s;     7E:J(K!LMF6*G==E!!!r  c                  B   K   t               } | j                  dk(  sJ y w)Nr  )r   r  r   s    r    test_PluginManager_default_levelr  (  s     oG==L(((s   zname,expected))r   T)zmy_extension.pkgT)z-git+https://github.com/attacker/malicious.gitF)z/tmp/local-pkgF)zhttp://evil.com/pkg.tar.gzFc                 ^   K   t               }|j                  |        d {   |u sJ y 7 	wrH   r   )r2   r   rA   s      r   ;test_pypi_manager_is_install_allowed_rejects_non_pypi_namesr  -  s/      #$G++D11X===1r   zversion,expected)r   )z1.2.3T)znot valid versionFc                 `   K   t               }|j                  d|        d {   |u sJ y 7 	w)Npackager   )r4   r   rA   s      r   >test_pypi_manager_is_install_allowed_rejects_non_pypi_versionsr  =  s1     
 #$G++Iw??8KKK?s    .,
.c                  8  K   t               } d| _        ddd| j                  _        t	        d      | j
                  _        t        j                  t        j                        5 }t        j                  |        d {    d d d        j                  j                  dk(  sJ d|j                  j                  v sJ | j
                  j                  j!                  dd        | j
                  j"                  j%                          y 7 # 1 sw Y   xY ww)	Nr  r   r   )cmdextension_nameFr,   i  zwas blocked)r   current_userget_json_bodyr-   r   rA   r   pytestraisesr   	HTTPErrorr   postvaluestatus_codelog_messageassert_called_once_withr   assert_not_called)handlerexc_infos     r   .test_handler_blocks_install_when_policy_deniesr)  F  s     fG!G1:N_)`G&)2)FGOO&	s}}	%##G,,, 
&>>%%,,,HNN66666OO&&>>?PRVWOO--/	 	- 
&	%s1   A$D&D?D DBDDDD)5rl   r"   unittest.mockr   r   r   r  tornador   traitlets.configr   r   jupyterlab.extensionsr	   r
   jupyterlab.extensions.managerr   r   r   jupyterlab.extensions.pypir   -jupyterlab.handlers.extension_manager_handlerr   r   r   markparametrizer   r'   rD   rJ   rW   rb   rr   rz   r   r   r   r   r   r   r   r   r   r  LEVELSr  r  r  r  r  r  r)  r(   r   r   <module>r4     s    
 0 0   1 P 
 H J ! @ ' 2B7125 3 85< 
DD+7  +:MN+ O+( +:MN+ O+( +:MN+ O+8E
 +:MNH OH +:MNF OF +:MNH OH"E@ 2B712@ 3 8@F 2B712o7 3 8o7d( 
* &)" *" &)" *" &)" *")
 
>
>
 AL	L
0r   