
    I'                       S SK Jr  S SKrS SKrS SKrS SKrS SKJr  S SKrS\R                  l
        S\R                  l        SSS/ S4             SS	 jjr\R                  " / S
QS9S S j5       r\R                  " SS9S S j5       r\R                  " SS9S S j5       rS!S jr\R                  " SS9S S j5       r\R                  " 5       S S j5       r\R                  " 5       S S j5       r\R                  " SS9S S j5       r\R                  " SS9S S j5       r\R                  " SS9\R.                  " S/ SQ/ SQS9S"S j5       5       r\R                  " SS9S S j5       r\R                  S S j5       rg)#    )annotationsN)PathTuvzsocks,brotli,zstd,h2Fdevc                   U R                  SSSSS9R                  5       nUR                  S5      u  pxU R                  " SSS	S
U/S U(       a  UR                  S5      OS 5       Q76   U R                  SS5        U R                  SS5        U R                  SSS5        U R                  SSS5        Sn	US:w  d  US:w  a  Sn	O[        R
                  S:X  a  Sn	SSS.n
U R                   " S/U(       a  SOSQSPSPSPSPSPSPU	(       a  SOSQSPS PU(       a  S!OSQS"PS#PS$PS%PS&PS'PS(PUQU R                  =(       d    S)Q7S*U
06  g )+Npython-czIimport sys; print(sys.implementation.name, sys.version_info.releaselevel)Tsilent r   sync--frozen--groupc              3  ,   #    U  H
  nS U 3v   M     g7f)z--extra=N ).0extras     "lib/third_party/urllib3/noxfile.py	<genexpr>tests_impl.<locals>.<genexpr>*   s     	P+NHUG
+Ns   ,r   	--versionz.import struct; print(struct.calcsize('P') * 8)-mzOpenSSL.debugcpythonfinalFwin32zalways::DeprecationWarningsysmon)PYTHONWARNINGSCOVERAGE_CORE)z-bbcoveragerunz--parallel-modepytest)z--memrayz--hide-memray-summary-vz-ra)z--integrationz--tb=nativez--durations=10z--strict-configz--strict-markersz--disable-socketz--allow-unix-socketz9--allow-hosts=localhost,127.0.0.1,::1,127.0.0.0,240.0.0.0)ztest/env)r!   stripsplitrun_installsysplatformposargs)sessionextrasbyte_string_comparisonsintegrationpytest_extra_argsdependency_groupsession_python_infoimplementation_namerelease_levelmemray_supportedpytest_session_envvarss              r   
tests_implr6      s    "++S	 & 
 eg  *=)B)B3)G&  
Q6<<+<B+N	P KKk"KK+&KK$ PQKK$0i'=G+C 		   7! KK-(2 	 		
 	 	 	 	 3C	. 	 	 !,
 	 	 	  	!" 	#$ 	%& 	D'( 
)* //
'Z+, #-    )z3.9z3.10z3.113.12z3.13z3.14zpypy3.10zpypy3.11)r   c                `    U R                   R                  U R                  S'   [        U 5        g )NUV_PROJECT_ENVIRONMENT
virtualenvlocationr$   r6   r+   s    r   testr?   \   s'     -4,>,>,G,GGKK()wr7   3c                ^    U R                   R                  U R                  S'   [        U SS9  g)zRun integration testsr:   T)r.   Nr;   r>   s    r   test_integrationrB   m   s)     -4,>,>,G,GGKK()wD)r7   c                    U R                   R                  U R                  S'   U R                  S5        [	        U SSS9  g)zgCheck that if 'brotlipy' is installed instead of 'brotli' or
'brotlicffi' that we still don't blow up.
r:   brotlipysocksF)r,   r-   N)r<   r=   r$   installr6   r>   s    r   test_brotlipyrG   t   s7    
 -4,>,>,G,GGKK()OOJwwFr7   c           
     $   UR                  S5      S   nUR                  S5      (       a  USS n[        R                  R	                  U5      (       d  U R                  SSSS	US
S9  gU R                  SSUSSSS
S9  U R                  SSUSS
S9  g)z[We either clone the target repository or if already exist
simply reset the state and pull.
/z.gitNgitclonez--depth1Texternal-Cresetz--hardHEADpull)r&   endswithospathisdirr!   )r+   git_urlexpected_directorys      r   	git_cloner[   ~   s     !s+B/""6**/477==+,,E7IsGdK4+WhQU 	 	
 	E4!3VdKr7   r<   )venv_backendc                   [         R                  " 5       nU R                  5       nU R                  U5        [	        U S5        U R                  S5        U R                  SSSSS9  U R                  SS	5        U R                  U5        U R                  S
SS9  U R                  U S35        U R                  SSS5        U R                  SS5        g )Nz https://github.com/boto/botocorebotocorerL   	rev-parserS   TrO   r   zscripts/ci/install.Fr
   z	/botocorer	   *import urllib3; print(urllib3.__version__)zscripts/ci/run-testsrV   getcwd
create_tmpcdr[   chdirr!   rF   r+   roottmp_dirs      r   downstream_botocorerj      s    99;D  "GJJwg9:MM*KK{FTK:KK./JJtOOCO&JJ')$%KK$ LMKK01r7   c                   [         R                  " 5       nU R                  5       nU R                  U5        [	        U S5        U R                  S5        U R                  SSSSS9  U R                  SS	S
9  U R                  SSS	S
9  U R                  U5        U R                  SS	S
9  U R                  U S35        U R                  SSS5        U R                  SS5        g )Nzhttps://github.com/psf/requestsrequestsrL   r_   rS   TrO   z.[socks]Fr
   z-rzrequirements-dev.txtr`   z	/requestsr   r	   ra   r"   testsrb   rg   s      r   downstream_requestsrn      s    99;D  "GJJwg89MM*KK{FTK:OOJuO-OOD0O?JJtOOCO&JJ')$%KK$ LMKK'"r7   c                    [        U 5        g)zRun code formatters.N)lintr>   s    r   formatrq      s     	Mr7   r8   c                b    U R                  S5        U R                  SSS5        [        U 5        g )Nz
pre-commitr!   z--all-files)rF   r!   mypyr>   s    r   rp   rp      s%    OOL!KKe]3Mr7   c           	        U R                   R                  U R                  S'   U R                  SSSSSSS9nU(       d   e[        R
                  " S	U5      nU(       d   eUR                  S
5      n[        S5      nUR                  5       nUR                  SU5      n[        S5      nUS-  R                  U5        U R                  SSSSSSS5        g )Nr:   r   r!   r   buildz--wheelTr
   zurllib3-[^\s]+\.whlr   z6test/contrib/emscripten/templates/pyodide-console.htmlz{urllib3_wheel_name}.whldistz
index.htmlr   zhttp.serverz-d-b	localhost)r<   r=   r$   r!   researchgroupr   	read_textreplace
write_text)r+   build_outputwheel_match
wheel_nametemplate_pathhtml_content	dist_paths          r   pyodideconsoler      s    ,3,>,>,G,GGKK() ;;tUD'9T;RL< ))2LAK;""1%J QRM **,L''(BJOL VI)),7KK$tVT;Or7   runner)nodefirefoxchrome)idsc                   U R                   R                  U R                  S'   US:X  a  [        SU R	                  SSSSS95        SnS[
        R                  ;   a   [        [
        R                  S   5      S	-  nOS
n[        U R                  5      SU 3-  nUR                  5       (       db  [        S5        U R	                  SSSU SU S3SU R                  SSS9  UR                  SS9  U R	                  SSU S3S[        U5      SSSS9  UnU R	                  SSSS5        Uc   eUR                  5       (       d   e[        U SS S!U S"3S#[        U5      S$S%/S&S'9  g)(z<Test on Emscripten with Pyodide & Chrome / Firefox / Node.jsr:   r   zNode version:r   T)r   rP   NPYODIDE_ROOTrv   z0.27.1zpyodide-z Fetching pyodide build artifactscurlz-Lz5https://github.com/pyodide/pyodide/releases/download/z	/pyodide-z.tar.bz2z--output-dirz-OrO   )parentstarz-xjfrQ   z--strip-componentsrN   r   r!   r   ru    z-xz	--runtimez-no-hostz
--dist-dirztest/contrib/emscriptenr#   
emscripten)r,   r/   r0   )r<   r=   r$   printr!   rV   environr   	cache_direxistsmkdirstrr6   )r+   r   dist_dirpyodide_versionpyodide_artifacts_paths        r   r   r      s    -4,>,>,G,GGKK()KKD4KH	

 H# 

>23f< #!%g&7&7!8XoEV;W!W%,,..45KKGGXXabqarrz{!!   #(((6KK)*(3*+$  	 *KKeT7+??hhM%
 &r7   c                    U R                   R                  U R                  S'   U R                  SSSSS5        U R	                  S5        U R                  SS5        U R                  SS	S
SSS	SS	S5	        g)z	Run mypy.r:   r   r   r   z--only-grouprs   r`   r   z-pdummyserverr   noxfileurllib3r?   N)r<   r=   r$   r'   rF   r!   r>   s    r   rs   rs      sv     -4,>,>,G,GGKK()fj.&IOOCKK$KK
r7   c                B   U R                   R                  U R                  S'   U R                  SSSSSSSSS	SS
5        U R	                  S5        [
        R                  R                  S5      (       a  [        R                  " S5        U R                  SSSSSS5        g )Nr:   r   r   r   r   docsz--extrarE   brotlizstd_buildzsphinx-buildrw   htmlz-Wr`   z_build/html)r<   r=   r$   r'   rf   rV   rW   r   shutilrmtreer!   r>   s    r   r   r   4  s    ,3,>,>,G,GGKK() MM&	ww~~hhKKfdCGr7   )r+   nox.Sessionr,   r   r-   boolr.   r   r/   z	list[str]r0   r   returnNone)r+   r   r   r   )r+   r   rY   r   r   r   )r+   r   r   r   r   r   )
__future__r   rV   ry   r   r(   pathlibr   noxoptionserror_on_missing_interpretersdefault_venv_backendr6   r+   r?   rB   rG   r[   rj   rn   rq   rp   r   parametrizer   rs   r   r   r7   r   <module>r      s   " 	 	  
  
,0 )#'  
 ) %*#%!JJJ
 "J J !J J 
JZ 	
 C* * CG GL$ ,'2 (2$ # #&  
 F  FP P0 F+1N; ;| F & H Hr7   