
    cg                        d dl mZ d dlm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 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mZ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%m&Z&m'Z'm(Z( d Z)ej*        j+        d             Z,d Z-ej*        j+        ej*        .                     ej/                    dk    o ej0        j1        dk    oej0        j2        dk     d          d                         Z3d Z4ej*        j+        d             Z5d Z6d Z7d Z8d Z9d Z:d Z;ej*        j+        d             Z<d  Z=d! Z>d" Z?d# Z@d$ ZAd% ZBd& ZCd' ZDd( ZEd) ZFd* ZGd+ ZHd, ZId- ZJd1d/ZKd0 ZLdS )2    )absolute_import)deepcopyN)minimal_environstrip_environ)project_no_dedicated_env)with_directory_contents/with_directory_contents_completing_project_file)	conda_api)prepare_without_interaction	unprepareprepare_in_stagesPrepareSuccessPrepareFailure_after_stage_success_FunctionPrepareStage)Project)DEFAULT_PROJECT_FILENAME)ProjectCommand)UserConfigOverrides)push_conda_manager_classpop_conda_manager_classCondaManagerCondaEnvironmentDeviationsCondaLockSetc                 8    d }|                      d|           d S )Nc                      dgS )Nz
python=3.7 r       Blib/python3.11/site-packages/anaconda_project/test/test_prepare.pymock_env_packagesz;_monkeypatch_reduced_environment.<locals>.mock_env_packages!   s
    ~r   z4anaconda_project.env_spec._default_env_spec_packages)setattr)monkeypatchr    s     r    _monkeypatch_reduced_environmentr#       s1       NPabbbbbr   c                 b    t          |            d }t          t                      |           d S )Nc                 D   t          |           }t                      }t          ||          }|j        g k    sJ |sJ |j        J t          |j                  t          |j                  k    sJ t                      t          |          k    sJ |j	        J d S )Nenviron)PROJECT_DIR)
r   r   r   errors
env_prefixdictdirectory_pathr   r'   command_exec_infodirnameprojectr'   results       r   prepare_emptyz3test_prepare_empty_directory.<locals>.prepare_empty+   s    '""!##,WgFFF}"""" ,,, 6777=;X;XXXXXvvw//////'/////r   r#   r   r+   )r"   r2   s     r   test_prepare_empty_directoryr4   '   s;    $[111	0 	0 	0 DFFM22222r   c                  D    d } t          t                      |            d S )Nc                     t          j        t                    5 }t          |           }t	                      }t          |d|           d d d            n# 1 swxY w Y   dt          |j                  v sJ d S )NBAD_PROVIDE_MODE)moder'   zinvalid provide mode)pytestraises
ValueErrorr   r   r   reprvalue)r/   excinfor0   r'   s       r   prepare_bad_provide_modez?test_prepare_bad_provide_mode.<locals>.prepare_bad_provide_mode:   s    ]:&& 	Q'.w77G%''Gg,>PPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q &gm)<)<<<<<<<s   0AAAr   r+   )r?   s    r   test_prepare_bad_provide_moderA   9   s.    = = = DFF$<=====r   Windows      zEon Windows, can't delete env dir except on python 3.4, don't know why)reasonc                 b    t          |            d }t          t                      |           d S )Nc                     t          |           }t                      }t          ||          }|j        g k    sJ |sJ t	          ||          }|j        g k    sJ |sJ d S )Nr&   )r   r   r   r)   r   r/   r0   r'   r1   statuss        r   unprepare_emptyz7test_unprepare_empty_directory.<locals>.unprepare_emptyK   sw    '""!##,WgFFF}""""7F++}""""r   r3   )r"   rJ   s     r   test_unprepare_empty_directoryrK   D   s=    
 %[111   DFFO44444r   c                  :    d } t          t          di|            d S )Nc                     t          |           }t                      }t          ||          }|rJ |j        J t	          ||          }|rJ |j        dk    sJ |j        d|j        j        z  gk    sJ d S )Nr&   zUnable to load the project.zZ%s: variables section contains wrong value type 42, should be dict or list of requirements)	r   r   r   r*   r   status_descriptionr)   project_filebasenamerH   s        r   unprepare_problemsz:test_unprepare_problem_project.<locals>.unprepare_problemsY   s    *733!##,WgFFF (((7F++(,IIIII}n )*!
 
 	
 	
 	
 	
 	
r   zvariables:
  42r	   r   )rQ   s    r   test_unprepare_problem_projectrS   X   s1    
 
 
 45MOa4bdvwwwwwr   c                 b    t          |            d }t          t                      |           d S )Nc                     t          |           }t                      }t          ||          }|j        g k    sJ |sJ t	          ||g           }|j        g k    sJ |sJ |j        dk    sJ d S )Nr&   )	whitelistzNothing to clean up.)r   r   r   r)   r   rN   rH   s        r   unprepare_nothingz7test_unprepare_nothing_to_do.<locals>.unprepare_nothingn   s    '""!##,WgFFF}""""7Fb999}""""(,BBBBBBBr   r3   )r"   rW   s     r   test_unprepare_nothing_to_dorX   j   s?    $[111	C 	C 	C DFF$566666r   c                  :    d } t          t          di|            d S )Nc           	      R   t          |           }t          t          j                  }t	          |          }|sJ |j        g k    sJ |j        t          |j                  d         k    sJ |t          j        k    sJ |                                D ]\  }}|j        	                    |          }||k    r|dv r|dv rt          d           >|dk    r't          j                    dk    rt          d           k|                    t          j                  }|                    t          j                  }t          d                    |t!          |                               t          d                    |t!          |                               ||k    sJ d S )	Nr(   )rootbasez/we have a root/base environment name issue herePATHrB   z9prepare changed PATH on Windows and ideally it would not.zORIGINAL {}: {}zUPDATED {}: {})r   r   osr'   r   r)   r,   r   itemsgetprintplatformsystemsplitpathsepformatr<   )r/   r0   os_environ_copyr1   keyoriginalupdateds          r   prepare_system_environz>test_default_to_system_environ.<locals>.prepare_system_environ}   s   *733"2:..,W55}""""%v~)F)F})UUUUU"*,,,,,2244 	' 	'MCn((--G(" 
C// G?O4O KLLL&= X_%6%6)%C UVVV!--
33#>>"*55'..sDNNCCDDD&--c4==AABBBh&&&&&	' 	'r   z
packages: []
        rR   )rk   s    r   test_default_to_system_environrl   |   s@    ' ' '2 45M P 5$& & & & &r   c                  :    d } t          t          di|            d S )Nc                 *   t          |           }t          d          }t          ||          }|j        g k    sJ |sJ t	          d|j                  t          |j                  k    sJ t	          d          t          |          k    sJ d S )NbarFOOr&   )rq   r(   )r   r   r   r)   r+   r,   r   r'   r.   s       r   prepare_some_env_varzCtest_prepare_some_env_var_already_set.<locals>.prepare_some_env_var   s    *733!e,,,,WgFFF}""""7+ABBBmTZTbFcFccccc-"8"8888888r   
variables:
  FOO: {}
rR   rr   s    r   %test_prepare_some_env_var_already_setru      sB    9 9 9 45M P 5     r   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          d          }t          ||          }|rJ |j        J t	          d          t          |          k    sJ d S )Nro   BARr&   )r   r   r   r*   r+   r   r.   s       r   rr   z?test_prepare_some_env_var_not_set.<locals>.prepare_some_env_var   ss    *733!e,,,,WgFFF ,,,-"8"8888888r   rs   rR   rt   s    r   !test_prepare_some_env_var_not_setrz      sB    9 9 9 45M P 5     r   c                  :    d } t          t          di|            d S )Nc                 n   t          |           }t          d          }t          ||d          }d|j        k    sJ ddgd |j        D             k    sJ |                                }ddgd	 |j        D             k    sJ |j        rJ |j        d
         | k    sJ d|j        k    sJ ddgd |j        D             k    sJ |}t          dd          D ]8}|                                }|J |j        sJ |j        d
         | k    sJ |}9t          d          t          |          k    sJ d S )Nro   rx   T)r'   keep_going_until_successzSet up project.rq   CONDA_PREFIXc                 &    g | ]}|j         j        S r   requirementenv_var.0rI   s     r   
<listcomp>zitest_prepare_some_env_var_not_set_keep_going.<locals>.prepare_some_env_var_keep_going.<locals>.<listcomp>   s    *r*r*r&6+=+E*r*r*rr   c                 &    g | ]}|j         j        S r   r   r   s     r   r   zitest_prepare_some_env_var_not_set_keep_going.<locals>.prepare_some_env_var_keep_going.<locals>.<listcomp>   s    *q*q*q&6+=+E*q*q*qr   r(   c                 &    g | ]}|j         j        S r   r   r   s     r   r   zitest_prepare_some_env_var_not_set_keep_going.<locals>.prepare_some_env_var_keep_going.<locals>.<listcomp>   s    *w*w*w&6+=+E*w*w*wr      
   )r   r   r   description_of_actionstatuses_before_executeexecutestatuses_after_executefailedr'   ranger+   r   )r/   r0   r'   stage
next_stageis         r   prepare_some_env_var_keep_goingzUtest_prepare_some_env_var_not_set_keep_going.<locals>.prepare_some_env_var_keep_going   s   *733!e,,,!'7UYZZZ E$?????~&*r*rTYTq*r*r*rrrrr ]]__
~&*q*qTYTp*q*q*qqqqq<}]+w6666 J$DDDDD~&*w*wT^Tv*w*w*wwwwwq" 	 	AJ)))<=/7::::EE-"8"8888888r   rs   rR   )r   s    r   ,test_prepare_some_env_var_not_set_keep_goingr      sB    9 9 90 45M P 5 &' ' ' ' 'r   c                  >    d } t          t          dddi|            d S )Nc                    t          |           }t          d          }t          j        |          }t	          ||          }|sJ |j        }d|j        v sJ |j        |j        k    sJ t          j
                    dk    r!t          j                            |d          }n!t          j                            |dd          }|j        |d	|d
dgk    sJ |                    t           j        t           j                  }|                                \  }}	|                                                                d|                    dd          z  k    sJ |	                                dk    sJ d S )Nro   rp   r&   rq   rB   z
python.exebinpythonecho.pyfoo)stdoutstderrz['echo.py', '%s', 'foo', 'bar']\z\\ )r   r   r
   environ_get_prefixr   r-   envcwdr,   rb   rc   r^   pathjoinargspopen
subprocessPIPEcommunicatedecodestripreplace)
r/   r0   r'   env_pathr1   commandcommandpathpouterrs
             r   prepare_with_app_entryz;test_prepare_with_app_entry.<locals>.prepare_with_app_entry   sc   *733!e,,,/88,WgFFF*####{g44444?	) 	B',,x>>KK',,xAAK|Y%OOOOOMMMII]]__
czz||!!##(IXM]M]^bdjMkMk(lmmmmzz||r!!!!!!r   zb
variables:
  FOO: {}

commands:
  default:
    conda_app_entry: python echo.py ${PREFIX} foo bar
r   zH
from __future__ import print_function
import sys
print(repr(sys.argv))
rR   )r   s    r   test_prepare_with_app_entryr      sK    " " "* 4$ '  	
 "# # # # #r   c                  B    d } t          t          dddddi|            d S )Nc                    t          |           }t                      }t          ||d          }|j        g k    sJ |sJ t          j                            |j        d          |j        j	        v sJ t                      }t          ||d          }|j        g k    sJ |sJ t          j                            |j        d          |j        j	        v sJ d S )Nr   r'   command_namefoo.pyro   bar.py
r   r   r   r)   r^   r   r   r,   r-   r   r.   s       r   checkz*test_prepare_choose_command.<locals>.check  s    *733!##,WgTYZZZ}""""w||G2H==AYA^^^^^!##,WgTYZZZ}""""w||G2H==AYA^^^^^^^r   c
commands:
    foo:
       bokeh_app: foo.py
    bar:
       bokeh_app: bar.py
packages:
  - bokeh
r   # foor   # barrR   r   s    r   test_prepare_choose_commandr     sP    _ _ _ 4$ ' gg	
     r   c                  B    d } t          t          dddddi|            d S )Nc                    t          |           }t                      }t          ||          }|sJ t          j                            | dddd          }t          |d          5 }|                    t          j	                               d d d            n# 1 swxY w Y   t          ||          }|sJ t          j        
                    |          rJ d S )Nr&   envsdefaultz
conda-metaz.packedwt)r   r   r   r^   r   r   openwriter
   current_platformexists)r/   r0   r'   r1   packed_filefs         r   r   z*test_prepare_missing_unpack.<locals>.check"  s   '""!##,WgFFF gll7FI|YWW+t$$ 	2GGI.00111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 -WgFFF7>>+.......s   &'BB Bz
env_specs:
  default: {}
r   r   r   r   rR   r   s    r   test_prepare_missing_unpackr      sM    / / /  4$ ' gg	
     r   c                  B    d } t          t          dddddi|            d S )Nc                     t          |           }t                      }t          ||d          }|j        g k    sJ |sJ t          j                            |j        d          |j        j	        v sJ d S )Nr   r   r   r   r.   s       r   r   z+test_prepare_default_command.<locals>.check>  s{    *733!##,WgT]^^^}""""w||G2H==AYA^^^^^^^r   r   r   r   r   r   rR   r   s    r   test_prepare_default_commandr   =  sP    _ _ _ 4$ ' gg	
     r   c                  >    d } t          t          dddi|            d S )Nc                 6   t          |           }t          dt          d|j                            }t	                      }t          |||          }|j        g k    sJ |sJ t          j        	                    |j
        d          |j        j        v sJ d S )Nr   r   )	bokeh_appenv_spec)name
attributes)r'   r   )r   r   r+   default_env_spec_namer   r   r)   r^   r   r   r,   r-   r   )r/   r0   r   r'   r1   s        r   r   z2test_prepare_command_not_in_project.<locals>.check]  s    *733 e,08gNk,l,l,ln n n!##,WgwWWW}""""w||G2H==AYA^^^^^^^r   zZ
commands:
  decoy:
    description: "do not use me"
    unix: foobar
    windows: foobar
r   r   rR   r   s    r   #test_prepare_command_not_in_projectr   \  sK    	_ 	_ 	_ 4$ ' g		
 
 
 
 
 
r   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          d          }t          ||d          }|rJ |j        J |j        sJ d|j        d         v sJ d S )Nro   rx   blahr   zCommand name 'blah' is not inr   )r   r   r   r*   r)   r.   s       r   r   z,test_prepare_bad_command_name.<locals>.checkv  s{    *733!e,,,,WgTZ[[[ (((}.&-2BBBBBBBr   
rR   r   s    r   test_prepare_bad_command_namer   u  sC    C C C 45M P 5    r   c                  J     G d dt                     } t          |            d S )Nc                   .    e Zd Zd Zd Zd ZddZd ZdS )	1_push_fake_env_creator.<locals>.HappyCondaManagerc                     d S Nr   )selffrontends     r   __init__z:_push_fake_env_creator.<locals>.HappyCondaManager.__init__      Dr   c                      t          i           S r   )r   )r   package_specschannels	platformss       r   resolve_dependencieszF_push_fake_env_creator.<locals>.HappyCondaManager.resolve_dependencies  s    ###r   c                 *    t          ddddd          S )Nzall goodr   )summarymissing_packageswrong_version_packagesmissing_pip_packageswrong_version_pip_packages)r   )r   prefixspecs      r   find_environment_deviationszM_push_fake_env_creator.<locals>.HappyCondaManager.find_environment_deviations  s+    -j?AEGCEIK	M M M Mr   NTc                     d S r   r   )r   r   r   
deviationscreates        r   fix_environment_deviationszL_push_fake_env_creator.<locals>.HappyCondaManager.fix_environment_deviations  r   r   c                     d S r   r   )r   r   packagess      r   remove_packageszA_push_fake_env_creator.<locals>.HappyCondaManager.remove_packages  r   r   )NT)__name__
__module____qualname__r   r   r   r   r   r   r   r   HappyCondaManagerr     sg        	 	 		$ 	$ 	$	M 	M 	M	 	 	 		 	 	 	 	r   r   )r   r   )r   s    r   _push_fake_env_creatorr     sC        L   ( ./////r   c                  "    t                       d S r   )r   r   r   r   _pop_fake_env_creatorr    s    r   c                  :    d } t          t          di|            d S )Nc                 .   t          j                    }	 t                       t          |           }t	                      }t          ||d          }|j        d                             |j                  }|j	        |         |k    sJ t	                      }t          ||d          }|j
        g k    sJ |sJ |j        d                             |j                  }|j	        |         |k    sJ 	 t                       d S # t                       w xY w)Nr   r'   env_spec_namero   )r
   conda_prefix_variabler   r   r   r   	env_specsr   r,   r'   r)   r  r/   r   r0   r'   r1   expected_paths         r   r   z.test_prepare_choose_environment.<locals>.check  s   133	$"$$$g&&G%''G0'Y^___F#-e499':PQQM>'*m;;;;%''G0'Y^___F=B&&&&MMM#-e499':PQQM>'*m;;;;;!#####!####s   CD Dzc
name: blah
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
env_specs:
    foo: {}
    bar: {}
r   r   r   s    r   test_prepare_choose_environmentr    sA    $ $ $( $		
 
 
 
 
 
r   c                  :    d } t          t          di|            d S )Nc                 \   t          j                    }	 t                       t          |           }t	                      }t          ||d          }|j        d                             |j                  }|j	        |         |k    sJ 	 t                       d S # t                       w xY w)Nr   r  r
   r  r   r   r   r   r  r   r,   r'   r  r  s         r   r   z(test_prepare_no_env_specs.<locals>.check  s    133	$"$$$g&&G%''G0'YbcccF#-i8==g>TUUM>'*m;;;;;!#####!####   A5B B+z@
name: blah
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
r
  r   s    r   test_prepare_no_env_specsr    sA    $ $ $ 	! $ 	 	    r   c                  :    d } t          t          di|            d S )Nc                 \   t          j                    }	 t                       t          |           }t	                      }t          ||d          }|j        d                             |j                  }|j	        |         |k    sJ 	 t                       d S # t                       w xY w)Nhellor   r   r  r  s         r   r   z:test_prepare_use_command_specified_env_spec.<locals>.check  s    133	$"$$$g&&G%''G 1'X_```F#-e499':PQQM>'*m;;;;;!#####!####r  z
name: blah
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
env_specs:
    default: {}
    foo: {}
    bar: {}
commands:
    hello:
       env_spec: foo
       unix: echo hello
       windows: echo hello
r
  r   s    r   +test_prepare_use_command_specified_env_specr    sA    $ $ $  $	
 !    r   c                  :    d } t          t          di|            d S )Nc                 \   t          j                    }	 t                       t          |           }t	                      }t          ||d          }|j        d                             |j                  }|j	        |         |k    sJ 	 t                       d S # t                       w xY w)Nr  r   r   r  r  s         r   r   z4test_prepare_use_command_no_env_specs.<locals>.check  s    133	$"$$$g&&G%''G 1'X_```F#-i8==g>TUUM>'*m;;;;;!#####!####r  z
name: blah
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
commands:
    hello:
       unix: echo hello
       windows: echo hello
r
  r   s    r   %test_prepare_use_command_no_env_specsr    sA    $ $ $  $
	
     r   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          d          }t          ||          }|j        g k    sJ |sJ t          d          }|                    |           t          dd|           t          |          k    sJ d S )Nro   rp   r&   bazrx   )rq   ry   r(   )r   r   r   r)   update_environr+   r   )r/   r0   r'   r1   others        r   prepare_then_update_environz8test_update_environ.<locals>.prepare_then_update_environ  s    *733!e,,,,WgFFF}""""E***e$$$5g>>>-PUBVBVVVVVVVr   rs   rR   )r  s    r   test_update_environr    sE    	W 	W 	W 45M P 5 "# # # # #r   c                  D    d } t          t                      |            d S )Nc                     t          |           }t          |          }t          j        t                    5 }|j         d d d            n# 1 swxY w Y   dt          |j                  v sJ d S )Nzresult property isn't available)r   r   r9   r:   RuntimeErrorr1   r<   r=   r/   r0   first_stager>   s       r   early_result_grabz<test_attempt_to_grab_result_early.<locals>.early_result_grab,  s    *733'00]<(( 	G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	0D4G4GGGGGGG   AAAr@   )r$  s    r   !test_attempt_to_grab_result_earlyr&  +  s1    H H H DFF$566666r   c                  D    d } t          t                      |            d S )Nc                     t          |           }t          |          }t          j        t                    5 }|j         d d d            n# 1 swxY w Y   dt          |j                  v sJ d S )Nz&statuses_after_execute isn't available)r   r   r9   r:   r!  r   r<   r=   r"  s       r   early_status_grabz>test_attempt_to_grab_statuses_early.<locals>.early_status_grab7  s    *733'00]<(( 	/G..	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/74;N;NNNNNNNr%  r@   )r)  s    r   #test_attempt_to_grab_statuses_earlyr*  6  s1    O O O DFF$566666r   c                     ddifd} t          t                      t                      dg |           }d }t          ||          }|j        |j        u sJ t          |j        t                    sJ |9|                                }|j        }|j	        r
|j	        sJ n|j	        rJ |}|9|j	        sJ d         dk    sJ d S )Nstatestartc           	      
   d         dk    sJ dd<   |                      t          dd t                      t                      d          g            fd}t	          t                      t                      dg |          S )Nr,  r-  firstr   statusesr-   r'   	overridesr  c           	          d         dk    sJ dd<   |                      t          dg t                      t                      d          g            d S )Nr,  r/  secondr   last)r1  r)   r'   r2  r  )
set_resultr   r+   r   r   r,  s    r   r5  zXtest_skip_after_success_function_when_second_stage_fails.<locals>.do_first.<locals>.lastN  so    >W,,,,%E'N&('+vv)<)>)>-3	5 5 5 79: : : 4r   r4  r6  r   r+   r   r   r   r5  r,  s     r   do_firstzJtest_skip_after_success_function_when_second_stage_fails.<locals>.do_firstD  s    W~(((( gB-1#'66%8%:%:)0	2 2 2 46	7 	7 	7		 		 		 		 		 %TVV-@-B-BHbRVWWWr   r/  c                      t          d          )Nzshould not have been called)r!  )updated_statusess    r   afterzGtest_skip_after_success_function_when_second_stage_fails.<locals>.after]  s    8999r   r4  )
r   r+   r   r   r2  
isinstancer'   r   r1   r   r:  r#  r=  r   r   r1   r,  s         @r   8test_skip_after_success_function_when_second_stage_failsr@  A  s   gEX X X X X. (0C0E0EwPRT\]]K: : : !e44E?k33333emT*****
 ]]__
= 	$<|###   =>X%%%%%%r   c                  b   ddifd} t          t                      t                      dg |           }fd}t          ||          }|j        |j        u sJ |j        |j        k    sJ |j        |j        k    sJ |j        |j        u sJ |                                 |s|	                                }t          |d          r*|j        |j        j        u sJ |j        |j        j        u sJ |j        }|j        r
|j        sJ n|j        rJ |}|s|j        rJ d         dk    sJ d S )Nr,  r-  c           	      
   d         dk    sJ dd<   |                      t          dd t                      t                      d          g            fd}t	          t                      t                      dg |          S )	Nr,  r-  r/  r   r   r0  c           	          d         dk    sJ dd<   |                      t          dd t                      t                      d          g            d S )Nr,  r/  r4  r   ro   r0  )r6  r   r+   r   r7  s    r   r5  zZtest_run_after_success_function_when_second_stage_succeeds.<locals>.do_first.<locals>.last}  so    >W,,,,%E'N15'+vv)<)>)>-2	4 4 4 689 9 9 4r   r4  r8  r9  s     r   r:  zLtest_run_after_success_function_when_second_stage_succeeds.<locals>.do_firsts  s    W~(((( gB-1#'66%8%:%:).	0 0 0 24	5 	5 	5		 		 		 		 		 %TVV-@-B-BHbRVWWWr   r/  c                 .    d         dk    sJ dd<   d S )Nr,  r4  r=  r   )r<  r,  s    r   r=  zItest_run_after_success_function_when_second_stage_succeeds.<locals>.after  s%    W~)))) gr   _stager=  )r   r+   r   r   r2  r   r'   r   	configurer   hasattrr   rE  r   r1   r?  s         @r   :test_run_after_success_function_when_second_stage_succeedsrH  p  s   gEX X X X X. (0C0E0EwPRT\]]K! ! ! ! ! !e44E?k33333&+*KKKKK=K/////(K,OOOOO	OO
 ]]__
5(## 	7/5<3VVVVV<5<#66666= 	$<|###   }>W$$$$$$r   MYDATAc                 p    ddl m j        fd            }|                     d|           d S )Nr   )genc                 2    G d d          } |            }d|_         t          t          j                                      d          5 }|                    d           d d d            n# 1 swxY w Y   r| _                            |          )Nc                       e Zd ZdS )D_monkeypatch_download_file.<locals>.mock_downloader_run.<locals>.ResN)r   r   r   r   r   r   ResrN    s        Dr   rO     wdata)coder   r^   r   r   r   _hashReturn)r   rO  resr   checksumr/   filenamerK  s       r   mock_downloader_runz7_monkeypatch_download_file.<locals>.mock_downloader_run  s    	 	 	 	 	 	 	 	 cee"',,w11377 	3IIf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	"!DJjjoos   A00A47A4z8anaconda_project.internal.http_client.FileDownloader.run)tornadorK  	coroutiner!   )r"   r/   rX  rW  rY  rK  s    ``` @r   _monkeypatch_download_filer\    sl    ]
 
 
 
 
 
 
 ]
 RTghhhhhr   c                 @      fd}t          t          di|           d S )Nc                    ddl m t          | d           ddg}t          |           }t	                      }t          |f|          }|j        |k    sJ fd|                    d           D             d         }t          ||f|          }|j        |k    sJ t          ||j        f|          }|j        |k    sJ t          |||	                    d           d         f|          }|j        g k    sJ d	|j
        v sJ d S )
Nr   )CondaEnvRequirementnope)rX  zVmissing requirement to run this project: A downloaded file which is referenced by FOO.z&  Environment variable FOO is not set.)provide_whitelistr'   c                 4    g | ]}t          |          |S r   )r>  )r   reqr_  s     r   r   z9test_provide_whitelist.<locals>.check.<locals>.<listcomp>  s)    eee3
3Pc@d@de3eeer   rq   )=anaconda_project.requirements_registry.requirements.conda_envr_  r\  r   r   r   r)   requirementsr   download_requirementsr'   )r/   no_foor0   r'   r1   env_reqr_  r"   s         @r   r   z%test_provide_whitelist.<locals>.check  sm   eeeeee";&IIIIp:< +733!##,WI\H_ipqqq}&&&& feee'"6"6t"<"<eeefgh,W]deee}&&&& -WH[elmmm}&&&& -W@GIfIfgkIlIlmnIo?p5<> > > }""""&&&&&&r   z.
downloads:
  FOO: "http://example.com/nope"

rR   )r"   r   s   ` r   test_provide_whitelistri    sL    ' ' ' ' '< 4	! $ 	     r   )rI  N)M
__future__r   copyr   r^   rb   r9   r   sys#anaconda_project.test.environ_utilsr   r   #anaconda_project.test.project_utilsr   ,anaconda_project.internal.test.tmpfile_utilsr   r	   anaconda_project.internalr
   anaconda_project.preparer   r   r   r   r   r   r   anaconda_project.projectr   anaconda_project.project_filer   !anaconda_project.project_commandsr   2anaconda_project.requirements_registry.requirementr   anaconda_project.conda_managerr   r   r   r   r   r#   markslowr4   rA   skipifrc   version_infomajorminorrK   rS   rX   rl   ru   rz   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r&  r*  r@  rH  r\  ri  r   r   r   <module>r}     sL   ' & & & & &       				       



 N N N N N N N N H H H H H Hk k k k k k k k / / / / / /c c c c c c c c c c c c c c c c c c , , , , , , B B B B B B < < < < < < R R R R R RV V V V V V V V V V V V V Vc c c 3 3 3"> > > OHO%%2 Z -3q8XS=M=SWX=XYb  d d5 5d d 5 x x x$ 7 7 7"& & &>     ' ' '>%# %# %#P  >   8  >  2  0 0 00    D  *! ! !H  ># # #$7 7 77 7 7,& ,& ,&^7% 7% 7%ti i i i&$ $ $ $ $r   