
    DIe<                        d Z ddlZddlZddl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mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddl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% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddlImJZJ ddlKmLZL dd lMmNZN eHZOe-rd!nd"ZPe-rd#nd$ZQd%ZRd&ZSe-sd'nd(ZTe-sd)nd*ZUe-sd+nd,ZVd-ZW e	eX          ZYd. ZZ ed/          d0             Z[da\ ej]        d12          d3             Z^dKd5Z_dLd6Z`dKd7Za G d8 d9          Zb e<d:d;d<=          ed>                         Zc e<d:d;d?=          d@             ZdedA             ZeedB             ZfedC             ZgdD ZhedE             ZidF ZjdG Zk e<d:d;dH=          dI             ZldJ ZmdS )Mz
These helpers were originally defined in tests/test_create.py,
but were refactored here so downstream projects can benefit from
them too.
    N)contextmanager)	lru_cache)	getLogger)dirnameexistsisdirjoinlexists)sample)copyfilermtree)check_output)
gettempdir)uuid4)Utf8NamedTemporaryFile)EntityEncoder)PACKAGE_CACHE_MAGIC_FILE)conda_tests_ctxt_mgmt_def_polcontextreset_context)do_callgenerate_parser)init_loggers)encode_argumentson_win)argvcaptureddashlistdisable_loggerenv_varstderr_log_level)path_to_url)PackageCacheData)
PrefixData)
deprecated)conda_exception_handler)mkdir_p)rm_rf)link)touch)DEBUG)	MatchSpec)PackageRecord)massage_argumentsz
python.exez
bin/pythonScriptsbinu   ōγђ家固한áêñßôçabcdefwhichwherecpcopyenvset c                 .    |                      dd          S )N\z\\replace)ps    9lib/python3.11/site-packages/conda/testing/integration.pyescape_for_winpathr?   I   s    99T6"""    )maxsizec                  f   d } t          dt          dz   d          5 }|                    d           |                    d           |j        } d d d            n# 1 swxY w Y   | r	 t	          | t          |           d d          }t          |d          r|                    d	          n|}|                    d
          r	 t          j
        |            dS 	 t          j
        |            dS # t          $ r Y t          j
        |            dS w xY w# t          j
        |            w xY wdS )Nwz.batF)modesuffixdeletez@echo Hello World
z@exit 0
)cwdstderrshelldecodezutf-8zHello WorldT)r   UNICODE_CHARACTERSwritenamer   r   hasattrrJ   
startswithosunlink	Exception)rM   
batch_fileouts      r>   1running_a_python_capable_of_unicode_subprocessingrU   M   s   D 
 +f4U
 
 
 	.///%%%                
		tt5QQQC)0h)?)?H#**W%%%SC~~m,, 
 IdOOOOO	  IdOOOOO  	 	 	IdOOOOO	 IdOOOO5s6   2AA"A)AC3 3
D=D DD D.T)autousec                 J    | st           S | j        }t          j        |v sJ |a d S N)tmpdir_in_usestrpathrP   sep)tmpdirtds     r>   
set_tmpdirr^   i   s1      	B6R<<<<MMMr@   Fc                    t           pt                      }t                      }|r|r8t          }d                    t          |t          |                              }n:d                    t          t          t          t                                        }t          j	        
                    d| .t          t                                d d         t          z   |z   n|           }t	          ||          }t          r t          j                            dd          nt          j        }t          j                            |t          j                            t          j                            }		 t)          ||	           n=# t*          $ r0 t-          d                    |t          j                             Y nw xY w	 t3          |	           n&# t4          $ r}
t-          |
           Y d }
~
nd }
~
ww xY w|S )N CONDA_TEST_TMPDIR_NAME   z.exez.pdba  
WARNING :: You are testing `conda` with `tmpdir`:-
           {}
           not on the same FS as `sys.prefix`:
           {}
           this will be slow and unlike the majority of end-user installs.
           Please pass `--basetemp=<somewhere-else>` instead.)rY   r   rU   UNICODE_CHARACTERS_RESTRICTEDr	   r   lenrK   rP   environgetstrr   SPACER_CHARACTERr   sys
executabler<   pathbasenamer)   OSErrorprintformatprefixr(   rR   )rM   use_restricted_unicoder\   capable
RESTRICTEDrandom_unicodetmpdir_namerp   srcdstes              r>   _get_temp_prefixry   s   s   *jllF?AAG V, V2

C
OO!D!DEE(:C@R<S<S!T!TUU*.. < 
UWWbqb	,	,~	=	=	 K &+&&F 5;
N#.
 
 
0
0
0C
',,vrw//??
@
@C

S# 
 
 
L MSF
M M		
 	
 	
 	
 	

c



   a Ms*   5F 7G ?G G 
G7G22G7c                     |st          | |          }	 t          j        |           n#  Y nxY wt          |          sJ |S )a  
    When the env. you are creating will be used to install Python 2.7 on Windows
    only a restricted amount of Unicode will work, and probably only those chars
    in your current codepage, so the characters in UNICODE_CHARACTERS_RESTRICTED
    should probably be randomly generated from that instead. The problem here is
    that the current codepage needs to be able to handle 'sys.prefix' otherwise
    ntpath will fall over.
    rM   rq   )ry   rP   makedirsr   rM   rq   _temp_prefixs      r>   make_temp_prefixr      sf      
'.D
 
 

L!!!!s   * .c                     t          | |          }t          |           t          j        |           t	          |          sJ |S )Nr{   )ry   r(   rP   r|   r   r}   s      r>   FORCE_temp_prefixr      sV    #*@  L 
,Kr@   c                   :    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdS )CommandscompareconfigcleancreateinfoinstalllistremovesearchupdaterunN)__name__
__module____qualname__COMPARECONFIGCLEANCREATEINFOINSTALLLISTREMOVESEARCHUPDATERUN r@   r>   r   r      sE        GFEFDGDFFF
CCCr@   r   z23.9z24.3z Use `monkeypatch.chdir` instead.)addendumc              #      K   t          j                    }| s|} 	 t          j        |            d V  t          j        |           d S # t          j        |           w xY wrX   )rP   getcwdchdir)
target_dircurdirs     r>   
temp_chdirr      sj       Y[[F 


s   A	 	Az&Use `conda.testing.conda_cli` instead.c           	         t          |t                    s
J d            t          |          }|                    dd          }| t          j        t          j        t          j        t          j        fv }|                    d|rdnd          }|                    dd          }t                      }| t          j
        u r8|                    d           |                    t          |d                     | t          j        t          j        t          j        t          j        t          j        t          j        t          j        fv r,|                    d	d
           |                    d|           | t          j        t          j        t          j        t          j        fv r|                    ddg           |                    d	|            |r|                    dd           |r|                    dd           |                    |          }	t'          j        |	           t+                       |                    d          sdnd}
t-          dd                    |          z  t.          j                   t3          t4          d          5  t3          t4          d          5  t7          |          }t9          dg|z             5  t;          |
 5 }|rt=          t>          |	|          }nt?          |	|          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j         }|j        }t-          |t.          j                    t-          |t.          j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | t          j
        fv r<tC          tD          j#                            |tD          j$        z   d          g|	           |||fS )Nz&run_command() arguments must be tuplesuse_exception_handlerFdevTdebug_wrapper_scriptsz--filecondarcr   z-p   z-yz-qz--devz--debug-wrapper-scripts
no_capturer   )NNz$

EXECUTING COMMAND >>> $ conda %s

r8   )filecondarequests
python_api)%
isinstancetupler.   rf   r   r   r   r   r   r   r   appendr	   r   r   r   insertextend
parse_argsr   _set_argparse_argsr   rn   ri   rH   r!   TEST_LOG_LEVELr   r   r   r&   r   stdoutr   rP   rk   r[   )commandrp   	argumentskwargsr   command_defaults_to_devr   debugr=   argscap_argscresultr   rH   s                  r>   run_commandr      s   i''QQ)QQQQ!),,I"JJ'>FF &	*  **U$;FDD
G
GCJJ.66EA(/!!"""fi00111   	D!!!F###8?H$4hoxWWW$&&&Q   
 %G$$$ 75666 <<	""Dt$$$NNNL11Crr|H	2SXXi5H5HHZ    
.'	2	2 ' '4D
5 5 ' ' %Y//	<.9,-- 	* 	*x/B 	*a$ *0$BB q))		* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*
 f3:&&&&f3:&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '  8?$$$rw||FRVOY??@$GGG66!!s   N/#N
L)*L	L)LL)LL)N)L--N0L-1AN8NN	NN	NN"Nc               /     K   |                     dd           }|                     dd          }|                     dd           pt          ||          }|                     dd           }|r.t          j                            |          rt          |           t          |          st          |||           t          d          5  	 t          t          j        
                    |t          j        z   d          g           t          t          j        |g| R i | |V  d	t          j        vrt!          |d
           n`t"                              d|            nB# d	t          j        vrt!          |d
           w t"                              d|            w xY wd d d            d S # 1 swxY w Y   d S )NrM   rq   Frp   r{   clean_prefixfetchr   CONDA_TEST_SAVE_TEMPSTignore_errorsz1CONDA_TEST_SAVE_TEMPS :: retaining make_temp_env )popry   rP   rk   r   r(   r   r   r   r   r	   r[   r   r   r   re   r   logwarning)packagesr   rM   rq   rp   r   s         r>   make_temp_envr   -  s      ::fd##D#ZZ(@%HHZZ$'' +;*@, , ,F ::nd33L 7>>&!! 	&MMM== ?5v>>>		 	   	
 27<<CCDEEEE(EEEfEEELLL&bj88vT22222PPP    'bj88vT22222PPP                    s+   F4AE%'>F4%?F$$F44F8;F8c               #     K   t          t                    } t          | d          }t          |           t	          t          |t
                               	 t          d|t                    5  t          j	        |fk    sJ |V  d d d            n# 1 swxY w Y   t          | d           |t          j        v rt          j        |= d S d S # t          | d           |t          j        v rt          j        |= w xY w)N)rq   pkgsCONDA_PKGS_DIRS)stack_callbackTr   )r   r   r	   r'   r*   r   r    r   r   	pkgs_dirsr   r#   _cache_)rp   pkgs_dirs     r>   make_temp_package_cacher   M  s]     V<<<FFF##HH	$x1
2
2333	3x8U
 
 
 	 	 $3333NNN		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	vT****'/// (222 0/ 	vT****'/// (22222s0   C 1B	C BC BC .C>c           	   #     K   d | D             }d | D             t          | 5 }| D ](}t          ||                    dd                    sJ )fdt          |                                          D             }t          t          j        |gR   | D ](}t          ||                    dd                    rJ )	 d d d            n# 1 swxY w Y   i i d}i }|D ]y}|}|d         }	t          t          j
                    j        |	          ||	<   |                                }dD ]}
|                    |
d            t          di ||d	         |	<   zt                      5 }t          |t          j                  }t          |d
          }t#          |          }t%          j        |           t%          j        |           |                                D ]%\  }	}t          ||	          }t+          ||           &t-          t          |d          d          5 }|                    t1          j        |t4                               d d d            n# 1 swxY w Y   t-          t          |d          d          5 }|                    t1          j        i t4                               d d d            n# 1 swxY w Y   |V  d d d            d S # 1 swxY w Y   d S )Nc                 :    g | ]}|                     d d          S )-=r;   .0pkgs     r>   
<listcomp>z%make_temp_channel.<locals>.<listcomp>b  s&    >>>cCKKS))>>>r@   c                 D    g | ]}|                     d           d         S )r   r   )splitr   s     r>   r   z%make_temp_channel.<locals>.<listcomp>c  s'    ;;;3SYYs^^A&;;;r@   r   r   c                 (    g | ]}|d          v |S )rM   r   )r   r=   package_namess     r>   r   z%make_temp_channel.<locals>.<listcomp>h  s.     
 
 
AfI<V<VA<V<V<Vr@   )r   r   fn)urlchannelschannelr   noarchzrepodata.jsonrC   )clsr   )r   package_is_installedr<   r$   iter_recordsr   r   r   r	   r#   first_writabler   dumpr   r-   r   subdirr"   rP   r|   itemsr   openrL   jsondumpsr   )r   package_reqsrp   packagedatarepodatatarfilespackage_datapkg_datafnamefieldr   subchan
noarch_dirtar_old_pathtar_new_pathfr   s                    @r>   make_temp_channelr   `  s+     >>X>>>L;;(;;;M		% O 	K 	KG'S0I0IJJJJJJ
 
 
 
!&))6688
 
 
 	HOV<m<<<< 	O 	OG+FGOOC4M4MNNNNNN	OO O O O O O O O O O O O O O O ++HH @ @/>@@I5QQ==??3 	& 	&ELL%%%%&3&?&?h&?&?U##	 Gw//'8,,
g&&
G
J#+>>#3#3 	1 	1E<//L\<0000$w00#66 	=!GGDJx];;;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=$z?33S99 	7QGGDJr}555666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7                  sm   BCCC*B:K$/IKI#	#K&I#	'!K/K7KK	K
K	KK#&K#c                      t                      S rX   )ry   r   r@   r>   create_temp_locationr    s    r@   c               #      K   t                      } 	 t          j        |            | V  t          |           rt	          |            d S d S # t          |           rt	          |            w w xY wrX   )r  rP   r|   r
   r(   )rp   s    r>   tempdirr    sy      !##F
F6?? 	&MMMMM	 	76?? 	&MMMM	s   A !A-c                 `    t          | t          j        z   d          }t          |g           d S )Nr   )r	   rP   r[   r   )rp   prefix_condarcs     r>   reload_configr    s.    &26/955N>"#####r@   c                 2   t          |          }t          t          | d                              |                    }t	          |          dk    r)t          dt          d |D                       z            t          t	          |                    S )NT)pip_interop_enabledr   zMultiple packages installed.%sc              3   >   K   | ]}|                                 V  d S rX   )dist_str)r   precs     r>   	<genexpr>z'package_is_installed.<locals>.<genexpr>  s*      @@D@@@@@@r@   )r,   r   r$   queryrd   AssertionErrorr   bool)rp   specprefix_recss      r>   r   r     s    T??D
6tDDDJJ4PPQQK
;!,@@K@@@@@B
 
 	
 K  !!!r@   z8Use `conda.core.prefix_data.PrefixData().get()` instead.c                     t          t          j        |           \  }}}|                    d          }t	          fd|D             d           }|                                S )N
c              3   p   K   | ]0}|                                                     d z             ,|V  1dS )r8   N)lowerrO   )r   linepackage_names     r>   r  z'get_conda_list_tuple.<locals>.<genexpr>  sD      VV$$**,,*A*A,QTBT*U*UVVVVVVVr@   )r   r   r   r   next)rp   r  r   rH   _stdout_linespackage_lines    `     r>   get_conda_list_tupler    sk     $HM6::FFA<<%%LVVVV,VVV L r@   c                     t           sJ t          t          t          j        d                    rdnd} 	 ddlm} ||          d         d         S # t          $ r' 	 ddlm} ||          d         cY S # t          $ r  w xY ww xY w)Nz	.nonadminusersystemr   )dirs_srcstart)dirs)	r   r   r	   ri   rp   menuinst.win32r   ImportErrorr"  )	user_modewin_locationss     r>   get_shortcut_dirr'    s    MMM cj+!>!>??MXI
<<<<<<Y'033   	<<<<<< +G4444 	 	 		s#   A 
BA1.B1A==B)NF)NFN)n__doc__r   rP   ri   
contextlibr   	functoolsr   loggingr   os.pathr   r   r   r	   r
   randomr   shutilr   r   
subprocessr   tempfiler   uuidr   pytestconda.auxlib.compatr   conda.auxlib.entityr   conda.base.constantsr   conda.base.contextr   r   r   conda.cli.conda_argparser   r   conda.cli.mainr   conda.common.compatr   r   conda.common.ior   r   r   r   r    r!   conda.common.urlr"   conda.core.package_cache_datar#   conda.core.prefix_datar$   conda.deprecationsr%   conda.exceptionsr&   conda.gateways.disk.creater'   conda.gateways.disk.deleter(   conda.gateways.disk.linkr)   conda.gateways.disk.updater*   conda.gateways.loggingr+   conda.models.match_specr,   conda.models.recordsr-   conda.utilsr.   r   PYTHON_BINARYBIN_DIRECTORYrK   rc   which_or_where
cp_or_copy
env_or_setrh   r   r   r?   rU   rY   fixturer^   ry   r   r   r   r   r   r   r   r   r  r  r  r   r  r'  r   r@   r>   <module>rN     s[     				 



 % % % % % %             9 9 9 9 9 9 9 9 9 9 9 9 9 9       # # # # # # # # # # # # # #              6 6 6 6 6 6 - - - - - - 9 9 9 9 9 9 T T T T T T T T T T = = = = = = = = ' ' ' ' ' ' 8 8 8 8 8 8 8 8                ) ( ( ( ( ( : : : : : : - - - - - - ) ) ) ) ) ) 4 4 4 4 4 4 . . . . . . , , , , , , ) ) ) ) ) ) , , , , , , ( ( ( ( ( ( - - - - - - . . . . . . ) ) ) ) ) ) &8L#.		2  (  &3G+TTV
 +UUe
  i# # # 4  0    ' ' ' 'T   *           FF%GHHH   IH FF%MNNNR" R" ONR"j   > 3 3 3$ ) ) )X     $ $ $
" " " 

G  
    
     r@   