
    c<                    h   d dl mZmZ d dlZd dl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Zd dlZd dlmZ d dlmZ d dl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 m!Z!m"Z"m#Z# d d
l$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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6c m7Z7 d dlm6c m8Z8 d dl9m6c m:Z; d dl<m=Z=  ej>                    d             Z?d Z@d ZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd ZKd  ZLd! ZMd" ZNd# ZOd$ ZPd% ZQd& ZRd' ZSd( ZTd) ZUd* ZVd+ ZWd, ZXd- ZYd. ZZd/ Z[d0 Z\d1 Z]d2 Z^d3 Z_d4 Z`d5 Zad6 Zbd7 Zcd8 Zdd9 Zed: Zfd; Zgd< Zhd= Zid> Zjd? Zkd@ ZldA ZmdB ZndC ZodD ZpdE ZqdF ZrddHZsdI ZtdJ ZudK ZvdL ZwdM ZxdN ZydO ZzdP Z{dQ Z|dR Z}dS Z~dT ZdU ZdV Zej        j        dW             ZdX ZdY Z	 	 	 	 	 	 dd\Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Zdg Zdh Zdi Zdj Zdk Zdl Zdm Zdn Zdo Zdp Zdq Zdr Zds Zdt Zdu Zdv Zdw Zdx Zdy Zdz Zd{ Zd| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej        j        ej                            ej        j        dk    o ej                    dk    d          ej                            dg d          d                                     Zej        j        ej                            dg d          d                         ZdZdZdZddƄZddǄZdȄ ZdɄ Zdʄ Zd˄ Zd̄ Zd̈́ Zd΄ Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ 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 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 )    )absolute_importprint_functionN)gen)OrderedDict)project_ops)CondaManagerCondaEnvironmentDeviationsCondaLockSetCondaManagerErrorpush_conda_manager_classpop_conda_manager_class)Project)current_platform)with_directory_contents!with_temporary_script_commandline/with_directory_contents_completing_project_filecomplete_project_file_content) _monkeypatch_reduced_environment)LocalStateFile)DEFAULT_PROJECT_FILENAMEProjectFile)DEFAULT_PROJECT_LOCK_FILENAME)project_no_dedicated_env)FakeFrontend)"monkeypatch_conda_not_to_use_links)fake_server)SimpleStatusc                 X    ddl m} |j        fd}|                     d|           d S )Nr   )EnvSpecc                       | |d          S )N )conda_packages	platformsr!   )selfr"   r#   old_compute_hashs      Flib/python3.11/site-packages/anaconda_project/test/test_project_ops.py	fake_hashzmocked_hash.<locals>.fake_hash<   s    ^rRRRR    z/anaconda_project.env_spec.EnvSpec._compute_hash)anaconda_project.env_specr   _compute_hashsetattr)monkeypatchr   r'   r%   s      @r&   mocked_hashr-   -   s]     211111,S S S S S I9UUUUUr(   c                 J      fd}t          t                      |           d S )Nc                    t           j                            | d          }t          j        |d          }d|z  g|j        k    sJ d }                    d|           t          j        |d          }d|z  g|j        k    sJ                                  dd	lm	 fd
}                    d|           t          j        |d          }                                 g |j        k    sJ t           j        
                    t           j                            |t                              sJ t           j        
                    t           j                            |d                    rJ t          j        |d          }g |j        k    sJ t           j        
                    t           j                            |t                              sJ t           j        
                    t           j                            |d                    sJ t          t          |j                                                            t          dg          k    sJ |j        d         }|j        dk    sJ |j        dk    sJ |j        dk    sJ t          j        |dd          }|j        d         }|j        dk    sJ |j        dk    sJ d S )NfooFmake_directoryz&Project directory '%s' does not exist.c                      t          d          )NnopeIOError)paths    r&   mock_failed_makedirsz?test_create.<locals>.check_create.<locals>.mock_failed_makedirsK       &//!r(   zos.makedirsTr   openc                      | d                              d          r| d         dk    rt          d           | i |S )Nr   .projectignore   wr4   endswithr6   argskwargs	real_opens     r&   mock_codecs_openz;test_create.<locals>.check_create.<locals>.mock_codecs_openV   sN    Aw 011 2d1gn 2foo% y$1&111r(   codecs.openr=   defaultr!   )r2   with_anaconda_packageanaconda)osr7   joinr   createproblemsr+   undocodecsr;   isfiler   sortedlist	env_specskeysr"   pip_packageschannels)dirnamesubdirprojectr8   rF   specrE   r,   s         @r&   check_createz!test_create.<locals>.check_createC   s   gu-- $VEBBB9FBDHXXXXX	" 	" 	" 	M+?@@@$VDAAA9FBDHXXXXX 	-,,,,,	2 	2 	2 	2 	2 	M+;<<<$VDAAAW%%%%%w~~bgll63KLLMMMMM7>>"',,v7G"H"HIIIII $VDAAAW%%%%%w~~bgll63KLLMMMMMw~~bgll63CDDEEEEEd7,113344559L9LLLLL +"b(((( B&&&&}"""" $VDX\]]] +"n4444 B&&&&&&r(   r   dict)r,   r]   s   ` r&   test_creater`   B   s9    0' 0' 0' 0' 0'd DFFL11111r(   c                  0    d } t          ddi|            d S )Nc                 d   t          j        | dddd          }g |j        k    sJ t          j                            t          j                            | t                              sJ |j        dk    sJ |j	        t          j                            | d          k    sJ |j
        dk    sJ d S )NFhellosomething.pngHello Worldr2   nameicondescription)r   rN   rO   rL   r7   rR   rM   r   rg   rh   ri   rY   r[   s     r&   r]   z1test_create_with_properties.<locals>.check_createy   s    $W49*1*91>	@ @ @
 W%%%%%w~~bgll74LMMNNNNN|w&&&&|rw||G_EEEEEE"m333333r(   rd   not a real pngr   r]   s    r&   test_create_with_propertiesrn   x   s/    
4 
4 
4 _.>?NNNNNr(   c                  2    d } t          ddd|            d S )Nc                    t          j        | dddd          }g |j        k    sJ t          j                            t          j                            | t                              sJ t          t          |j
                                                            t          dg          k    sJ |j
        d         }|j        dk    sJ |j        dk    sJ |j        d	k    sJ d S )
NFrc   rd   re   rf   stuffabr0   barr   rN   rO   rL   r7   rR   rM   r   rS   rT   rU   rV   r"   rW   rX   rY   r[   r\   s      r&   r]   z9test_create_imports_environment_yml.<locals>.check_create   s    $W49*1*91>	@ @ @
 W%%%%%w~~bgll74LMMNNNNNd7,11334455	9J9JJJJJ )"j0000 I----}	))))))r(   rk   G
name: stuff
dependencies:
 - a
 - b
 - pip:
   - foo
channels:
 - bar
rd   environment.ymlrl   rm   s    r&   #test_create_imports_environment_ymlr}      sF    * * * -	 	
 	
     r(   c                  4    d } t          dddd|            d S )Nc                    t          j        | ddddd          }g |j        k    sJ t          j                            t          j                            | t                              sJ t          t          |j
                                                            t          dg          k    sJ |j
        d         }|j        dk    sJ |j        d	k    sJ |j        d
k    sJ d S )NFrc   rd   re   Tr2   rg   rh   ri   fix_problemsrq   rr   ru   rv   rx   ry   s      r&   r]   zbtest_create_imports_environment_yml_when_project_yml_exists_and_fix_problems.<locals>.check_create   s    $W49*1*91>268 8 8 W%%%%%w~~bgll74LMMNNNNNd7,11334455	9J9JJJJJ )"j0000 I----}	))))))r(   rk   ?
name: foo
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
rz   rd   anaconda-project.ymlr|   rl   rm   s    r&   Ltest_create_imports_environment_yml_when_project_yml_exists_and_fix_problemsr      sK    * * *  -%	 	
 	
  #    r(   c                  4    d } t          dddd|            d S )Nc                 V    t          j        | ddddd          }dg|j        k    sJ d S )NFrc   rd   re   r   zMEnvironment spec 'stuff' from environment.yml is not in anaconda-project.yml.)r   rN   rO   rj   s     r&   r]   zQtest_create_no_import_environment_yml_when_not_fix_problems.<locals>.check_create   sK    $W49*1*91>279 9 9 ``dkdtttttttr(   rk   r   rz   r   rl   rm   s    r&   ;test_create_no_import_environment_yml_when_not_fix_problemsr      sN    u u u -%	 	
 	
  #    r(   c                  2    d } t          ddd|            d S )Nc                     t          j        | d          }t          j                            | t
                    }dt
          z  g|j        k    sJ t          j                            |          rJ d S )NFr1   z*%s: invalid package specification: b $ 1.0)r   rN   rL   r7   rM   r   rO   rR   )rY   r[   project_filenames      r&   r]   z>test_create_with_invalid_environment_yml.<locals>.check_create   sm    $WUCCC7<<1IJJ<?WWX\c\lllll7>>"23333333r(   rk   z&
name: stuff
dependencies:
 - b $ 1.0
r{   rl   rm   s    r&   (test_create_with_invalid_environment_ymlr      sF    4 4 4 - 	
 	
     r(   c                  0    d } t          ddi|            d S )Nc                 *   t          j        | dddd          }g |j        k    sJ g |j        k    sJ t          j                            t          j                            | t                              sJ t          t          |j                                                            t          dg          k    sJ |j        d         }|j        dk    sJ |j        dk    sJ d	gt          |j                                                  k    sJ d S )
NFrc   re   T)r2   rg   ri   rI   rH   rJ   r!   	foo.ipynb)r   rN   rO   suggestionsrL   r7   rR   rM   r   rS   rT   rU   rV   r"   rX   commandsry   s      r&   r]   z2test_create_imports_notebook.<locals>.check_create   s   $W49*11>;?	A A A
 W%%%%%W(((((w~~bgll74LMMNNNNNd7,113344559L9LLLLL +"n4444}""""}W%5%:%:%<%< = =======r(   r   z{}rl   rm   s    r&   test_create_imports_notebookr      s.    > > >$ [$/>>>>>r(   c                  0    d } t          ddi|            d S )Nc                    t          j        | d          }g |j        k    sJ t          j                            t          j                            | t                              sJ |j        t          j        	                    |           k    sJ |j
        J t          j        |ddd          }|sJ |j        dk    sJ |j
        t          j                            | d          k    sJ |j        dk    sJ t          j        |ddd          }|sJ |j        dk    sJ |j
        t          j                            | d          k    sJ |j        dk    sJ d S )NFr1   rc   rd   HELLOOOO)rg   rh   ri   )r   rN   rO   rL   r7   rR   rM   r   rg   basenamerh   set_propertiesri   rY   r[   results      r&   checkz"test_set_properties.<locals>.check  sj   $WUCCCW%%%%%w~~bgll74LMMNNNNN|rw//888888|###+G'eoppp|w&&&&|rw||G_EEEEEE"j0000 +G(IYgrsss|x''''|rw||G_EEEEEE"k111111r(   rd   rk   rl   r   s    r&   test_set_propertiesr     s/    2 2 2. _.>?GGGGGr(   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j        |d          }|rJ d|j        j        z  g|j        k    sJ d S )Nr0   rg   Z%s: variables section contains wrong value type 42, should be dict or list of requirements)r   r   r   project_filer   errorsrY   r[   statuss      r&   r   z=test_set_properties_with_project_file_problems.<locals>.check0  sk    '""+G%@@@h )*
 ] 	 	 	 	 	r(   variables:
  42r   r   r   s    r&   .test_set_properties_with_project_file_problemsr   /  1       45MOa4bdijjjjjr(   c                  D    d } t          t                      |            d S )Nc                 l   t          j        | d          }g |j        k    sJ t          j                            t          j                            | t                              sJ |j        t          j        	                    |           k    sJ |j
        J t          j        |d          }t          t          |                     |rJ d|j        k    sJ dt          z  g|j        k    sJ g |j        k    sJ |j        t          j        	                    |           k    sJ |j
        J d S )NFr1    r   !Failed to set project properties.z5%s: name: field is an empty or all-whitespace string.)r   rN   rO   rL   r7   rR   rM   r   rg   r   rh   r   printreprstatus_descriptionr   r   s      r&   r   z$test_set_invalid_name.<locals>.check=  s9   $WUCCCW%%%%%w~~bgll74LMMNNNNN|rw//888888|###+G#>>>d6ll2f6OOOOOGKcdeioivvvvvW%%%%%|rw//888888|#####r(   r^   r   s    r&   test_set_invalid_namer   <  s-    $ $ $$ DFFE*****r(   c                  D    d } t          t                      |            d S )Nc                 f   t          j        | d          }g |j        k    sJ t          j                            t          j                            | t                              sJ |j        t          j        	                    |           k    sJ |j
        J t          j        |d          }|rJ d|j        k    sJ dt          j                            | d          z  g|j        k    sJ g |j        k    sJ |j        t          j        	                    |           k    sJ |j
        J d S )NFr1   foobar)rh   r   zIcon file %s does not exist.)r   rN   rO   rL   r7   rR   rM   r   rg   r   rh   r   r   r   r   s      r&   r   z$test_set_invalid_icon.<locals>.checkS  s4   $WUCCCW%%%%%w~~bgll74LMMNNNNN|rw//888888|###+G(CCC2f6OOOOO.gx1P1PPQU[UbbbbbW%%%%%|rw//888888|#####r(   r^   r   s    r&   test_set_invalid_iconr   R  s-    $ $ $" DFFE*****r(   c                  :    d } t          t          di|            d S )Nc                 `   t          |           }t          j        |d ddgt          d                    }|sJ |                    |j        d          d         }|j        d         dk    sJ |                    |j        d          d         }|j                            d          J d S )Nr0   bazrw   ru   env_varr   rH   )r   r   add_variablesr_   find_requirementsdefault_env_spec_nameoptionsgetrY   r[   r   reqs       r&   check_add_varz)test_add_variables.<locals>.check_add_varh  s    *733*7D5%.$SX///ZZ''(Eu'UUVWX{9%....''(Eu'UUVWX{y))11111r(    r   r   s    r&   test_add_variablesr   g  s0    2 2 2 45Mr4RTabbbbbr(   c                  :    d } t          t          di|            d S )Nc                 N   t          |           }t          j        |dddgt          d                    }|sJ |                    dd          d         }|j        d         dk    sJ g |                    dd          k    sJ g |                    dd          k    sJ d S )	Nmyspecr0   r   rw   ru   r   r   rH   )r   r   r   r_   r   r   r   s       r&   r   z5test_add_variables_to_env_spec.<locals>.check_add_varv  s    *733*7HuendW\ooo^^''%'@@C{9%....W..y%.HHHHHHW..y%.HHHHHHHHr(   }
env_specs:
    default:
      packages: [python]
      channels: []
    myspec:
      packages: [python]
      channels: []
r   r   s    r&   test_add_variables_to_env_specr   u  sD    I I I 4$	
     r(   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j        |dddgt          d                    }d|j        k    sJ |rJ d S )Nr4   r0   r   rw   ru   z$Environment spec nope doesn't exist.)r   r   r   r_   r   r   s      r&   r   z6test_add_variables_bad_env_spec.<locals>.check_add_var  sX    *733*7FUENDUZOOO\\59RRRRRr(   r   r   r   s    r&   test_add_variables_bad_env_specr     s0       45Mr4RTabbbbbr(   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          j        |d ddg           t          j        |j                  }t          d d d           |                    dg          k    sJ |                    ddg          dk    sJ t          j        |           }|                    ddg          J |                    ddg          J |                    ddg          J d S )Nr0   r   )r0   r   preset	variables	downloadsdatafilezhttp://localhost:8000/data.tgz)	r   r   r   r   load_for_directorydirectory_pathr_   	get_valuer   rY   r[   	re_loadedlocal_states       r&   check_set_varz;test_add_variables_existing_download.<locals>.check_set_var  s   *733!'4%@@@273IJJ	$t444	8K8K[M8Z8ZZZZZ""K#<==Aaaaaa$7@@$$k5%9::BBB$$k5%9::BBB$$k:%>??GGGGGr(   zOvariables:
  preset: null
downloads:
  datafile: http://localhost:8000/data.tgzr   r   s    r&   $test_add_variables_existing_downloadr     sE    
H 
H 
H 4$ (T	

     r(   c                  :    d } t          t          di|            d S )Nc           
         t          |           }t          j        |d g dt          ddd                    }|sJ t	          j        |j                  }|                    ddg          }t          |t                    sJ d|v sJ |d         d	k    sJ |                    dd
g          }t          |t                    sJ d|v sJ |d         dk    sJ |                    ddg          }t          |t                    sJ d|v sJ |d         dk    sJ |                    ddg          }|dk    sJ |                    ddg          }|dk    sJ d S )N)r0   r   blahwootwoot2rw   quxupdated)r0   r   r   r   r0   	something*   r   rH   r   	unchangedr   worldr   )	r   r   r   r_   r   r   r   r   
isinstance)	rY   r[   r   r   r0   r   r   r   r   s	            r&   r   z:test_add_variables_existing_options.<locals>.check_set_var  s   *733*7D:a:a:a+/EuI+V+V+VX X273IJJ	!!;"677#t$$$$$c!!!!;2%%%%!!;"677#t$$$$$C9~&&&&""K#899$%%%%%D    I+----""K#899w##['$:;;	!!!!!!r(   zvariables:
  foo: { something: 42 }
  baz: { default: "hello" }
  blah: { default: "unchanged" }
  woot: "world"
  woot2: "changed"
downloads:
  datafile: http://localhost:8000/data.tgzr   r   s    r&   #test_add_variables_existing_optionsr     sB    " " "8 4$ (T		
 
 
 
 
 
r(   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          j        |d ddg           |j                            |j                  }t                      |                    dg          k    sJ |                    ddg          J |                    ddg          J t          j        |           }|                    ddg          J |                    ddg          J d S )Nr0   rw   r   )	r   r   remove_variablesr   r   r   r_   r   r   r   s       r&   check_remove_varz/test_remove_variables.<locals>.check_remove_var  s    *733$WdUENCCC(;;G<RSS	vv,,k];;;;;;""K#788@@@""K#788@@@$7@@$$k5%9::BBB$$k5%9::BBBBBr(   z variables:
  foo: baz
  bar: quxr   r   s    r&   test_remove_variablesr     sG    
C 
C 
C 4	! %= 	?@PR R R R Rr(   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|                    g d          t          dd          k    sJ |                    g d          J |                    g d          J t	          j        |ddd	g           |j                            |j                  }|                    g d          i k    sJ |                    g d          J |                    g d          J d S )
N)rU   r   r   r   r   r0   rw   )rU   r   r   r0   )rU   r   r   rw   r   r0   rw   )r   r   r   r_   r   r   r   r   )rY   r[   pfr   s       r&   r   z=test_remove_variables_with_env_spec.<locals>.check_remove_var  s'   *733!||@@@AATeY^E_E_E_____||GGGHHTTT||GGGHHTTT$WhGGG(;;G<RSS	""#G#G#GHHBNNNN""#N#N#NOOWWW""#N#N#NOOWWWWWr(   z
env_specs:
  default:
    packages: [python]
    channels: []
  myspec:
    packages: [python]
    channels: []
    variables:
      foo: baz
      bar: qux
        r   r   s    r&   #test_remove_variables_with_env_specr     sD    X X X 4$	
     r(   c                  :    d } t          t          di|            d S )Nc           	         t          |           }t          j        |d ddgt          dd                    }|sJ t	          j        |           }|                    ddg          J |                    ddg          J t          j        |d ddg          }|sJ t	          j        |           }|                    ddg          d	k    sJ |                    ddg          d
k    sJ d S )Nr0   r   nor4   )r0   r   r   r   r   r   rw   r   )r   r   r   r_   r   r   r   set_variablesrY   r[   r   r   s       r&   r   z)test_set_variables.<locals>.check_set_var  s   *733*7D5%.$SW]cJdJdJdee$7@@$$k5%9::BBB$$k5%9::BBB*7D>>:Z[[$7@@$$k5%9::eCCCC$$k5%9::eCCCCCCr(   variables:
  preset: nullr   r   s    r&   test_set_variablesr     sJ    D D D  45M Qa 5cdqs s s s sr(   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j        |d ddg          }|rJ |j        dk    sJ |j        ddgk    sJ d S )Nr   r   zCould not set variables.z+Variable foo does not exist in the project.z+Variable baz does not exist in the project.)r   r   r   r   r   r   s      r&   r   z5test_set_variables_nonexistent.<locals>.check_set_var"  sw    *733*7D>>:Z[[(,FFFFF}9;h!
 
 	
 	
 	
 	
 	
r(   r   r   r   s    r&   test_set_variables_nonexistentr   !  s0    
 
 
 45Mr4RTabbbbbr(   c                 l    d }|                      d|           d }t          t          di|           d S )Nc                 .    ddl m}  |j        d          )Nr   )	conda_apierror_from_conda_create)anaconda_project.internalr  
CondaError)prefixpkgsrX   stdout_callbackstderr_callbackr  s         r&   mock_createzAtest_set_variables_cannot_create_environment.<locals>.mock_create0  s(    777777"i"#<===r(   *anaconda_project.internal.conda_api.createc                     t          |           }t          j        |d ddg          }|rJ t          j                            | dd          }|j        d|z  k    sJ |j        d|z  gk    sJ d S )Nr   r   envsrH   z;'%s' doesn't look like it contains a Conda environment yet.z;Failed to create environment at %s: error_from_conda_create)r   r   r   rL   r7   rM   r   r   )rY   r[   r   expected_env_paths       r&   r   zCtest_set_variables_cannot_create_environment.<locals>.check_set_var6  s    '""*7D>>:Z[[GLL&)DD(-j->.? @ 	@ 	@ 	@}!^ar!r sssssssr(   r   r+   r   r   )r,   r	  r   s      r&   ,test_set_variables_cannot_create_environmentr  /  s[    > > > DkRRRt t t 45Mr4RTabbbbbr(   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          j        |d ddg          }|sJ t          j        |d ddg          }|sJ t	          j        |           }|                    ddg          dk    sJ |                    ddg          dk    sJ t          j        |d ddg          }|sJ t	          j        |           }|                    ddg          J |                    ddg          J d S )Nr0   r   )r0   r   )r   r4   r   r   r4   )r   r   r   r   r   r   r   unset_variablesr   s       r&   check_unset_varz-test_unset_variables.<locals>.check_unset_varD  s   *733*7D5%.II*7D=/:Z[[$7@@$$k5%9::dBBBB$$k5%9::fDDDD,WdUENKK$7@@$$k5%9::BBB$$k5%9::BBBBBr(   r   r   )r  s    r&   test_unset_variablesr  C  sJ    C C C& 45M Qa 5cdsu u u u ur(   c                      t          j                     d } 	 t          j                     t          t          di|            t          j                     d S # t          j                     w xY w)Nc           	         t          |           }t          j        |d ddgt          dd                    }|sJ t	          j        |           }|                    ddg          J |                    ddg          J t          t          j	                    
                                          t                      k    sJ t          j        |d ddg          }|sJ t	          j        |           }|                    ddg          J |                    ddg          J t          t          j	                    
                                          t          d	d
g          k    sJ t          j        |d ddg          }|sJ t          t          j	                    
                                          t                      k    sJ d S )Nfoo_PASSWORD
baz_SECRETr   r4   )r  r  r   r  rw   r  r   rw   r   r   r   r   r_   r   r   r   setkeyringfallback_datavaluesr   r  r   s       r&   r   z=test_set_and_unset_variables_encrypted.<locals>.check_set_var^  s   *733*7D><:X+/Tf+U+U+UW W$7@@$$k>%BCCKKK$$k<%@AAIII7(**113344====*7D;RTi:jkk$7@@$$k>%BCCKKK$$k<%@AAIII7(**113344UEN8K8KKKKK,Wd^\<Z[[7(**113344======r(   r   r  reset_keyring_moduleenable_fallback_keyringr   r   disable_fallback_keyringr   s    r&   &test_set_and_unset_variables_encryptedr$  [  s     """> > >6+')))79Q Ue 9ghu	w 	w 	w 	(*****(****   *A A,c                      t          j                     d } 	 t          j                     t          t          di|            t          j                     d S # t          j                     w xY w)Nc           
      j   t          |           }t          j        |d g dt          ddd                    }|sJ t	          j        |           }|                    ddg          J |                    ddg          J |                    ddg          J t          t          j	                    
                                          t                      k    sJ t          j        |d g d	          }|sJ t	          j        |           }|                    ddg          J |                    ddg          J |                    ddg          d
k    sJ t          t          j	                    
                                          t          ddg          k    sJ t          j        |d g d          }|sJ t	          j        |           }t          t          j	                    
                                          t                      k    sJ |                    ddg          J d S )N)r  r  woor   r4   r   r   r  r  r(  )r  r  )r(  w00tr)  rw   r   r  r   s       r&   r   zBtest_set_and_unset_variables_some_encrypted.<locals>.check_set_var  sU   *733*7D:_:_:_+/TfZe+f+f+fh h$7@@$$k>%BCCKKK$$k<%@AAIII$$k5%9::BBB7(**113344====*7D ;L ;L ;L M M$7@@$$k>%BCCKKK$$k<%@AAIII$$k5%9::fDDDD7(**113344UEN8K8KKKKK,Wd<a<a<abb$7@@7(**113344====$$k5%9::BBBBBr(   r   r   r   s    r&   +test_set_and_unset_variables_some_encryptedr*    s     """C C C@+')))79Q Ue 9ghu	w 	w 	w 	(*****(****r%  c                 F      fd}t          t          d z  i|           d S )Nc                     t          |           }t          j        |dd          }|sJ |j                            |j                  }|                    ddg          }|         dk    sJ d S )NrH   echo "test"r   )r   r   add_commandr   r   r   r   )rY   r[   r   r   commandcommand_types        r&   check_add_commandz1_test_add_command_line.<locals>.check_add_command  s|    *733()\=YY(;;G<RSS	%%z9&=>>|$555555r(   z)commands:
  default:
    %s: echo "pass"
r   r0  r1  s   ` r&   _test_add_command_liner3    sY    6 6 6 6 6 4	! %<?K$L 	MN_a a a a ar(   c                  $    t          d           d S )Nunixr3  r!   r(   r&   test_add_command_shellr7    s    6"""""r(   c                  $    t          d           d S )Nwindowsr6  r!   r(   r&   test_add_command_windowsr:    s    9%%%%%r(   c                 @    d }t          t          d| z  i|           d S )Nc                     t          |           }t          j        |ddd          }|sJ t          j        |j                  }|                    ddg          }|d         dk    sJ |d         dk    sJ d S )NrH   r9  r-  r   r5  echo "pass"r   r   r.  r   r   r   r   rY   r[   r   r   r/  s        r&   r1  z=_test_add_command_windows_to_shell.<locals>.check_add_command  s    *733()YVV273IJJ	%%z9&=>>y!]2222v-//////r(   +commands:
  default:
    unix: echo "pass"
r   r2  s     r&   "_test_add_command_windows_to_shellrA    sN    0 0 0 4	! %>AM$N 	OPac c c c cr(   c                  :    d } t          t          di|            d S )Nc                 @   t          |           }t          j        |ddd          }|sJ t          j        |j                  }|                    ddg          }t          |                                          dk    sJ |d         dk    sJ |d         dk    sJ d S N
bokeh_test	bokeh_appfile.pyr      env_specrH   	r   r   r.  r   r   r   r   lenrV   r?  s        r&   r1  z1test_add_command_bokeh.<locals>.check_add_command      *733(,YWW273IJJ	%%z<&@AA7<<>>""a''''{#y0000z"i//////r(   r   r   r1  s    r&   test_add_command_bokehrN    s0    	0 	0 	0 45Mr4RTefffffr(   c                  :    d } t          t          di|            d S )Nc                 @   t          |           }t          j        |ddd          }|sJ t          j        |j                  }|                    ddg          }t          |                                          dk    sJ |d         dk    sJ |d         dk    sJ d S rD  rJ  r?  s        r&   r1  z<test_add_command_bokeh_overwrites.<locals>.check_add_command  rL  r(   zGcommands:
  bokeh_test:
    bokeh_app: replaced.py
packages:
  - bokeh
r   rM  s    r&   !test_add_command_bokeh_overwritesrQ    sA    	0 	0 	0 4$ (5	
     r(   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j        |dddd          }|sJ t          j        |j                  }|                    ddg          }|d         dk    sJ |d         dk    sJ d S )NrE  rF  rG  r0   env_spec_namer   rI  r>  r?  s        r&   r1  z9test_add_command_sets_env_spec.<locals>.check_add_command  s    *733(,Yfklll273IJJ	%%z<&@AA{#y0000z"e++++++r(   `env_specs:
  foo: { "packages" : ["bokeh"] }
commands:
  bokeh_test:
    bokeh_app: replaced.py
r   rM  s    r&   test_add_command_sets_env_specrW    sB    , , , 4$ (F	
     r(   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j        |dddd           }|sJ t          j        |j                  }|                    ddg          }|d         dk    sJ |d         dk    sJ d S )NrE  rF  rG  rT  r   rI  r0   r>  r?  s        r&   r1  z;test_add_command_leaves_env_spec.<locals>.check_add_command  s    *733(,Yfjkkk273IJJ	%%z<&@AA{#y0000z"e++++++r(   ztenv_specs:
  foo: { "packages" : ["bokeh"] }
commands:
  bokeh_test:
    env_spec: "foo"
    bokeh_app: replaced.py
r   rM  s    r&    test_add_command_leaves_env_specrZ    sB    , , , 4$ (F	
     r(   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        g k    sJ |j        g k    sJ t          |j        d         j                  dk    sJ t          j        |dddd          }|s|j        g k    sJ |sJ t          j
        |j                  }|                    ddg          }|d         dk    sJ |d         dk    sJ |                    g d	          J |j        g k    sJ |j        d
|j        j        z  dz   gk    sJ |                                 |j                                         t          j
        |j                  }|                    g d	          dgk    sJ d S )Nrw   r   rE  rF  rG  rT  r   rI  )rU   rw   packagesz%s: Command zDbokeh_test uses env spec bar which does not have the packages: bokehbokeh)r   rO   r   rK  rU   conda_package_names_setr   r.  r   r   r   r   r   r   r   fix_problems_and_suggestionssaver?  s        r&   r1  zItest_add_command_generates_env_spec_suggestion.<locals>.check_add_command&  s   *7332%%%%"b((((7$U+CDDIIII(,Yfklll 	'=B&&&&273IJJ	%%z<&@AA{#y0000z"e++++""#C#C#CDDLLL2%%%%"9M9V(V'm(n 'o o 	o 	o 	o 	,,...!!###273IJJ	""#C#C#CDD	QQQQQQr(   z~env_specs:
  foo: { "packages" : ["bokeh"] }
  bar: {}
commands:
  bokeh_test:
    env_spec: "foo"
    bokeh_app: replaced.py
r   rM  s    r&   .test_add_command_generates_env_spec_suggestionrb  %  sE    R R R8 4$ (F	
 	 	 	 	 	r(   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          j        |dddd d           }|sJ t          j        |j                  }|                    ddg          }|d         dk    sJ |d         dk    sJ |d         d	u sJ d S )
NrE  rF  rG  rU  supports_http_optionsr   rI  r0   rf  Fr>  r?  s        r&   r1  zHtest_add_command_leaves_supports_http_options.<locals>.check_add_commandO  s    *733()5)4)27;?CE E E 273IJJ	%%z<&@AA{#y0000z"e++++./5888888r(   env_specs:
  foo: { "packages" : ["bokeh"] }
commands:
  bokeh_test:
    supports_http_options: false
    bokeh_app: replaced.py
r   rM  s    r&   -test_add_command_leaves_supports_http_optionsrh  N  sB    9 9 9  4$ (F	
     r(   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          j        |dddd d           }|sJ t          j        |j                  }|                    ddg          }|d         dk    sJ |d         dk    sJ d|vsJ d S )	NrE  rF  rG  re  r   rI  r0   rf  r>  r?  s        r&   r1  zNtest_add_command_leaves_supports_http_options_unset.<locals>.check_add_commandk  s    *733()5)4)27;?CE E E 273IJJ	%%z<&@AA{#y0000z"e++++&g555555r(   rV  r   rM  s    r&   3test_add_command_leaves_supports_http_options_unsetrk  j  sB    6 6 6  4$ (F	
     r(   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          j        |dddd d          }|sJ t          j        |j                  }|                    ddg          }|d         dk    sJ |d         dk    sJ |d	         du sJ d S )
NrE  rF  rG  Tre  r   rI  r0   rf  r>  r?  s        r&   r1  zJtest_add_command_modifies_supports_http_options.<locals>.check_add_command  s    *733()5)4)27;?CE E E 273IJJ	%%z<&@AA{#y0000z"e++++./4777777r(   rg  r   rM  s    r&   /test_add_command_modifies_supports_http_optionsrn    sB    8 8 8  4$ (F	
     r(   c                  >    d } t          t          dddi|            d S )Nc                 r   t          |           }t          j        |ddd          }g |j        k    sJ |sJ t	          j        |j                  }|                    ddg          }t          |	                                          dk    sJ |d         dk    sJ |d         dk    sJ |d         d	u sJ d S )
Nnotebook_testnotebookr   r      rI  rH   registers_fusion_functionT)
r   r   r.  r   r   r   r   r   rK  rV   r?  s        r&   r1  z4test_add_command_notebook.<locals>.check_add_command  s    *733(/:{[[V]""""273IJJ	%%z?&CDD7<<>>""a''''z"k1111z"i////23t;;;;;;r(   r   r   z
{
  "cells" : [ { "source" : [ "@fusion.register\n", "def foo():\n", "  pass\n" ] } ]
}
                                                     r   rM  s    r&   test_add_command_notebookru    sG    < < < 4$9			
 
 
 
 
 
r(   c                  0    d } t          ddi|            d S )Nc                     t          |           }t          j        |ddd          }t          |j                  dk    sJ |rJ d|j        d         v sJ |j        dk    sJ d S )NrH   rr  r   r   zFailed to read or parsezUnable to add the command.)r   r   r.  rK  r   r   r   s      r&   r1  z;test_add_command_broken_notebook.<locals>.check_add_command  s    *733()ZUU6=!!A%%%%(FM!,<<<<<(,HHHHHHHr(   r   znot valid jsonr   rM  s    r&    test_add_command_broken_notebookry    s3    I I I 4[BR4SUfgggggr(   c                  D    d } t          t                      |            d S )Nc                     t          |           }t          j        t                    5 }t	          j        |ddd           d d d            n# 1 swxY w Y   dt          |j                  v sJ d S NrH   r0   r-  zInvalid command type foo)r   pytestraises
ValueErrorr   r.  strvaluerY   r[   excinfos      r&   r1  z8test_add_command_invalid_type.<locals>.check_add_command  s    *733]:&& 	N'#GY}MMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N)S-?-???????   AAAr   r_   rM  s    r&   test_add_command_invalid_typer    s1    @ @ @ 4DFF<MNNNNNr(   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          j        |ddd          }d|j        j        z  g|j        k    sJ t          j        |j                  }|	                    ddg          }|d         dk    sJ d|vsJ d S )NrH   rF  myapp.pyzS%s: command 'default' has multiple commands in it, 'bokeh_app' can't go with 'unix'r   r5  r=  )
r   r   r.  r   r   r   r   r   r   r   r?  s        r&   r1  z<test_add_command_conflicting_type.<locals>.check_add_command  s    *733()[*UUf%./ 14:MB 	B 	B 	B  273IJJ	%%z9&=>>v-////'))))))r(   r@  r   rM  s    r&   !test_add_command_conflicting_typer    sE    	* 	* 	* 4	! %> 	@ART T T T Tr(   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j        |ddd          }|rJ d|j        j        z  g|j        k    sJ d S )Nr0   r5  z
echo hellor   )r   r   update_commandr   r   r   r   s      r&   r   z=test_update_command_with_project_file_problems.<locals>.check  sl    '""+GUFLQQh )*
 ] 	 	 	 	 	r(   r   r   r   s    r&   .test_update_command_with_project_file_problemsr    1       45MOa4bdijjjjjr(   c                  D    d } t          t                      |            d S )Nc                     t          |           }t          j        t                    5 }t	          j        |ddd           d d d            n# 1 swxY w Y   dt          |j                  v sJ d S r|  r   r}  r~  r  r   r  r  r  r  s      r&   r   z/test_update_command_invalid_type.<locals>.check  s    *733]:&& 	Q'&w	5-PPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q)S-?-???????r  r  r   s    r&    test_update_command_invalid_typer    s0    @ @ @ 4DFFEBBBBBr(   c                  ^    t          d          fd} t          t          i|            d S )NzScommands:
  # this is a comment
  foo:
    # another comment
    unix: echo "pass"
c                     t          |           }t          j        |dd          }t          |j                   t          |j                   |sJ |j                                         t          t          j
                            | t                              5 }|                                }                    dd          |k    sJ d|v sJ d|v sJ 	 d d d            n# 1 swxY w Y   |j        d         sJ d|j        vsJ d S )Nr0   rw   )new_namezfoo:zbar:z# this is a commentz# another comment)r   r   r  r   r   r   r   loadr;   rL   r7   rM   r   readreplacer   )rY   r[   r   	proj_filecontentsfile_contents        r&   r   z)test_update_command_rename.<locals>.check   s\   *733+GUUKKKf'(((fm!!###"',,w(@AABB 	3i ~~''H''778CCCC(H4444&(22222		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
 &&&&G,,,,,,,s   =C))C-0C-)r   r   r   )r   r  s    @r&   test_update_command_renamer    sR    0 2j k kL- - - - -  45M|4\^cdddddr(   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j        t                    5 }t	          j        |dd           d d d            n# 1 swxY w Y   dt          |j                  v sJ d S )NrH   rF  zmust also specify the commandr  r  s      r&   r   z-test_update_command_no_command.<locals>.check  s    *733]:&& 	H'&w	;GGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H.#gm2D2DDDDDDDs   AAAr@  r   r   s    r&   test_update_command_no_commandr    sH    E E E 4	! %> 	@AFH H H H Hr(   c                  :    d } t          t          di|            d S )Nc                     t          |           }g |j        k    sJ t          j        |ddd          }|rJ dg|j        k    sJ d S )NmyapprF  r  zNo command 'myapp' found.)r   rO   r   r  r   r   s      r&   r   z1test_update_command_does_not_exist.<locals>.check!  sa    *733W%%%%%+GWk:VV+,======r(   r@  r   r   s    r&   "test_update_command_does_not_existr     sE    > > > 4	! %> 	@AFH H H H Hr(   c                  :    d } t          t          di|            d S )Nc                    t          |           }g |j        k    sJ d|j        v sJ |j        d         }|j        J |j        dk    sJ t          j        |ddd          }|sJ d|j        v sJ |j        d         }|j        dk    sJ t          j        |j	                  }|
                    ddg          }|d         dk    sJ d S )NrH   r=  rF  r  r   )r   rO   r   rF  unix_shell_commandliner   r  r   r   r   r   rY   r[   r/  r   r   s        r&   r   z3test_update_command_conflicting_type.<locals>.check1  s   *733W%%%%%G,,,,,"9- (((->>>>+GYZXXG,,,,,"9- J....273IJJ	%%z9&=>>{#z111111r(   r@  r   r   s    r&   $test_update_command_conflicting_typer  0  sE    2 2 2( 4	! %> 	@AFH H H H Hr(   c                  :    d } t          t          di|            d S )Nc                    t          |           }g |j        k    sJ d|j        v sJ |j        d         }|j        dk    sJ t	          j        |ddd          }|sJ d|j        v sJ |j        d         }|j        dk    sJ t          j        |j                  }|	                    ddg          }|d         dk    sJ d S )NrH   r=  r5  echo "blah"r   )
r   rO   r   r  r   r  r   r   r   r   r  s        r&   r   z,test_update_command_same_type.<locals>.checkL  s    *733W%%%%%G,,,,,"9-->>>>+GYVVG,,,,,"9-->>>>273IJJ	%%z9&=>>v-//////r(   r@  r   r   s    r&   test_update_command_same_typer  K  sE    0 0 0& 4	! %> 	@AFH H H H Hr(   c                  :    d } t          t          di|            d S )Nc                 "   t          |           }g |j        k    sJ d|j        v sJ |j        d         }|j        dk    sJ t	          j        |ddd          }|sJ d|j        v sJ |j        d         }|j        dk    sJ |j        dk    sJ d S )NrH   r=  r9  r  )r   rO   r   r  r   r  windows_cmd_commandlinerY   r[   r/  r   s       r&   r   z>test_update_command_add_windows_alongside_shell.<locals>.checkf  s    *733W%%%%%G,,,,,"9-->>>>+GY	=YYG,,,,,"9-->>>>.-??????r(   r@  r   r   s    r&   /test_update_command_add_windows_alongside_shellr  e  sH    @ @ @  4	! %> 	@AFH H H H Hr(   c                  :    d } t          t          di|            d S )Nc                 "   t          |           }g |j        k    sJ d|j        v sJ |j        d         }|j        dk    sJ t	          j        |ddd          }|sJ d|j        v sJ |j        d         }|j        dk    sJ |j        dk    sJ d S )NrH   r  r5  r=  )r   rO   r   r  r   r  r  r  s       r&   r   z>test_update_command_add_shell_alongside_windows.<locals>.check}  s    *733W%%%%%G,,,,,"9-.-????+GYVVG,,,,,"9-->>>>.-??????r(   z.commands:
  default:
    windows: echo "blah"
r   r   s    r&   /test_update_command_add_shell_alongside_windowsr  |  sI    @ @ @  4	! %A 	CDIK K K K Kr(   c                  :    d } t          t          di|            d S )Nc                    t          |           }g |j        k    sJ d|j        v sJ |j        d         }|j        dk    sJ t	          j        |d          }|sJ d|j        v sJ |j        d         }|j        dk    sJ d S )NrH   r=  )r   rO   r   r  r   r  r  s       r&   r   z/test_update_command_empty_update.<locals>.check  s    *733W%%%%%G,,,,,"9-->>>>+GY??G,,,,,"9-->>>>>>r(   r@  r   r   s    r&    test_update_command_empty_updater    sE    ? ? ? 4	! %> 	@AFH H H H Hr(   c                  :    d } t          t          di|            d S )Nc                 P   t          |           }g |j        k    sJ d|j        v sJ |j        d         }|j        J |j        dk    sJ t          j        |ddd          }|rJ d|j        j        z  g|j	        k    sJ d|j        v sJ |j        d         }|j        dk    sJ d S )NrH   r=  rr  r   zF%s: command 'default' attribute 'notebook' should be a string not '42')
r   rO   r   rF  r  r   r  r   r   r   r  s       r&   r   z6test_update_command_to_non_string_value.<locals>.check  s    *733W%%%%%G,,,,,"9- (((->>>>+GY
BOOUX_XlXuu
] 	 	 	 G,,,,,"9-->>>>>>r(   r@  r   r   s    r&   'test_update_command_to_non_string_valuer    sE    ? ? ?& 4	! %> 	@AFH H H H Hr(   MYDATAc                 j    t           j        fd            }|                     d|           d S )Nc                 0    G d d          } |            }d|_         t          t          j                                      d          5 }|                    d           d d d            n# 1 swxY w Y   r| _        t          j        |          )Nc                       e Zd ZdS )D_monkeypatch_download_file.<locals>.mock_downloader_run.<locals>.ResN__name__
__module____qualname__r!   r(   r&   Resr            Dr(   r     r?   data)	coder;   rL   r7   rM   write_hashr   Return)r$   r  resoutchecksumrY   filenames       r&   mock_downloader_runz7_monkeypatch_download_file.<locals>.mock_downloader_run  s    	 	 	 	 	 	 	 	 cee"',,w11377 	3IIf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	"!DJjoos   A00A47A48anaconda_project.internal.http_client.FileDownloader.runr   	coroutiner+   )r,   rY   r  r  r  s    ``` r&   _monkeypatch_download_filer    sT    ]
 
 
 
 
 
 ]
 RTghhhhhr(   c                 \    t           j        d             }|                     d|           d S )Nc                 f     G d d          } |            }d|_         t          j        |          )Nc                       e Zd ZdS )J_monkeypatch_download_file_fails.<locals>.mock_downloader_run.<locals>.ResNr  r!   r(   r&   r  r    r  r(   r  i  )r  r   r  )r$   r  r  s      r&   r  z=_monkeypatch_download_file_fails.<locals>.mock_downloader_run  sL    	 	 	 	 	 	 	 	 ceejoor(   r  r  r,   rY   r  s      r&    _monkeypatch_download_file_failsr    s=    ]  ] RTghhhhhr(   c                 \    t           j        d             }|                     d|           d S )Nc                 ^    | j                             d           t          j        d           )NNope nope nope)_errorsappendr   r  )r$   s    r&   r  zR_monkeypatch_download_file_fails_to_get_http_response.<locals>.mock_downloader_run  s)    ,---jr(   r  r  r  s      r&   5_monkeypatch_download_file_fails_to_get_http_responser    s=    ]  ] RTghhhhhr(   c                 J      fd}t          t                      |           d S )Nc                 z   t          |            t          |           }t          j        |d dd          }t          j                            t          j                            | d                    sJ |sJ g |j        k    sJ t          |           }ddi|j	        
                    ddg          k    sJ d S )Nr  http://localhost:123456urlr   r  r   r   add_downloadrL   r7   rR   rM   r   r   r   rY   r[   r   project2r,   s       r&   r   z test_add_download.<locals>.check  s    ";888*733)'4C\]]w~~bgll7H==>>>>>V]"""" ,G4401X5J5T5TVackUl5m5mmmmmmmr(   r  r,   r   s   ` r&   test_add_downloadr    s=    n n n n n 4DFFEBBBBBr(   c                 @      fd}t          t          di|           d S )Nc                 z   t          |            t          |           }t          j        |ddd          }t          j                            t          j                            | d                    sJ |sJ g |j        k    sJ t          |           }ddi|j	        
                    g d          k    sJ d S )Nr   r  r  r  rU   r   r   r  r  r  s       r&   r   z,test_add_download_to_env_spec.<locals>.check  s    ";888*733)'8XG`aaw~~bgll7H==>>>>>V]"""" ,G44,
",,-[-[-[\\] 	] 	] 	] 	] 	]r(   z
env_specs:
    default:
      packages: [python]
      channels: []
    myspec:
      packages: [python]
      channels: []
        r   r  s   ` r&   test_add_download_to_env_specr    sQ    ] ] ] ] ]  4$	
     r(   c                 J      fd}t          t                      |           d S )Nc                    d}t          | |           t          |           }t          j        |d dd|          }t          j                            t          j                            | |                    sJ |sJ g |j        k    sJ t          |           }|j	        
                    ddg          }|d         dk    sJ |d         |k    sJ d S )NTEST_FILENAMEr  r  r   r  r  r  rY   FILENAMEr[   r   r  requirementr,   s         r&   r   z.test_add_download_with_filename.<locals>.check  s    "";BBB*733)'4C\^fggw~~bgll7H==>>>>>V]"""" ,G44+55{H6MNN5!%>>>>>:&(222222r(   r  r  s   ` r&   test_add_download_with_filenamer    s8    3 3 3 3 3" 4DFFEBBBBBr(   c                 J      fd}t          t                      |           d S )Nc                    d}t          | d           t          |           }t          j        |d dddd          }t          j                            t          j                            | |                    sJ |sJ g |j        k    sJ t          |           }|j	        
                    ddg          }|d         dk    sJ |d         dk    sJ d S )	Nr  DIGEST)r  r  md5)hash_algorithm
hash_valuer   r  r  r  s         r&   r   z.test_add_download_with_checksum.<locals>.check2  s    ";(KKKK*733)'*.*2*C9>5=? ? ? w~~bgll7H==>>>>>V]"""" ,G44+55{H6MNN5!%>>>>>5!X------r(   r  r  s   ` r&   test_add_download_with_checksumr  1  s8    . . . . .* 4DFFEBBBBBr(   c                 @      fd}t          t          di|           d S )Nc                 H   t          | d           t          |           }g |j        k    sJ t          dd          t          |j                            ddg                    k    sJ t          j        |d dd          }t          j	        
                    t          j	                            | d                    sJ |sJ g |j        k    sJ t          |           }t          dd          t          |j                            ddg                    k    sJ d S )Nr   r  http://localhost:56789r  r  r   r  r  r  r   rO   r_   r   r   r   r  rL   r7   rR   rM   r   r  s       r&   r   z5test_add_download_which_already_exists.<locals>.checkK  sX   ";(KKKK*733W%%%%%0%' ' '*.w/C/M/M{\dNe/f/f*g*gh 	h 	h 	h )'4C\]]w~~bgll7H==>>>>>V]"""" ,G441%' ' '*.x/D/N/NP[]eOf/g/g*h*hi 	i 	i 	i 	i 	ir(   Jdownloads:
    MYDATA: { url: "http://localhost:56789", filename: foobar }r   r  s   ` r&   &test_add_download_which_already_existsr  J  K    i i i i i* 4	!#pq    r(   c                 @      fd}t          t          di|           d S )Nc                 L   t          | d           t          |           }g |j        k    sJ t          dd          t          |j                            ddg                    k    sJ t          j        |d ddd          }t          j	        
                    t          j	                            | d                    sJ |sJ g |j        k    sJ t          |           }t          dd          t          |j                            ddg                    k    sJ d S )	Nbazquxr   r  r   r  r   r  r  r  r  s       r&   r   z@test_add_download_which_already_exists_with_fname.<locals>.checkf  s^   ";(KKKK*733W%%%%%0%' ' '*.w/C/M/M{\dNe/f/f*g*gh 	h 	h 	h )'4C\gopppw~~bgll7H==>>>>>V]"""" ,G441%' ' '*.x/D/N/NP[]eOf/g/g*h*hi 	i 	i 	i 	i 	ir(   r  r   r  s   ` r&   1test_add_download_which_already_exists_with_fnamer
  e  r  r(   c                 J      fd}t          t                      |           d S )Nc                    t          |            t          |           }t          j        |d dd          }t          j                            t          j                            | d                    rJ |rJ dg|j        k    sJ t          |           }|j	        
                    ddg          J |j	        
                    ddg          J d S )Nr  r  z<Error downloading http://localhost:123456: response code 404r   )r  r   r   r  rL   r7   rR   rM   r   r   r   r  s       r&   r   z&test_add_download_fails.<locals>.check  s    (g>>>*733)'4C\]]7>>"',,w"A"ABBBBBNOSYS````` ,G44$..X/FGGOOO#--{H.EFFNNNNNr(   r  r  s   ` r&   test_add_download_failsr    =    O O O O O  4DFFEBBBBBr(   c                 J      fd}t          t                      |           d S )Nc                    t          |            t          |           }t          j        |d dd          }t          j                            t          j                            | d                    rJ |rJ dg|j        k    sJ t          |           }|j	        
                    ddg          J |j	        
                    ddg          J d S )Nr  r  r  r   )r  r   r   r  rL   r7   rR   rM   r   r   r   r  s       r&   r   z;test_add_download_fails_to_get_http_response.<locals>.check  s    =k7SSS*733)'4C\]]7>>"',,w"A"ABBBBB !V]2222 ,G44$..X/FGGOOO#--{H.EFFNNNNNr(   r  r  s   ` r&   ,test_add_download_fails_to_get_http_responser    r  r(   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          j        |d dd          }t          j                            t          j                            | d                    rJ |rJ d|j        j        z  g|j	        k    sJ t          |           }|j        
                    ddg          J |j        
                    ddg          J d S )Nr  r  r   r   )r   r   r  rL   r7   rR   rM   r   r   r   r   rY   r[   r   r  s       r&   r   z;test_add_download_with_project_file_problems.<locals>.check  s    *733)'4C\]]7>>"',,w"A"ABBBBBh )*
 ] 	 	 	 ,G44$..X/FGGOOO#--{H.EFFNNNNNr(   r   r   r   s    r&   ,test_add_download_with_project_file_problemsr    s4    O O O" 45MOa4bdijjjjjr(   c                 :    d }t          t          di|           d S )Nc                 N   t          |           }t          j        |d dd           }|sJ g |j        k    sJ t          |           }|j                            ddg          J t          j                            t          j        	                    | d                    rJ d S Nr  prepare_resultr   )
r   r   remove_downloadr   r   r   rL   r7   rR   rM   r  s       r&   r   z#test_remove_download.<locals>.check  s    *733,WdHUYZZZV]"""" ,G44$..X/FGGOOO7>>"',,w"A"ABBBBBBBr(   0
downloads:
  MYDATA: "http://localhost:123456"
r   r  s     r&   test_remove_downloadr    sD    
C 
C 
C 4	! $ 	 	    r(   c                 @      fd}t          t          di|           d S )Nc                    t          |            t          |           }t          j        |          }|sJ t          j                            t          j                            | d                    sJ t          j	        |d d|          }|sJ g |j
        k    sJ t          j                            t          j                            | d                    rJ t          |           }|j                            ddg          J d S r  )r  r   prepareprepare_without_interactionrL   r7   rR   rM   r   r  r   r   r   rY   r[   r   r   r  r,   s        r&   r   z0test_remove_download_with_prepare.<locals>.check  s    ";888*7334W==w~~bgll7H==>>>>>,WdHU[\\\V]""""7>>"',,w"A"ABBBBB ,G44$..X/FGGOOOOOr(   r  r   r  s   ` r&   !test_remove_download_with_preparer#    sQ    P P P P P  4	! $ 	 	    r(   c                 :    d }t          t          di|           d S )Nc                    g d}t          |           }d|j                            |          k    sJ t          j        |ddd           }|sJ g |j        k    sJ t          |           }|j                            |          J d S )Nr  r  r   r  r  )r   r   r   r   r  r   rY   config_pathr[   r   r  s        r&   r   z1test_remove_download_with_env_spec.<locals>.check  s    DDD*733(G,@,J,J;,W,WWWWW,WhY]^^^V]"""" ,G44$..{;;CCCCCr(   z
env_specs:
    default:
      packages: [python]
      channels: []
    myspec:
      packages: [python]
      channels: []
      downloads:
        MYDATA: "http://localhost:123456"
r   r  s     r&   "test_remove_download_with_env_specr(    sD    D D D 4$
	
     r(   c                     t          |            t          |            d }t          t          dt          di|           d S )Nc           	         t          |           }t          j        |ddgg           }|sJ |j                    dD ]7}t          j        |d|gg           }|sJ |j                    d|j        v sJ |j        d         }|j        j        sJ t          j	        
                    t          j	                            | t                              sJ t          |           }|j                            ddg          }||d         v sJ |d                     t          j	                            | ddd	          }t          j	                            |          sJ t          j	                            |d
          }t          j	                            |          rJ t#          j        t          j	                            |d                    }	t%          |	          dk    s
J |	            t          j	                            |	d                                       dd          d         }
t+          t-          t.          |
                    d                              dk     sJ |	d                     9t          j        |ddgdg           }|sJ |j                    t          |           }|j        d         }d|j        v sJ |j        |j        d            d S )Nr0   z
python=3.8rg   r]  rX   )zmarkupsafe<2.0.0jinja2pipr]  rX   rU   r]  r  
conda-metapinnedzmarkupsafe-1.*-*r>   r   -rH  .)rH  r   r   chardetT)r]  r-  rX   )condar-  )r   r   add_env_specr   add_packagesrU   lock_setenabledrL   r7   rR   rM   r   r   r   isdirexistsglobrK  r   splittuplemapintrW   r"   )rY   r[   r   r\   envr  env_commented_map	meta_pathr0  filesversionrI  s               r&   r   z8test_add_env_spec_with_real_conda_manager.<locals>.check  s   '"")'acddd$$v}$$$9 	M 	MD -guvXZ[[[F((6=(((G-----#E*C<''''7>>"',,w8U"V"VWWWWW w''H ( 5 ? ?e@T U U,Z88WW:KJ:WWWW Wfe\JJI7==+++++W\\)X66Fw~~f-----Ibgll96HIIJJEu::?))E)))g&&uQx0066sA>>qAGS'--"4"45566BLLE!HLLLL)'5I;TXcefff$$v}$$$7##%e,H11ssX=T]e]r3s3ssssssr(   locking_enabled: true
z.platforms: [linux-64,osx-64,osx-arm64,win-64]
)r   r   r   r   r   r  s     r&   )test_add_env_spec_with_real_conda_managerrF    se    &{333$[111$t $t $tL 4)+D$&W	
 	    r(   c                 d      G  fddt                     }t          |           d S )Nc                   D    e Zd Z fdZfdZd Zd	dZd
fd	ZdS )*_push_conda_test.<locals>.TestCondaManagerc                 V    | _         d| _        t          ddd          | _        d S )NFtest deviationr!   summarymissing_packageswrong_version_packagesmissing_pip_packageswrong_version_pip_packages)	fix_worksfixedr	   
deviations)r$   frontendrR  rN  rO  s     r&   __init__z3_push_conda_test.<locals>.TestCondaManager.__init__D  s=    &DNDJ8AQJZPfNPTV	X X XDOOOr(   c                 H    t                    t          |          S )Nr#   )r   r
   )r$   package_specsrX   r#   resolve_dependenciesresolve_dependencies_errors       r&   rZ  z?_push_conda_test.<locals>.TestCondaManager.resolve_dependenciesM  s/    ) O'(BCCC#$8INNNNr(   c                 F    | j         rt          ddddd          S | j        S )NrS  r!   rL  )rS  r	   rT  )r$   r  r\   s      r&   find_environment_deviationszF_push_conda_test.<locals>.TestCondaManager.find_environment_deviationsS  s?    z '1'CEIKGIMO	Q Q Q Q &r(   NTc                 &    | j         r	d| _        d S d S NT)rR  rS  )r$   r  r\   rT  rN   s        r&   fix_environment_deviationszE_push_conda_test.<locals>.TestCondaManager.fix_environment_deviations]  s!    ~ "!


" "r(   Fc                 *    t                    d S N)r   )r$   r  r]  r-  remove_errors       r&   remove_packagesz:_push_conda_test.<locals>.TestCondaManager.remove_packagesa  s#     6'5556 6r(   r_  F)r  r  r  rV  rZ  r]  r`  rd  )rR  rN  rc  rZ  r[  rO  s   r&   TestCondaManagerrI  C  s        	X 	X 	X 	X 	X 	X 	X	O 	O 	O 	O 	O 	O	' 	' 	'	" 	" 	" 	"	6 	6 	6 	6 	6 	6 	6 	6r(   rf  )r   r   )rR  rN  rO  rc  rZ  r[  rf  s   `````` r&   _push_conda_testrg  A  sm     6  6  6  6  6  6  6  6  6  6  6  6<  6  6  6D -.....r(   c                  "    t                       d S rb  )r   r!   r(   r&   _pop_conda_testri  h  s    r(   Tr!   c                     	 |dg i}t          ||||||            |              t                       d S # t                       w xY w)Nall)rg  ri  )frR  rN  rO  rc  rZ  r[  s          r&   _with_conda_testrm  l  sj     	/$)2; $46Ll\p3	5 	5 	5	s	   $6 Ac                  :    d } t          t          di|            d S )Nc                      fd}t          |           t                     }t          g g           t          |j                            ddg                    k    sJ t          g g           t          |j                            ddg                    k    sJ t          ddt          g           g d	
          t          |j                            ddg                    k    sJ t          ddt          g           g d	
          t          |j                            ddg                    k    sJ d S )Nc                      t                    } t          j        | dg g           }|sJ t          j        | dd d           }|sJ d S )Nr0   r+  rw   r   r   r5  r[   r   rY   s     r&   attemptz1test_add_env_spec.<locals>.check.<locals>.attempt  sZ    g&&G -gEBY[\\\FMMM -gED[_```FMMMMMr(   r.  rU   r0   rw   T(a30f02c961ef4f3fe07ceb09e0906394c3885a79rk  linux-64osx-64win-64lockedenv_spec_hashr]  r#   )rm  r   r_   r   r   	lock_filerY   rs  r  s   `  r&   r   z test_add_env_spec.<locals>.check~  s   	 	 	 	 	 	!!! 7##R"---h6K6U6UWbdiVj6k6k1l1lllllR"---h6K6U6UWbdiVj6k6k1l1lllll4"L!b\\\) ) )* * * .2(2D2N2NP[]bOc2d2d-e-e	f 	f 	f 	f
 4"L!b\\\) ) )* * * .2(2D2N2NP[]bOc2d2d-e-e	f 	f 	f 	f 	f 	fr(   rE  r   r   r   s    r&   test_add_env_specr  }  s4    f f f4 45RTm4npuvvvvvr(   c                 :    d }t          t          di|           d S )Nc           	           fd}t          |           t                     }t          g g t          t	          j                                        t          |j                            ddg                    k    sJ t          ddt          g           t          t	          j                                        t          |j                            ddg                    k    sJ d S )	Nc                     t                    } | j                            dg          }| j                            dg           | j                            g d|           |                                  | j                            dg          J t          | j        d         j                  dk    sJ t          j
        | dg g           }|sJ t          j                    | j        d         j        k    sJ d S )Nr#   )rU   rH   r#   rH   r   r0   r+  )r   r   r   unset_value	set_valuera  rK  rU   r#   r   r5  r  default_platforms_with_current)r[   r#   r   rY   s      r&   rs  zEtest_add_env_spec_no_global_platforms.<locals>.check.<locals>.attempt  s   g&&G,66}EEI ,,k];;; **+P+P+PR[\\\LLNNN'11;-@@HHHw(3=>>BBBB -gEBY[\\\FMMM;==ARSXAYAcccccccr(   )r]  rX   r#   rU   r0   T(da39a3ee5e6b4b0d3255bfef95601890afd80709ru  rz  )	rm  r   r_   rT   r  r  r   r   r}  r~  s   `  r&   r   z4test_add_env_spec_no_global_platforms.<locals>.check  s2   	d 	d 	d 	d 	d 	!!! 7##R"Y=e=g=g8h8hiiimq!++[%,@AAnC nC C 	C 	C 	C 4"L!b\\\"9#K#M#MNNP P P TX *44k55IJJTL TLL 	L 	L 	L 	L 	Lr(   rE  r  r-   r   s     r&   %test_add_env_spec_no_global_platformsr    s4    L L L: 45RTm4npuvvvvvr(   c                  :    d } t          t          di|            d S )Nc                      fd}t          |           t                     }t          g dg d          t          |j                            ddg                    k    sJ |j        d         }|j        dk    sJ |j        j        sJ |j        	                    t          dg ig d	                    sJ d S )
Nc                  f    t                    } t          j        | dg dg d          }|sJ d S Nr0   rs   rt   cc1c2c3r+  rq  rr  s     r&   rs  zLtest_add_env_spec_with_packages_and_channels.<locals>.check.<locals>.attempt  N    g&&G -g387F7I7I7IK K KF MMMMMr(   r  r  r.  rU   r0   rk  rv  rX  )rm  r   r_   r   r   rU   rg   r7  r8  equivalent_tor
   rY   rs  r  rI  s   `   r&   r   z;test_add_env_spec_with_packages_and_channels.<locals>.check  s   	 	 	 	 	 	!!! 7##___///1 1 1489N9X9XZeglYm9n9n4o4op 	p 	p 	p %e,}%%%% (((( ..|UBKSsSsSs/t/t/tuuuuuuur(   rE  r  r   s    r&   ,test_add_env_spec_with_packages_and_channelsr    s4    v v v* 45RTm4npuvvvvvr(   c                  :    d } t          t          di|            d S )Nc                       fd}t          |           t                     }t          g dg d          t          |j                            ddg                    k    sJ d S )Nc                  f    t                    } t          j        | dg dg d          }|sJ d S r  rq  rr  s     r&   rs  zJtest_add_env_spec_extending_existing_lists.<locals>.check.<locals>.attempt  r  r(   )rt   rs   r  r  r  r  r.  rU   r0   rm  r   r_   r   r   r~  s   `  r&   r   z9test_add_env_spec_extending_existing_lists.<locals>.check  s    	 	 	 	 	 	!!! 7##___///1 1 1489N9X9XZeglYm9n9n4o4op 	p 	p 	p 	p 	pr(   z?
env_specs:
  foo:
    packages: [ 'b' ]
    channels: [ 'c3']
r   r   s    r&   *test_add_env_spec_extending_existing_listsr    D    p p p  4	! $ 	
     r(   c                  :    d } t          t          di|            d S )Nc                       fd}t          |           t                     }t          g dg d          t          |j                            ddg                    k    sJ d S )Nc                  f    t                    } t          j        | dg dg d          }|sJ d S )Nr0   )rs   b=2.0r  r  r+  rq  rr  s     r&   rs  zXtest_add_env_spec_extending_existing_lists_with_versions.<locals>.check.<locals>.attempt  sP    g&&G -g387J7J7J7I7I7IK K KF MMMMMr(   )r  rs   r  r  r.  rU   r0   r  r~  s   `  r&   r   zGtest_add_env_spec_extending_existing_lists_with_versions.<locals>.check  s    	 	 	 	 	 	!!! 7##000///1 1 1489N9X9XZeglYm9n9n4o4op 	p 	p 	p 	p 	pr(   zC
env_specs:
  foo:
    packages: [ 'b=1.0' ]
    channels: [ 'c3']
r   r   s    r&   8test_add_env_spec_extending_existing_lists_with_versionsr    r  r(   c                  :    d } t          t          di|            d S )Nc                       fd}t          |d           t                     }|j                            ddg          J |j                            ddg          J d S )Nc                      t          t                                } t          j        | dg g           }|j        dk    sJ |j        g k    sJ | j        j        g k    sJ |rJ d S )NrU  r0   r+  z+Error resolving dependencies for foo: NOPE.)r   r   r   r5  r   r   rU  logsrr  s     r&   rs  zEtest_add_env_spec_cannot_resolve_deps.<locals>.check.<locals>.attempt  s    g???G -gEBY[\\\F,0]]]]]=B&&&&#(B....r(   NOPEr[  rU   r0   )rm  r   r   r   r}  r~  s   `  r&   r   z4test_add_env_spec_cannot_resolve_deps.<locals>.check
  s    	 	 	 	 	 	VDDDD 7##$..U/CDDLLL!++[%,@AAIIIIIr(   rE  r  r   s    r&   %test_add_env_spec_cannot_resolve_depsr  	  s4    J J J  45RTm4npuvvvvvr(   c                  H    d } t          t          dt          di|            d S )Nc                       fd}t          |           t                     }|j                            ddgd           J d S )Nc                  R   t                    } | j                            ddgd           J d| j        v sJ | j        d         }|j        j        sJ |j        j        dk    sJ t          j        | d          }g |j	        k    sJ |j
        dk    sJ |sJ d| j        vsJ d S )NrU   rc   a=1.0=1r   z,Nothing to clean up for environment 'hello'.r   r}  r   rU   r7  r8  "package_specs_for_current_platformr   remove_env_specr   r   r[   r@  r   rY   s      r&   rs  z4test_remove_env_spec.<locals>.check.<locals>.attempt  s    g&&G$..W/EtLLXXXg/////#G,C<''''<BmSSSS 0wGGGF&&&&,0^^^^^MMM'"3333333r(   rU   rc   rm  r   r}  r   r~  s   `  r&   r   z#test_remove_env_spec.<locals>.check  se    	4 	4 	4 	4 	4 	!!! 7##!++[',BDIIQQQQQr(   zZ
name: foo
env_specs:
  hello:
   packages:
     - a
  another:
   packages:
     - b
    
locking_enabled: true
env_specs:
  hello:
    platforms: [linux-32,linux-64,osx-64,osx-arm64,win-32,win-64]
    packages:
      all:
      - a=1.0=1
r   r   r   r   s    r&   test_remove_env_specr    sN    R R R, 4$	 *	
, /    r(   c                  :    d } t          t          di|            d S )Nc                       fd}t          |           t                     }|j                            ddgd           J d S )Nc                      t                    } d| j        v sJ t          j        | d          }g |j        k    sJ |j        dk    sJ |rJ d| j        v sJ d S )Nrc   r   zHAt least one environment spec is required; 'hello' is the only one left.)r   rU   r   r  r   r   rr  s     r&   rs  z9test_remove_only_env_spec.<locals>.check.<locals>.attemptP  s    g&&Gg///// 0wGGGF&&&&, 2Q R R R Rg///////r(   rU   rc   r  r~  s   `  r&   r   z(test_remove_only_env_spec.<locals>.checkO  se    
	0 
	0 
	0 
	0 
	0 	!!! 7##!++[',BDIIQQQQQr(   z9
name: foo
env_specs:
  hello:
   packages:
     - a
    r   r   s    r&   test_remove_only_env_specr  N  sD    R R R& 4	! $ 		     r(   c                  H    d } t          t          dt          di|            d S )Nc                       fd}t          |           t                     }|j                            ddgd           J |j                            ddgd           J d S )Nc                  T   t                    } | j                            ddgd           J d| j        v sJ | j        d         }|j        j        sJ |j        j        dk    sJ t          j        | d          }dg|j	        k    sJ |j
        dk    sJ |rJ d| j        v sJ d S )NrU   rc   r  r   zeanaconda-project.yml: env_spec 'hello' for command 'default' does not appear in the env_specs sectionUnable to load the project.r  r  s      r&   rs  zCtest_remove_env_spec_causes_problem.<locals>.check.<locals>.attemptn  s    g&&G$..W/EtLLXXXg/////#G,C<''''<BmSSSS 0wGGGFA CFLmT T T T,0MMMMMg///////r(   rU   rc   )rm  r   r}  r   r   r~  s   `  r&   r   z2test_remove_env_spec_causes_problem.<locals>.checkm  s    	0 	0 	0 	0 	0  	!!! 7##!++[',BDIIUUU$..W/EtLLXXXXXr(   z
name: foo
commands:
  default:
    unix: echo hi
    env_spec: hello
env_specs:
  hello:
   packages:
     - a
  another:
   packages:
     - b
    r  r  r   s    r&   #test_remove_env_spec_causes_problemr  l  sN    Y Y Y0 4$ *#	
4 7    r(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |           t                     }t          g           ddgt          |j                            d                    k    sJ ddgt          |j                            d                    k    sJ |j                                        D ]?}|j        j	        sJ |j        
                    t          d	g ig d
                    sJ @d S )Nc                      t                    } t          j        | d ddgddg          }|sJ g |j        k    sJ d S )Nr0   rw   rc   r   rU  r]  rX   r   r   r6  r   rr  s     r&   rs  zEtest_add_packages_to_all_environments.<locals>.check.<locals>.attempt  sb    g&&G -g<@8=u~8?7IK K KF MMM&&&&&&r(   r-  r0   rw   r]  rc   r   rX   rk  rv  rX  rm  r   r_   rT   r   r   rU   r  r7  r8  r  r
   r  s   `   r&   r   z4test_add_packages_to_all_environments.<locals>.check  sA   	' 	' 	' 	' 	' 	!!! 7##eU+tH4I4S4ST^4_4_/`/`````!T(*?*I*I**U*U%V%VVVVV *1133 	d 	dH$,,,,$22< Xb Xb Xb 4c 4c 4c d d d d d d	d 	dr(   U
packages:
 - pip: [] # be sure we don't break with this in the list
                rE  r  r   s    r&   %test_add_packages_to_all_environmentsr    sL    d d d, 4$ ' *+D	
     r(   c                  H    d } t          t          dt          di|            d S )Nc                 |     fd}t          |           t                     }t          ddg          gt          |j                            d                    k    sJ |j                                        D ]?}|j        j	        sJ |j        
                    t          dg ig d                    sJ @d S )	Nc                  ~    t                    } t          j        | d ddgdd           }|sJ g |j        k    sJ d S )Nr0   rw   T)rU  r]  r-  rX   r  rr  s     r&   rs  zItest_add_pip_packages_to_all_environments.<locals>.check.<locals>.attempt  s]    g&&G -g<@8=u~267;	= = =F
 MMM&&&&&&r(   r0   rw   r  r]  rk  rv  rX  r  r  s   `   r&   r   z8test_add_pip_packages_to_all_environments.<locals>.check  s!   	' 	' 	' 	' 	' 	!!! 7##eU^$$$
('11*==>>? 	? 	? 	?
 !*1133 	d 	dH$,,,,$22< Xb Xb Xb 4c 4c 4c d d d d d d	d 	dr(   r  rE  r  r   s    r&   )test_add_pip_packages_to_all_environmentsr    sL    d d d2 4$ ' *+D	
     r(   c                  :    d } t          t          di|            d S )Nc                 >     fd}t          |d           t                     }|j                            dd           J |j                            dd           J |j                                        D ]"}|j        j        sJ |j        j        dk    sJ #d S )Nc                      t          t                                } t          j        | d ddgddg          }|j        dk    sJ |j        g k    sJ | j        j        g k    sJ |rJ d S )Nr  r0   rw   rc   r   r  /Error resolving dependencies for default: NOPE.)r   r   r   r6  r   r   rU  r  rr  s     r&   rs  zEtest_add_packages_cannot_resolve_deps.<locals>.check.<locals>.attempt  s    g???G -g<@8=u~8?7IK K KF ,0aaaaa=B&&&&#(B....r(   r  r  r]  rX   r!   	rm  r   r   r   rU   r  r7  r8  r#   r  s   `   r&   r   z4test_add_packages_cannot_resolve_deps.<locals>.check  s    		 		 		 		 		 	VDDDD 7##$..z4@@HHH$..z4@@HHH *1133 	5 	5H$,,,,$."44444	5 	5r(   rE  r  r   s    r&   %test_add_packages_cannot_resolve_depsr    s1    5 5 5. 45RTm4npuvvvvvr(   c                  D    d } t          t                      |            d S )Nc                 0      fd}t          |           d S )Nc                      t                    } t          j        | dddgddg          }|rJ g |j        k    sJ d S )N
not_an_envr0   rw   rc   r   r  r  rr  s     r&   rs  zItest_add_packages_nonexistent_environment.<locals>.check.<locals>.attempt  se    g&&G -g<H8=u~8?7IK K KF &&&&&&r(   rm  rY   rs  s   ` r&   r   z8test_add_packages_nonexistent_environment.<locals>.check  s2    	' 	' 	' 	' 	' 	!!!!!r(   r  r   s    r&   )test_add_packages_nonexistent_environmentr    s-    
" 
" 
" 4DFFEBBBBBr(   c                  D    d } t          t                      |            d S )Nc                 0      fd}t          |           d S )Nc                      t                    } t          j        | d dgg           }|rJ d|j        k    sJ dg|j        k    sJ d S )N=r  zCould not add packages.zBad package specifications: =.)r   r   r6  r   r   rr  s     r&   rs  z>test_add_packages_invalid_spec.<locals>.check.<locals>.attempt  sj    g&&G -gTUXTYdfgggF,0IIIII45FFFFFFr(   r  r  s   ` r&   r   z-test_add_packages_invalid_spec.<locals>.check  s7    	G 	G 	G 	G 	G 	!!!!!r(   r  r   s    r&   test_add_packages_invalid_specr    -    " " " 4DFFEBBBBBr(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |d           t                     }dgt          |j                            d                    k    sJ dgt          |j                            g d                    k    sJ |j                                        D ]?}|j        j        sJ |j        	                    t          dg ig d	
                    sJ @d S )Nc                     t          j        t           j                            dd                     t	                    } | j                                        D ]"}|j        j        sJ |j        j	        dk    sJ #g dt          | j                            d                    k    sJ ddgt          | j                            g dg                     k    sJ t          j        | d dd	g
          }g |j        k    sJ |sJ d S )Nr  rc   r!   r0   rw   r   r]  r0   r   rU   rc   r]  rw   rU  r]  )rL   makedirsr7   rM   r   rU   r  r7  r8  r#   rT   r   r   r   rd  r   r[   rI  r   rY   s      r&   rs  zJtest_remove_packages_from_all_environments.<locals>.check.<locals>.attempt#  s#   KWfg>>???g&&G#-4466 9 9(0000(2b88888(((D1E1O1OPZ1[1[,\,\\\\\6?d7+?+I+IJlJlJlnp+q+q&r&rrrrr 0X]_dWefffF&&&&MMMMMr(   Removal failrc  r   r]  r   r  rk  rv  rX  rm  r   rT   r   r   rU   r  r7  r8  r  r
   r  s   `   r&   r   z9test_remove_packages_from_all_environments.<locals>.check"  s<   	 	 	 	 	 	~>>>> 7##w$x4>>zJJKKKKKKx4 5 ? ?@b@b@b c cdddddd *1133 	d 	dH$,,,,$22< Xb Xb Xb 4c 4c 4c d d d d d d	d 	dr(   z
packages:
  - foo
  - bar
  - baz
env_specs:
  hello:
    packages:
     - foo
     - woot
  hello2:
    packages:
     - foo
     - bar
     - pip: [] # make sure we don't choke on non-string items in list
        rE  r  r   s    r&   *test_remove_packages_from_all_environmentsr  !  sL    d d d4 4$ '  *+D#	
$ '    r(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |d           t                     }dt          dg fg          gt          |j                            d                    k    sJ dgt          |j                            g d                    k    sJ |j                                        D ]?}|j        j	        sJ |j        
                    t          d	g ig d
                    sJ @d S )Nc                  >   t          j        t           j                            dd                     t	                    } | j                                        D ]"}|j        j        sJ |j        j	        dk    sJ #dddt          dg fg          gt          | j                            d                    k    sJ dd	gt          | j                            g d
g                     k    sJ t          j        | d ddg          }g |j        k    sJ |sJ d S )Nr  rc   r!   r0   rw   r   r-  r]  r   r  r  rL   r  r7   rM   r   rU   r  r7  r8  r#   r   rT   r   r   r   rd  r   r  s      r&   rs  zXtest_remove_conda_packages_from_global_with_pip_packages.<locals>.check.<locals>.attemptT  s4   KWfg>>???g&&G#-4466 9 9(0000(2b888885%ubk])C)CDWMaMkMklvMwMwHxHxxxxx6?d7+?+I+IJlJlJlnp+q+q&r&rrrrr 0X]_dWefffF&&&&MMMMMr(   r  r  r   r-  r]  r   r  rk  rv  rX  rm  r   r   rT   r   r   rU   r  r7  r8  r  r
   r  s   `   r&   r   zGtest_remove_conda_packages_from_global_with_pip_packages.<locals>.checkS  sN   	 	 	 	 	 	~>>>> 7##{UBK=112d8;P;Z;Z[e;f;f6g6gggggx4 5 ? ?@b@b@b c cdddddd *1133 	d 	dH$,,,,$22< Xb Xb Xb 4c 4c 4c d d d d d d	d 	dr(   z
packages:
  - foo
  - bar
  - baz
  - pip: []
env_specs:
  hello:
    packages:
     - foo
     - woot
  hello2:
    packages:
     - foo
     - bar
     - pip: [] # make sure we don't choke on non-string items in list
        rE  r  r   s    r&   8test_remove_conda_packages_from_global_with_pip_packagesr  R  sL    d d d4 4$ '" *+D%	
& )    r(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |d           t                     }dt          ddgfg          gt          |j                            d                    k    sJ dt          ddgfg          gt          |j                            g d	                    k    sJ |j                                        D ]?}|j        j	        sJ |j        
                    t          d
g ig d                    sJ @d S )Nc                  b   t          j        t           j                            dd                     t	                    } | j                                        D ]"}|j        j        sJ |j        j	        dk    sJ #dt          dddgfg          gt          | j                            d                    k    sJ dt          ddd	gfg          gt          | j                            g d
g                     k    sJ t          j        | d dgd          }g |j        k    sJ |sJ d S )Nr  rc   r!   r0   r-  rw   r   r]  r   r  TrU  r]  r-  r  r  s      r&   rs  zDtest_remove_pip_packages_from_global.<locals>.check.<locals>.attempt  sZ   KWfg>>???g&&G#-4466 9 9(0000(2b88888;(?'@AABd7K_KiKijtKuKuFvFvvvvv;(@'ABB g2<<=_=_=_acddeef f f f 0X]W^dhiiiF&&&&MMMMMr(   r  r  r0   r-  r   r]  r   r  rk  rv  rX  r  r  s   `   r&   r   z3test_remove_pip_packages_from_global.<locals>.check  sx   	 	 	 	 	 	~>>>> 7##{UUG$4#56674@U@_@_`j@k@k;l;lllll{UVH$5#677 (/99:\:\:\]]^^_ 	_ 	_ 	_ !*1133 	d 	dH$,,,,$22< Xb Xb Xb 4c 4c 4c d d d d d d	d 	dr(   z
packages:
  - foo
  - pip:
    - bar
    - baz
env_specs:
  hello:
    packages:
     - foo
     - pip:
       - bar
       - woot
  hello2: {}
        rE  r  r   s    r&   $test_remove_pip_packages_from_globalr    sL    d d d8 4$ ' *+D!	
" %    r(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |           t                     }dt          ddgfg          gt          |j                            d                    k    sJ t          dg fg          gt          |j                            g dg                     k    sJ t          j        |j        j        dd          	                                }d	|v sJ d
|v sJ |j
                                        D ]Y}|j        dk    r>|j        j        sJ |j                            t!          dg ig d                    sJ K|j        j        sJ Zd S )Nc                  v   t                    } | j                                        D ]"}|j        j        sJ |j        j        dk    sJ #dt          dg dfg          gt          | j        	                    d                    k    sJ t          j        | dddgd	
          }|sJ g |j        k    sJ d S Nr!   qbertr-  pbertr0   rw   r]  rc   r0   rw   Tr  r   rU   r  r7  r8  r#   r   rT   r   r   r   rd  r   r  s      r&   rs  zMtest_remove_pip_packages_from_one_environment.<locals>.check.<locals>.attempt     g&&G#-4466 9 9(0000(2b88888[5 3: 3: 3: +; *< = = >AEgFZFdFdeoFpFpAqAqr r r r 0[`bgZhnrsssFMMM&&&&&&r(   r  r-  r  r]  r  rutf-8# this is a pre comment# this is a post commentrc   rk  rv  rX  rm  r   r   rT   r   r   rQ   r;   r  r  rU   r  rg   r7  r8  r  r
   rY   rs  r  contentrI  s   `    r&   r   z<test_remove_pip_packages_from_one_environment.<locals>.check     	' 	' 	' 	' 	' 	!!! 7## uwi&8%9::;tHDYDcDcdnDoDo?p?pppppeR[M** (/99:\:\:\^`aabbc 	c 	c 	c +h3<c7KKPPRR(G3333)W4444 *1133 	1 	1H}' 1(0000(66 %8X8X8XYYY[ [ [ [ [ [  (00000	1 	1r(   z
packages:
  # this is a pre comment
  - qbert # this is a post comment
  - pip:
    - pbert
    - foo
    - bar
env_specs:
  hello:
    packages:
      - pip:
        - foo
        rE  r  r   s    r&   -test_remove_pip_packages_from_one_environmentr
    sJ    #1 #1 #1J 4$ ' *+D	
  #    r(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |           t                     }dt          ddgfg          gt          |j                            d                    k    sJ dt          dg fg          gt          |j                            g dg                     k    sJ t          j        |j        j        dd          	                                }d	|v sJ d
|v sJ |j
                                        D ]Y}|j        dk    r>|j        j        sJ |j                            t!          dg ig d                    sJ K|j        j        sJ Zd S )Nc                  v   t                    } | j                                        D ]"}|j        j        sJ |j        j        dk    sJ #dt          dg dfg          gt          | j        	                    d                    k    sJ t          j        | dddgd	
          }|sJ g |j        k    sJ d S r  r   r  s      r&   rs  zWtest_remove_pip_packages_from_one_environment_with_pkgs.<locals>.check.<locals>.attempt  r  r(   r  r-  r  r]  r  r  r  r  r  rc   rk  rv  rX  r  r  s   `    r&   r   zFtest_remove_pip_packages_from_one_environment_with_pkgs.<locals>.check  s   	' 	' 	' 	' 	' 	!!! 7## uwi&8%9::;tHDYDcDcdnDoDo?p?pppppubk]33 (/99:\:\:\^`aabbc 	c 	c 	c +h3<c7KKPPRR(G3333)W4444 *1133 	1 	1H}' 1(0000(66 %8X8X8XYYY[ [ [ [ [ [  (00000	1 	1r(   z
packages:
  # this is a pre comment
  - qbert # this is a post comment
  - pip:
    - pbert
    - foo
    - bar
env_specs:
  hello:
    packages:
      - qbert
        rE  r  r   s    r&   7test_remove_pip_packages_from_one_environment_with_pkgsr    sJ    #1 #1 #1J 4$ ' *+D	
 !    r(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |           t                     }dt          ddgfg          gt          |j                            d                    k    sJ t          dg fg          gt          |j                            g dg                     k    sJ t          j        |j        j        dd          	                                }d	|v sJ d
|v sJ |j
                                        D ]Y}|j        dk    r>|j        j        sJ |j                            t!          dg ig d                    sJ K|j        j        sJ Zd S )Nc                  v   t                    } | j                                        D ]"}|j        j        sJ |j        j        dk    sJ #dt          dg dfg          gt          | j        	                    d                    k    sJ t          j        | dddgd	
          }|sJ g |j        k    sJ d S r  r   r  s      r&   rs  zXtest_remove_pip_packages_from_one_environment_empty_pkgs.<locals>.check.<locals>.attempt+	  r  r(   r  r-  r  r]  r  r  r  r  r  rc   rk  rv  rX  r  r  s   `    r&   r   zGtest_remove_pip_packages_from_one_environment_empty_pkgs.<locals>.check*	  r	  r(   z
packages:
  # this is a pre comment
  - qbert # this is a post comment
  - pip:
    - pbert
    - foo
    - bar
env_specs:
  hello:
    packages: []
        rE  r  r   s    r&   8test_remove_pip_packages_from_one_environment_empty_pkgsr  )	  sJ    #1 #1 #1J 4$ ' *+D	
     r(   c                  H    d } t          t          dt          di|            d S )Nc                 l     fd}t          |           t                     }dgt          |j                            d                    k    sJ g t          |j                            g dg                     k    sJ t          j        |j        j        dd                                          }d|v sJ d|v sJ |j	        
                                D ]Y}|j        d	k    r>|j        j        sJ |j                            t          d
g ig d                    sJ K|j        j        sJ Zd S )Nc                     t                    } | j                                        D ]"}|j        j        sJ |j        j        dk    sJ #g dt          | j                            d                    k    sJ dgt          | j                            g dg                     k    sJ t          j
        | dddg          }|sJ g |j        k    sJ d S )	Nr!   r  r0   rw   r]  r0   r  rc   rw   r  )r   rU   r  r7  r8  r#   rT   r   r   r   rd  r   r  s      r&   rs  zItest_remove_packages_from_one_environment.<locals>.check.<locals>.attemptc	  s   g&&G#-4466 9 9(0000(2b88888***d73G3Q3QR\3]3].^.^^^^^7d7#7#A#ABdBdBdfh#i#ijjjjjj 0[`bgZhiiiFMMM&&&&&&r(   r  r]  r  r  r  r  r  rc   rk  rv  rX  )rm  r   rT   r   r   rQ   r;   r  r  rU   r  rg   r7  r8  r  r
   r  s   `    r&   r   z8test_remove_packages_from_one_environment.<locals>.checkb	  s   	' 	' 	' 	' 	' 	!!! 7## yD!6!@!@!L!LMMMMMMT(/99:\:\:\^`aabbbbbb +h3<c7KKPPRR(G3333)W4444 *1133 	1 	1H}' 1(0000(66 %8X8X8XYYY[ [ [ [ [ [  (00000	1 	1r(   z
packages:
  # this is a pre comment
  - qbert # this is a post comment
  - foo
  - bar
env_specs:
  hello:
    packages:
     - foo
        rE  r  r   s    r&   )test_remove_packages_from_one_environmentr  a	  sJ    "1 "1 "1H 4$ 
' *+D	
     r(   c                  :    d } t          t          di|            d S )Nc                      fd}t          |           t                     }dgt          |j                            d                    k    sJ g t          |j                            g dg                     k    sJ t          g d          t          |j                            g dg                     k    sJ |j        d         j        t          g d          k    sJ |j        d	         j        t          dg          k    sJ t          j	        |j        j
        d
d                                          }d|v sJ d|v sJ d S )Nc                  :   t                    } g dt          | j                            d                    k    sJ dgt          | j                            g dg                     k    sJ t	          j        | dddg          }|sJ g |j        k    sJ d S )Nr  r]  r0   r  rc   rw   r  )r   rT   r   r   r   rd  r   rr  s     r&   rs  zctest_remove_packages_from_one_environment_leaving_others_unaffected.<locals>.check.<locals>.attempt	  s    g&&G***d73G3Q3QR\3]3].^.^^^^^7d7#7#A#ABdBdBdfh#i#ijjjjjj 0[`bgZhiiiFMMM&&&&&&r(   r  r]  r  r   r0   rw   rU   anotherr]  r  )r  r0   rw   r   rc   r  r  r  r  )rm  r   rT   r   r   r  rU   r_  rQ   r;   r  r  rY   rs  r  r  s   `   r&   r   zRtest_remove_packages_from_one_environment_leaving_others_unaffected.<locals>.check	  s   	' 	' 	' 	' 	' 	!!! 7##yD!6!@!@!L!LMMMMMMT(/99:\:\:\^`aabbbbbb     "8#8#B#BCgCgCgik#l#lmmn 	n 	n 	n!),DLjLjLjHkHkkkkk!'*Bc7)nnTTTT +h3<c7KKPPRR(G3333)W444444r(   z
packages:
  - qbert
  - foo
  - bar
env_specs:
  hello:
    packages:
     - foo
  another:
    packages:
     # this is a pre comment
     - baz # this is a post comment
r   r   s    r&   Ctest_remove_packages_from_one_environment_leaving_others_unaffectedr  	  sA    5 5 52 4$	
  #    r(   c                  :    d } t          t          di|            d S )Nc                      fd}t          |           t                     }dt          ddgfg          gt          |j                            d                    k    sJ t          dg fg          gt          |j                            g dg                     k    sJ t          g d          t          |j                            g dg           d	         d                   k    sJ |j        d
         j        t          g d          k    sJ |j        d         j        t          dg          k    sJ t          j
        |j        j        dd                                          }d|v sJ d|v sJ d S )Nc                      t                    } dt          dg dfg          gt          | j                            d                    k    sJ t          j        | dddgd	          }|sJ g |j        k    sJ d S )
Nr  r-  r  r]  rc   r0   rw   Tr  )r   r   rT   r   r   r   rd  r   rr  s     r&   rs  zgtest_remove_pip_packages_from_one_environment_leaving_others_unaffected.<locals>.check.<locals>.attempt	  s    g&&G[5 3: 3: 3: +; *< = = >AEgFZFdFdeoFpFpAqAqr r r r 0[`bgZhnrsssFMMM&&&&&&r(   r  r-  r  r]  r  r  r  r   r  )r0   rw   r   r  rc   r  r  r  r  )rm  r   r   rT   r   r   r  rU   pip_package_names_setrQ   r;   r  r  r  s   `   r&   r   zVtest_remove_pip_packages_from_one_environment_leaving_others_unaffected.<locals>.check	  s   	' 	' 	' 	' 	' 	!!! 7##uwi&8%9::;tHDYDcDcdnDoDo?p?pppppeR[M** (/99:\:\:\^`aabbc 	c 	c 	c     "8#8#B#BCgCgCgik#l#lmn#opu#vwwx 	x 	x 	x!),BcJhJhJhFiFiiiii!'*@C	NNRRRR +h3<c7KKPPRR(G3333)W444444r(   z
packages:
  - qbert
  - pip:
    - pbert
    - foo
    - bar
env_specs:
  hello:
    packages:
     - pip:
       - foo
  another:
    packages:
      - pip:
        # this is a pre comment
        - baz # this is a post comment
r   r   s    r&   Gtest_remove_pip_packages_from_one_environment_leaving_others_unaffectedr$  	  sA    5 5 54 4$	
( +    r(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |d           t                     }g dt          |j                            d                    k    sJ ddgt          |j                            g d                    k    sJ |j                                        D ]"}|j        j        sJ |j        j	        d	k    sJ #d S )
Nc                  t   t          j        t           j                            dd                     t	          t                                } | j                                        D ]"}|j        j	        sJ |j        j
        dk    sJ #g dt          | j                            d                    k    sJ ddgt          | j                            g d	g                     k    sJ t          j        | d dd
g          }|j        dk    sJ |j        g k    sJ | j        j        g k    sJ |rJ d S )Nr  rc   r  r!   r  r]  r0   r   r  rw   r  -Error resolving dependencies for hello: NOPE.)rL   r  r7   rM   r   r   rU   r  r7  r8  r#   rT   r   r   r   rd  r   r   rU  r  r  s      r&   rs  zHtest_remove_packages_cannot_resolve_deps.<locals>.check.<locals>.attempt	  s]   KWfg>>???g???G#-4466 9 9(0000(2b88888(((D1E1O1OPZ1[1[,\,\\\\\6?d7+?+I+IJlJlJlnp+q+q&r&rrrrr 0X]_dWefffF,0_____=B&&&&#(B....r(   r  r  r  r]  r0   r   r  r!   )
rm  r   rT   r   r   rU   r  r7  r8  r#   r  s   `   r&   r   z7test_remove_packages_cannot_resolve_deps.<locals>.check	  s    	 	 	 	 	 	VDDDD 7##$$$X-B-L-LZ-X-X(Y(YYYYYv$x'<'F'FGiGiGi'j'j"k"kkkkk *1133 	5 	5H$,,,,$."44444	5 	5r(   zd
packages:
  - foo
  - bar
  - baz
env_specs:
  hello:
    packages:
     - foo
     - woot
        rE  r  r   s    r&   (test_remove_packages_cannot_resolve_depsr)  	  sI    5 5 56 4$ 
' *+D	
     r(   c                  :    d } t          t          di|            d S )Nc                       fd}t          |           t                     }ddgt          |j                            d                    k    sJ d S )Nc                      t                    } ddgt          | j                            d                    k    sJ t	          j        | dddg          }|rJ g |j        k    sJ d|j        k    sJ d S )Nr0   rw   r]  not_an_environmentr  2Environment spec not_an_environment doesn't exist.)r   rT   r   r   r   rd  r   r   rr  s     r&   rs  zQtest_remove_packages_from_nonexistent_environment.<locals>.check.<locals>.attempt'
  s    g&&G5>T'*>*H*H*T*T%U%UUUUU 0H\hmotguvvvF&&&&G6Kdddddddr(   r0   rw   r]  rm  r   rT   r   r   r~  s   `  r&   r   z@test_remove_packages_from_nonexistent_environment.<locals>.check&
  st    	e 	e 	e 	e 	e 	!!! 7##u~h&;&E&Ej&Q&Q!R!RRRRRRRr(   z
packages:
  - foo
  - bar
r   r   s    r&   1test_remove_packages_from_nonexistent_environmentr0  %
  sE    S S S 45M P 5 	    r(   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j        |d dg          }|rJ d|j        j        z  g|j        k    sJ d S )Nr0   r  r   )r   r   rd  r   r   r   r   s      r&   r   z>test_remove_packages_with_project_file_problems.<locals>.check=
  sq    '"",WDTYSZ[[[h )*
 ] 	 	 	 	 	r(   r   r   r   s    r&   /test_remove_packages_with_project_file_problemsr3  <
  r  r(   c                  H    d } t          t          dt          di|            d S )Nc                 ^     fd}t          |           t                     }g dt          |j                            d                    k    sJ |j                                        D ]?}|j        j        sJ |j        	                    t          dg ig d                    sJ @d S )Nc                  z    t                    } t          j        | d ddg          }|sJ g |j        k    sJ d S )Nrw  ry  rU  r#   r   r   add_platformsr   rr  s     r&   rs  zFtest_add_platforms_to_all_environments.<locals>.check.<locals>.attemptL
  sP    g&&G .wdWackVlmmmFMMM&&&&&&r(   )osx-32rw  ry  r#   rk  )rw  r:  ry  rX  r  r  s   `   r&   r   z5test_add_platforms_to_all_environments.<locals>.checkK
  s	   	' 	' 	' 	' 	' 	!!! 7##///48M8W8WXc8d8d3e3eeeee *1133 	d 	dH$,,,,$22< Xb Xb Xb 4c 4c 4c d d d d d d	d 	dr(   z%
platforms: [osx-32]
                rE  r  r   s    r&   &test_add_platforms_to_all_environmentsr;  J
  sL    d d d$ 4$ ' *+D		

     r(   c                  H    d } t          t          dt          di|            d S )Nc                       fd}t          |           t                     }ddgt          |j                            d                    k    sJ d S )Nc                  x    t                    } t          j        | d dg          }|sJ g |j        k    sJ d S )Nr:  r7  r8  rr  s     r&   rs  zAtest_add_platforms_already_exists.<locals>.check.<locals>.attempth
  sM    g&&G .wdW_V`aaaFMMM&&&&&&r(   r:  ry  r#   r/  r~  s   `  r&   r   z0test_add_platforms_already_exists.<locals>.checkg
  sn    	' 	' 	' 	' 	' 	!!!7##(#tH,A,K,KK,X,X'Y'YYYYYYYr(   z-
platforms: [osx-32, win-64]
                rE  r  r   s    r&   !test_add_platforms_already_existsr?  f
  sL    
Z 
Z 
Z 4$ ' *+D		

     r(   c                  :    d } t          t          di|            d S )Nc                      fd}t          |d           t                     }|j                            dd           g dk    sJ |j                                        D ]"}|j        j        sJ |j        j        dk    sJ #d S )Nc                     t          t                                } | j                            dd           g dk    sJ t	          j        | d ddg          }|j        dk    sJ |j        g k    sJ | j        j	        g k    sJ |rJ d S )Nr  r#   rv  r:  zwin-32r7  r  )
r   r   r   r   r   r9  r   r   rU  r  rr  s     r&   rs  zFtest_add_platforms_cannot_resolve_deps.<locals>.check.<locals>.attempt~
  s    g???G'11+tDDHhHhHhhhhh .wdW_aiVjkkkF,0aaaaa=B&&&&#(B....r(   r  r  r#   rv  r!   r  r  s   `   r&   r   z5test_add_platforms_cannot_resolve_deps.<locals>.check}
  s    	 	 	 	 	 	VDDDD 7##$..{DAAEeEeEeeeee *1133 	5 	5H$,,,,$."44444	5 	5r(   rE  r  r   s    r&   &test_add_platforms_cannot_resolve_depsrC  |
  s1    5 5 5( 45RTm4npuvvvvvr(   c                  D    d } t          t                      |            d S )Nc                 0      fd}t          |           d S )Nc                  z    t                    } t          j        | dddg          }|rJ g |j        k    sJ d S )Nr  r0   rw   r7  r8  rr  s     r&   rs  zJtest_add_platforms_nonexistent_environment.<locals>.check.<locals>.attempt
  sS    g&&G .wl_dfk^lmmmF&&&&&&r(   r  r  s   ` r&   r   z9test_add_platforms_nonexistent_environment.<locals>.check
  s2    	' 	' 	' 	' 	' 	!!!!!r(   r  r   s    r&   *test_add_platforms_nonexistent_environmentrG  
  s-    " " " 4DFFEBBBBBr(   c                  D    d } t          t                      |            d S )Nc                 0      fd}t          |           d S )Nc                      t                    } t          j        | d dg          }|rJ d|j        k    sJ dg|j        k    sJ d S )Ninvalid_platformr7  r  zlanaconda-project.yml: Platform name 'invalid_platform' is invalid (valid examples: linux-64, osx-64, win-64))r   r   r9  r   r   rr  s     r&   rs  zCtest_add_platforms_invalid_platform.<locals>.check.<locals>.attempt
  sz    g&&G .wdWiVjkkkF0F4MMMMM6      r(   r  r  s   ` r&   r   z2test_add_platforms_invalid_platform.<locals>.check
  s2    	 	 	 	 	 	!!!!!r(   r  r   s    r&   #test_add_platforms_invalid_platformrL  
  s-    " " " 4DFFEBBBBBr(   c                  H    d } t          t          dt          di|            d S )Nc                       fd}t          |           t                     }dgt          |j                            d                    k    sJ d S )Nc                  N   t                    } | j                                        D ]"}|j        j        sJ |j        j        dk    sJ #ddgt          | j                            d                    k    sJ t          j
        | d dg          }g |j        k    sJ |sJ d S )Nr!   rw  r:  r#   r7  r   rU   r  r7  r8  r#   rT   r   r   r   remove_platformsr   r  s      r&   rs  zKtest_remove_platforms_from_all_environments.<locals>.check.<locals>.attempt
  s    g&&G#-4466 9 9(0000(2b88888)T'2F2P2PQ\2]2]-^-^^^^^ 1'ZdYefffF&&&&MMMMMr(   r:  r#   r/  r~  s   `  r&   r   z:test_remove_platforms_from_all_environments.<locals>.check
  sm    		 		 		 		 		 	!!! 7##zT("7"A"A+"N"NOOOOOOOOr(   zC
platforms:
  - linux-64
  - osx-32
env_specs:
  hello: {}
        rE  r  r   s    r&   +test_remove_platforms_from_all_environmentsrR  
  sL    P P P$ 4$ ' *+D		
 
 
 
 
 
r(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |           t                     }ddgt          |j                            d                    k    sJ dgt          |j                            g dg                     k    sJ t          j        |j        j        dd                                          }d	|v sJ d
|v sJ d S )Nc                     t                    } | j                                        D ]"}|j        j        sJ |j        j        dk    sJ #ddgt          | j                            d                    k    sJ ddgt          | j                            g dg                     k    sJ t          j
        | ddg          }|sJ g |j        k    sJ d S )	Nr!   rw  r:  r#   linux-32rU   rc   r#   rc   r7  rP  r  s      r&   rs  zJtest_remove_platforms_from_one_environment.<locals>.check.<locals>.attempt
  s   g&&G#-4466 9 9(0000(2b88888)T'2F2P2PQ\2]2]-^-^^^^^!%g&:&D&DEhEhEhjl&m&m!n!no o o o 1']e\fgggFMMM&&&&&&r(   rw  r:  r#   rV  rW  r  r  r  r  )	rm  r   rT   r   r   rQ   r;   r  r  r  s   `   r&   r   z9test_remove_platforms_from_one_environment.<locals>.check
  s    	' 	' 	' 	' 	' 	!!! 7## H%h.C.M.Mk.Z.Z)[)[[[[[ |tH$9$C$CDgDgDgik$l$lmmmmmm +h3<c7KKPPRR(G3333)W444444r(   z
platforms:
  # this is a pre comment
  - linux-64 # this is a post comment
  - osx-32
env_specs:
  hello:
    platforms:
     - linux-32
     - osx-32
        rE  r  r   s    r&   *test_remove_platforms_from_one_environmentrX  
  sI    5 5 5> 4$ 
' *+D	
     r(   c                  H    d } t          t          dt          di|            d S )Nc                      fd}t          |d           t                     }ddgt          |j                            d                    k    sJ ddgt          |j                            g dg                     k    sJ d S )	Nc                     t          t                                } | j                                        D ]"}|j        j        sJ |j        j        dk    sJ #ddgt          | j        	                    d                    k    sJ ddgt          | j        	                    g dg                     k    sJ t          j        | ddg	          }|j        g k    sJ | j        j        g k    sJ |j        d
k    sJ |rJ d S )Nr  r!   rw  r:  r#   rV  rW  rc   r7  r(  )r   r   rU   r  r7  r8  r#   rT   r   r   r   rQ  r   rU  r  r   r  s      r&   rs  zItest_remove_platforms_cannot_resolve_deps.<locals>.check.<locals>.attempt  sJ   g???G#-4466 9 9(0000(2b88888)T'2F2P2PQ\2]2]-^-^^^^^!%g&:&D&DEhEhEhjl&m&m!n!no o o o !1']g\hiiiF=B&&&&#(B....,0_____r(   r  r  rw  r:  r#   rV  rW  r/  r~  s   `  r&   r   z8test_remove_platforms_cannot_resolve_deps.<locals>.check  s    	 	 	 	 	  	VDDDD 7##H%h.C.M.Mk.Z.Z)[)[[[[[H%h.C.M.MNqNqNqsu.v.v)w)wwwwwwwr(   zm
platforms:
  - linux-64
  - osx-32
env_specs:
  hello:
    platforms:
     - linux-32
     - osx-32
        rE  r  r   s    r&   )test_remove_platforms_cannot_resolve_depsr\    sL    x x x0 4$ 	' *+D	
     r(   c                  :    d } t          t          di|            d S )Nc                       fd}t          |           t                     }dgt          |j                            d                    k    sJ d S )Nc                      t                    } dgt          | j                            d                    k    sJ t	          j        | ddg          }|rJ g |j        k    sJ d|j        k    sJ d S )Nrw  r#   r-  r7  r.  )r   rT   r   r   r   rQ  r   r   rr  s     r&   rs  zRtest_remove_platforms_from_nonexistent_environment.<locals>.check.<locals>.attempt.  s    g&&G<4(<(F(F{(S(S#T#TTTTT 1'I]jtiuvvvF&&&&G6Kdddddddr(   rw  r#   r/  r~  s   `  r&   r   zAtest_remove_platforms_from_nonexistent_environment.<locals>.check-  sr    	e 	e 	e 	e 	e 	!!! 7##|tH$9$C$CK$P$PQQQQQQQQr(   z
platforms:
  - linux-64
r   r   s    r&   2test_remove_platforms_from_nonexistent_environmentr`  ,  sE    R R R 45M P 5     r(   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j        |d dg          }|rJ d|j        j        z  g|j        k    sJ d S )Nr0   r7  r   )r   r   rQ  r   r   r   r   s      r&   r   z?test_remove_platforms_with_project_file_problems.<locals>.checkC  sq    '""-gTV[U\]]]h )*
 ] 	 	 	 	 	r(   r   r   r   s    r&   0test_remove_platforms_with_project_file_problemsrc  B  r  r(   c                  D    d } t          t                      |            d S )Nc                 0      fd}t          |           d S )Nc                      t                    } t          j        | d          }|rJ g |j        k    sJ d|j        k    sJ d S Nr  rT  z*Environment spec not_an_env doesn't exist.)r   r   lockr   r   rr  s     r&   rs  zAtest_lock_nonexistent_environment.<locals>.check.<locals>.attemptR  s^    .w77G %g\JJJF&&&&?6C\\\\\\\r(   r  r  s   ` r&   r   z0test_lock_nonexistent_environment.<locals>.checkQ  7    	] 	] 	] 	] 	] 	!!!!!r(   r  r   s    r&   !test_lock_nonexistent_environmentrj  P  r  r(   c                  D    d } t          t                      |            d S )Nc                 0      fd}t          |           d S )Nc                      t                    } t          j        | d          }|rJ g |j        k    sJ d|j        k    sJ d S rg  )r   r   unlockr   r   rr  s     r&   rs  zCtest_unlock_nonexistent_environment.<locals>.check.<locals>.attempt`  s^    .w77G '|LLLF&&&&?6C\\\\\\\r(   r  r  s   ` r&   r   z2test_unlock_nonexistent_environment.<locals>.check_  ri  r(   r  r   s    r&   #test_unlock_nonexistent_environmentro  ^  r  r(   c                  :    d } t          t          di|            d S )Nc                 0      fd}t          |           d S )Nc                      t                    } t          j        | d           }|rJ t          |j                  dk    sJ d S NrT  r   )r   r   rh  rK  r   rr  s     r&   rs  z8test_lock_broken_project.<locals>.check.<locals>.attemptn  sR    .w77G %gTBBBFv}%%))))))r(   r  r  s   ` r&   r   z'test_lock_broken_project.<locals>.checkm  2    	* 	* 	* 	* 	* 	!!!!!r(   r   r   r   r   s    r&   test_lock_broken_projectrv  l  /    " " " 5r:EBBBBBr(   c                  :    d } t          t          di|            d S )Nc                 0      fd}t          |           d S )Nc                      t                    } t          j        | d           }|rJ t          |j                  dk    sJ d S rs  )r   r   rn  rK  r   rr  s     r&   rs  z:test_unlock_broken_project.<locals>.check.<locals>.attempt{  sR    .w77G 'tDDDFv}%%))))))r(   r  r  s   ` r&   r   z)test_unlock_broken_project.<locals>.checkz  rt  r(   r   ru  r   s    r&   test_unlock_broken_projectr{  y  rw  r(   c                  :    d } t          t          di|            d S )Nc                 F     dgdgd fd}t          |           d S )Nr  cc==1.0)rk  r-  c                   
   t           j                            t                    } t           j                            |           rJ t          t                                }|j        d         j        dk    sJ |j        d         j        dk    sJ t          j
        |d           }g |j        k    sJ |sJ d                    d                    t          j                              d                    d	 t          j                    D                       
                                          }||j        j        k    sJ t           j                            |           sJ d|j        d         j        j        k    sJ d|j        d         j        j        k    sJ dg|j        d         j        j        k    sJ dg|j        d         j        j        k    sJ d|j        d         j        k    sJ d|j        d         j        k    sJ dg|j        d         j        k    sJ dg|j        d         j        k    sJ |j        d         j        t          j                    k    sJ |j        d         j        t          j                    k    sJ t          j                    |j                            d          k    sJ |j                            g dd           J |j                            g dd           J |j                                         t          j
        |d           }g |j        k    sJ |sJ |j                                         t          j        |d           }g |j        k    sJ |sJ g d|j        j        k    sJ |j        dk    sJ |j                                         dgd<   t          j        |d           }g |j        k    sJ |sJ |j        dk    sJ d|j        d         j        k    sJ d|j        j        v sJ d|j        j        v sJ |j                                         t          j        |d           }g |j        k    sJ |sJ d|j        k    sJ |j        d         j        j        sJ |j        d         j        j        sJ d|j        d         j        k    sJ d|j        d         j        k    sJ d|j        d         j        k    sJ d|j        d         j        k    sJ d S )Nr  r0   r!   rw   rT  a  Set project platforms list to {platforms}
Updating locked dependencies for env spec bar...
Changes to locked dependencies for bar:
  platforms:
{platforms_diff}
  packages:
+   all:
+     a=1.0=1
+   pip:
+     cc==1.0
Added locked dependencies for env spec bar to anaconda-project-lock.yml.
Updating locked dependencies for env spec foo...
Changes to locked dependencies for foo:
  platforms:
{platforms_diff}
  packages:
+   all:
+     a=1.0=1
+   pip:
+     cc==1.0
Added locked dependencies for env spec foo to anaconda-project-lock.yml., 
c                 :    g | ]}d                      |          S z+   {p})pformat.0r  s     r&   
<listcomp>z\test_lock_and_update_and_unlock_all_envs.<locals>.check.<locals>.attempt.<locals>.<listcomp>  )    )t)t)tA)*:*:Q*:*?*?)t)t)tr(   r#   platforms_diffr  r~  r#   rU   r0   r#   rU   rw   r#   )0Updating locked dependencies for env spec bar...z<Locked dependencies for env spec bar are already up to date.0Updating locked dependencies for env spec foo...<Locked dependencies for env spec foo are already up to date.Update complete.a=2.0=0rk  )r  z-     a=1.0=1z+     a=2.0=0z#Dependency locking is now disabled.)rs   rt   )cc)dd)rL   r7   rM   r   rR   r   r   rU   r#   r   rh  r   r  r  r  
splitlinesrU  r  r7  r  pip_package_specsconda_packages_for_createpip_packages_for_creater   r   resetupdater   rn  disabled)r  r[   r   expected_outputrY   resolve_resultss       r&   rs  zHtest_lock_and_update_and_unlock_all_envs.<locals>.check.<locals>.attempt  s   w||G-JKKHw~~h/////g???G$U+5;;;;$U+5;;;; !%gTBBBF&&&&MMML( MSF))I$L$N$NOO#yy)t)tIqIsIs)t)t)tuu MS M M jll/ 0 #g&6&;;;;; 7>>(+++++ G$5e$<$E$hhhhh G$5e$<$E$hhhhh;'"3E":"C"UUUUU;'"3E":"C"UUUUU G$5e$<$VVVVV G$5e$<$VVVVV;'"3E":"RRRRR;'"3E":"RRRRR$U+59a9c9ccccc$U+59a9c9ccccc ;==AUA_A_`kAlAlllll'112S2S2SUYZZbbb'112S2S2SUYZZbbb ""$$$ %gTBBBF&&&&MMM ""$$$ 'tDDDF&&&&MMM  
 !&' ' ' ' ,0BBBBB ""$$$&/[OE" 'tDDDF&&&&MMM,0BBBBB G$5e$<$VVVVV"g&6&;;;;;"g&6&;;;;; ""$$$ 'tDDDF&&&&MMM8F<UUUUU$U+4====$U+4====g/6PPPPPg/6PPPPPw07OOOOOw07OOOOOOOr(   rZ  r  )rY   rs  r  s   ` @r&   r   z7test_lock_and_update_and_unlock_all_envs.<locals>.check  s[    #,+ykBBn	P n	P n	P n	P n	P n	P` 	GGGGGGr(   z
name: locktest
env_specs:
  foo:
    packages:
      - a
      - pip:
        - cc
  bar:
    packages:
      - b
      - pip:
        - dd
ru  r   s    r&   (test_lock_and_update_and_unlock_all_envsr    sH    sH sH sHj $	
  #    r(   c                 :    d }t          t          di|           d S )Nc                 :      fd}t          |ddgi           d S )Nc                  	   t           j                            t                    } t           j                            |           rJ t          t                                }|j        d         j        dk    sJ |j        d         j        dk    sJ t          j
        |d          }g |j        k    sJ |sJ d                    d                    t          j                              d	                    d
 t          j                    D                                                                 }||j        j        k    sJ d|j        k    sJ t           j                            |           sJ |j        d         j        }d|j        k    sJ |j        dk    sJ |j        d         j        j        sJ d|j        d         j        k    sJ d|j        d         j        k    sJ |j        d         j        t          j                    k    sJ |j        d         j        dk    sJ |j                            dd           J t          j                    |j                            g dd           k    sJ dg|j                            g dd           k    sJ |j                                         t          j
        |d          }g |j        k    sJ |sJ dg|j        j        k    sJ d|j        k    sJ |j                                         t          j        |d          }g |j        k    sJ |sJ ddg|j        j        k    sJ d|j        k    sJ |j                                         t          j        |ddg           }g |j        k    sJ |sJ g |j        j        k    sJ |j                            d          sJ |j        d         j        }d|j        k    sJ |j        dk    sJ |j                                         t          j        |d          }g |j        k    sJ |sJ g |j        j        k    sJ d|j        k    sJ |j        d         j        j        sJ |j        d         j        j        sJ d|j        d         j        k    sJ d|j        d         j        k    sJ d S )Nr  r0   r!   rw   )rx  rT  a  Set platforms for foo to {platforms}
Updating locked dependencies for env spec foo...
Changes to locked dependencies for foo:
  platforms:
{platforms_diff}
  packages:
+   all:
+     a=1.0=1
Added locked dependencies for env spec foo to anaconda-project-lock.yml.r  r  c                 :    g | ]}d                      |          S r  r  r  s     r&   r  zStest_lock_and_unlock_single_env.<locals>.check.<locals>.attempt.<locals>.<listcomp>+  r  r(   r   Project dependencies are locked.r  (86f7e437faa5a7fce15d1ddcb9eaeaea377667b8r  r#   r  rx  r  zEnv spec foo is already locked.r  r  r  qr.  zUsing Conda environment(b3a7c645306726ef4965c7be7e859ec0efd9af5bz4Dependency locking is now disabled for env spec foo.)rs   r  )rL   r7   rM   r   rR   r   r   rU   r#   r   rh  r   r  r  r  r  rU  r  r   r7  r  r|  r  r  r   r   r  r  r6  
startswithrn  )r  r[   r   r  foo_lock_setrY   s        r&   rs  z?test_lock_and_unlock_single_env.<locals>.check.<locals>.attempt  s{   w||G-JKKHw~~h/////g???G$U+5;;;;$U+5EEEE !%gUCCCF&&&&MMML MSF))I$L$N$NOO#yy)t)tIqIsIs)t)t)tuu MS M M jll  #g&6&;;;;; 69RRRRR7>>(+++++",U3<L L$SSSSS-1[[[[[$U+4==== G$5e$<$VVVVVg/6PPPPP$U+59a9c9ccccc$U+5EEEE '11+tDDLLL;==AUA_A_1114B9 B9 9 9 9 9 %//0Q0Q0QSWXXY Y Y Y
 ""$$$ %gUCCCF&&&&MMM56':J:OOOOO59RRRRR ""$$$ 'uEEEF&&&&MMMBN !&' ' ' ' &)BBBBB ""$$$ -gusUWXXXF&&&&MMM).....,778QRRRRR",U3<L L$SSSSS-1[[[[[ ""$$$ 'uEEEF&&&&MMM).....IVMfffff$U+4====$U+4====!25!9!SSSSSg/6PPPPPPPr(   rk  r  r  r  r  s   ` r&   r   z.test_lock_and_unlock_single_env.<locals>.check  sI    `	Q `	Q `	Q `	Q `	QD 		{7KLLLLLLr(   zq
name: locktest
env_specs:
  foo:
    packages:
      - a
  bar:
    platforms: [osx-64]
    packages:
      - b
ru  r  s     r&   test_lock_and_unlock_single_envr    sH    cM cM cMJ $
	
     r(   c                  H    d } t          t          dt          di|            d S )Nc                 :      fd}t          |ddgi           d S )Nc                  ,   t           j                            t                    } t           j                            |           sJ t          t                                }|j        d         j        dk    sJ |j        d         j	        j
        sJ |j        d         j	        j        sJ t          j        |d          }g |j        k    sJ |sJ g d|j        j        k    sJ d|j        k    sJ t           j                            |           sJ |j                            ddg          J |j        d         j	        }d|j        k    sJ |j        d	k    sJ |j        d         j	        j
        sJ |j        d         j	        j        rJ d S )
Nr  r0   rw  rx  z	osx-arm64ry  rT  )r  'Changes to locked dependencies for foo:  platforms:+   linux-64
+   osx-64+   osx-arm64
+   win-64  packages:+   all:+     a=1.0=1zHAdded locked dependencies for env spec foo to anaconda-project-lock.yml.r  rU   r  (83ac707b75eaa131f7a26a0b09172a7f39ff7195)rL   r7   rM   r   rR   r   r   rU   r#   r7  r8  missingr   rh  r   rU  r  r   r}  r   r  r|  )r  r[   r   r  rY   s       r&   rs  zQtest_locking_with_missing_lock_set_does_an_update.<locals>.check.<locals>.attempt  s   w||G-JKKH7>>(+++++g???G$U+59fffff$U+4<<<<$U+4<<<< !%gUCCCF&&&&MMM
` 
` 
` dkcscx
y 
y 
y 
y 69RRRRR7>>(+++++$..U/CDDPPP",U3<L L$SSSSS-1[[[[[$U+4<<<<(/8@@@@@@r(   rk  r  r  r  r  s   ` r&   r   z@test_locking_with_missing_lock_set_does_an_update.<locals>.check  sD    '	A '	A '	A '	A '	AR 		{7KLLLLLLr(   zp
name: locktest
platforms: [linux-64,osx-64,osx-arm64,win-64]
env_specs:
  foo:
    packages:
      - a
        z.
locking_enabled: true
# No lock set in here!
r   r   r   r   s    r&   1test_locking_with_missing_lock_set_does_an_updater    sO    *M *M *MX $ ' * ,	
     r(   c                  H    d } t          t          dt          di|            d S )Nc                 :      fd}t          |ddgi           d S )Nc                     t          t                                } | j        d         j        }d|j        k    sJ |j        dk    sJ d| j        d         j        k    sJ t          j        | d          }g |j	        k    sJ |sJ ddg| j
        j        k    sJ d|j        k    sJ | j        d         j        }d|j        k    sJ |j        d	k    sJ d S )
Nr  r0   r  oldrT  r  zgUpdated hash for env spec foo to 072f81028686690f6e2c6602e484ba78d084eec9 in anaconda-project-lock.yml.r  (072f81028686690f6e2c6602e484ba78d084eec9)r   r   rU   r7  r  r|  r  r   r  r   rU  r  r   )r[   r  r   rY   s      r&   rs  zAtest_update_changes_only_the_hash.<locals>.check.<locals>.attempt  s!   g???G",U3<L L$SSSSS-6666 G$5e$<$VVVVV !'uEEEF&&&&MMMB- !&	' ' ' '
 &)BBBBB",U3<L L$SSSSS-1[[[[[[[r(   rk  r  r  r  r  s   ` r&   r   z0test_update_changes_only_the_hash.<locals>.check  sC    	\ 	\ 	\ 	\ 	\0 		{7KLLLLLLr(   zx
name: locktest
platforms: [linux-32,linux-64,osx-64,osx-arm64,win-32,win-64]
env_specs:
  foo:
    packages:
      - a
z
locking_enabled: true
env_specs:
  foo:
    platforms: [linux-32,linux-64,osx-64,osx-arm64,win-32,win-64]
    env_spec_hash: old
    packages:
      all: ['a=1.0=1']
r  r   s    r&   !test_update_changes_only_the_hashr    sN    M M M6 $ *	
( +    r(   c                  :    d } t          t          di|            d S )Nc                 >      fd}t          |dddgid           d S )Nc                  x   t           j                            t                    } t           j                            |           rJ t          t                                }t          j        |d           }g |j	        k    sJ |rJ d|j
        k    sJ t           j                            |           rJ d S )Nr  rT  rK  rL   r7   rM   r   rR   r   r   r   rh  r   r   r  r[   r   rY   s      r&   rs  z5test_lock_conda_error.<locals>.check.<locals>.attempt  s    w||G-JKKHw~~h/////g???G %gTBBBF&&&&#v'@@@@@w~~h///////r(   rr   rk  r  FrN  rZ  rR  r  r  s   ` r&   r   z$test_lock_conda_error.<locals>.check  sQ    
	0 
	0 
	0 
	0 
	0 	*4/4yk.B#(	* 	* 	* 	* 	* 	*r(   
name: locktest
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
env_specs:
  foo:
    packages:
      - a
  bar:
    packages:
      - b
ru  r   s    r&   test_lock_conda_errorr    sA    * * *$ $
	
     r(   c                 :    d }t          t          di|           d S )Nc                 6      fd}t          |dd           d S )Nc                  t   t           j                            t                    } t           j                            |           rJ t          t                                }t          j        |d           }g |j	        k    sJ |rJ d|j
        v sJ t           j                            |           rJ d S )Nr  rT  Nope on resolver  r  s      r&   rs  zDtest_lock_resolve_dependencies_error.<locals>.check.<locals>.attempt  s    w||G-JKKHw~~h/////g???G %gTBBBF&&&&$(AAAAAw~~h///////r(   rr   r  )rN  r[  r  r  s   ` r&   r   z3test_lock_resolve_dependencies_error.<locals>.check  s:    
	0 
	0 
	0 
	0 
	0 	:Zkllllllr(   r  ru  r  s     r&   $test_lock_resolve_dependencies_errorr    sD    m m m $
	
     r(   c                  H    d } t          t          dt          di|            d S )Nc                 >      fd}t          |dddgid           d S )Nc                  @   t           j                            t                    } t           j                            |           sJ t          t                                }|j        d         j        j	        sJ |j        d         j        j	        sJ t          j        |d           }g |j        k    sJ |rJ d|j        k    sJ t           j                            |           sJ |j        d         j        j	        sJ |j        d         j        j	        sJ d S )Nr  r0   rw   rT  rK  )rL   r7   rM   r   rR   r   r   rU   r7  r8  r   rn  r   r   r  s      r&   rs  z7test_unlock_conda_error.<locals>.check.<locals>.attempt@  s   w||G-JKKH7>>(+++++g???G$U+4<<<<$U+4<<<< 'tDDDF&&&&#v'@@@@@7>>(+++++$U+4<<<<$U+4<<<<<<r(   rr   rk  r  Fr  r  r  s   ` r&   r   z&test_unlock_conda_error.<locals>.check?  sQ    	= 	= 	= 	= 	=& 	*4/4yk.B#(	* 	* 	* 	* 	* 	*r(   r  a  
locking_enabled: true
env_specs:
  foo:
    locked: true
    platforms: [linux-32,linux-64,osx-64,win-32,win-64]
    packages:
       all:
         - c
  bar:
    locked: true
    platforms: [linux-32,linux-64,osx-64,win-32,win-64]
    packages:
       all:
         - d
r  r   s    r&   test_unlock_conda_errorr  >  sK    * * *2 $
 *	
< ?    r(   c                  :    d } t          t          di|            d S )Nc                 >     ddgi} fd}t          ||           d S )Nrk  r  c                  H   t           j                            t                    } t           j                            |           rJ t          t                                }|j                                        D ]}|j	        j
        sJ t          j        |d           }g |j        k    sJ |sJ |j        dk    sJ |j        j        g dk    sJ t           j                            |           rJ |j                                        D ]}|j	        j
        sJ d S )Nr  rT  r  )r  z'Updated installed dependencies for bar.r  z'Updated installed dependencies for foo.)rL   r7   rM   r   rR   r   r   rU   r  r7  r  r   r  r   r   rU  r  )r  r[   r@  r   rY   s       r&   rs  z9test_update_unlocked_envs.<locals>.check.<locals>.attempt~  sK   w||G-JKKHw~~h/////g???G (//11 - -|,,,,, !'tDDDF&&&&MMM,0BBBBB#( - - -     w~~h///// (//11 - -|,,,,,- -r(   r  r  rY   r  rs  s   `  r&   r   z(test_update_unlocked_envs.<locals>.check{  sC     9+.	- 	- 	- 	- 	-6 	GGGGGGr(   r  ru  r   s    r&   test_update_unlocked_envsr  z  sE    H H H@ $
	
     r(   c                  H    d } t          t          dt          di|            d S )Nc                 >     ddgi} fd}t          ||           d S )Nrk  r  c                     t          t                                } | j                                        D ]0}|j        j        sJ |j        j        dk    sJ |j        j        rJ 1t          j	        | d           }g |j
        k    sJ |sJ |j        dk    sJ | j        j        g dk    sJ | j                                        D ]B}|j        j        sJ |j        j        sJ |j        j        dk    sJ |j        j        dk    sJ Cd S )Nr  r!   rT  r  )r  z'Changes to locked dependencies for bar:r  r  r  r  r  r  r  r  zJUpdated locked dependencies for env spec bar in anaconda-project-lock.yml.r  r  r  r  r  r  r  r  r  r  zJUpdated locked dependencies for env spec foo in anaconda-project-lock.yml.r  r  )r   r   rU   r  r7  r8  r#   supports_current_platformr   r  r   r   rU  r  r  r  s      r&   rs  z;test_update_empty_lock_sets.<locals>.check.<locals>.attempt  sj   g???G (//11 B B|++++|-3333<AAAAA !'tDDDF&&&&MMM,0BBBBB#( - - -    2 (//11 X X|++++|====|-1^^^^^|F-WWWWW	X Xr(   r  r  r  s   `  r&   r   z*test_update_empty_lock_sets.<locals>.check  sI     9+.,	X ,	X ,	X ,	X ,	X\ 	GGGGGGr(   z
name: locktest
platforms: [linux-64,osx-64,osx-arm64,win-64]
env_specs:
  foo:
    packages:
      - a
  bar:
    packages:
      - b
        rE  r  r   s    r&   test_update_empty_lock_setsr    sM    1H 1H 1Hf $ 
' *+D	
     r(   c                  0    d } t          ddi|            d S )Nc                     t          |           }t          j                            | d          }t	          j        |d|          }|sJ |j        d|z  k    sJ d S )Nexported.ymlrH   rg   r  z(Exported environment spec default to %s.)r   rL   r7   rM   r   export_env_specr   rY   r[   exportedr   s       r&   r   z#test_export_env_spec.<locals>.check  se    *7337<<88,W9xXXX(-WZb-bccccccr(   r   L
env_specs:
  default:
    packages:
      - blah
    channels:
      - boo
rx  r   s    r&   test_export_env_specr    sD    d d d 4	 " 	     r(   c                  0    d } t          ddi|            d S )Nc                     t          |           }t          j                            | d          }t	          j        |d|          }|rJ t          j                            |          rJ |j        dk    sJ d S )Nr  rw   r  z#Environment spec bar doesn't exist.)r   rL   r7   rM   r   r  r:  r   r  s       r&   r   z/test_export_nonexistent_env_spec.<locals>.check  s|    *7337<<88,W58TTT7>>(+++++(,QQQQQQQr(   r   r  rx  r   s    r&    test_export_nonexistent_env_specr    sD    R R R 4	 " 	     r(   c                 6      fd}t          ddi|           d S )Nc                 0   t          |           }t          j                            | d          }d }                    d|           t          j        |d|          }|rJ t          j                            |          rJ |j        d|z  k    sJ d S )Nr  c                       t          d          )NNOOOr5   rC   rD   s     r&   mock_atomic_replacezItest_export_env_spec_io_error.<locals>.check.<locals>.mock_atomic_replace  r9   r(   z*anaconda_project.yaml_file._atomic_replacerH   r  zFailed to save %s: NOOO.)	r   rL   r7   rM   r+   r   r  r:  r   )rY   r[   r  r  r   r,   s        r&   r   z,test_export_env_spec_io_error.<locals>.check  s    *7337<<88	" 	" 	" 	HJ]^^^,W9xXXX7>>(+++++(-G(-RSSSSSSr(   r   r  rx  r  s   ` r&   test_export_env_spec_io_errorr    sQ    T T T T T 4	 " 	     r(   c                 T    ddl m g dfd	}|                     d|           S )Nr   )can_connect_to_socket      ?c                     t                      }| |d<   ||d<   ||d<                       |           |dk    rdS  | ||          S )Nhostporttimeout_secondsi  T)r_   r  )r  r  r  can_connect_argscan_connect_args_listreal_can_connect_to_sockets       r&   mock_can_connect_to_socketz]_monkeypatch_can_connect_to_socket_on_standard_redis_port.<locals>.mock_can_connect_to_socket6  sk    66#' #' .=*+$$%56664< 	K4--dD/JJJr(   zIanaconda_project.requirements_registry.network_util.can_connect_to_socket)r  )3anaconda_project.requirements_registry.network_utilr  r+   )r,   r  r  r  s     @@r&   9_monkeypatch_can_connect_to_socket_on_standard_redis_portr  1  sn    wwwwww	K 	K 	K 	K 	K 	K 	K c24 4 4 ! r(   c                 J      fd}t          t                      |           d S )Nc                 8   t                     t          |           }t          j        |d d          }|sJ t	          |j        j        t                    sJ g |j        k    sJ t          |           }d|j	        
                    ddg          k    sJ d S )Nredisservice_typeservices	REDIS_URLr  r   r   add_servicer   rU  r  rT   r   r   r   r  s       r&   r   ztest_add_service.<locals>.checkH  s    A+NNN*733($WMMM'*/66666V]"""" ,G44(/99:{:STTTTTTTTr(   r  r  s   ` r&   test_add_servicer  G  s=    U U U U U 4DFFEBBBBBr(   c                 @      fd}t          t          di|           d S )Nc                 8   t                     t          |           }t          j        |dd          }|sJ t	          |j        j        t                    sJ g |j        k    sJ t          |           }d|j	        
                    g d          k    sJ d S )Nr   r  r  rU   r   r  r  r  r  s       r&   r   z-test_add_service_with_env_spec.<locals>.checkZ  s    A+NNN*733((QQQ'*/66666V]"""" ,G44(/99:j:j:jkkkkkkkkr(   r   r   r  s   ` r&   test_add_service_with_env_specr  Y  sQ    l l l l l 4$	
     r(   c                 J      fd}t          t                      |           d S )Nc                 :   t                     t          |           }t          j        |d dd          }|sJ t	          |j        j        t                    sJ g |j        k    sJ t          |           }d|j	        
                    ddg          k    sJ d S )Nr  MY_SPECIAL_REDIS)r  variable_namer  r  r  s       r&   r   z8test_add_service_nondefault_variable_name.<locals>.checkx  s    A+NNN*733($W\nooo'*/66666V]"""" ,G44(/99:GY:Z[[[[[[[[r(   r  r  s   ` r&   )test_add_service_nondefault_variable_namer  w  s=    \ \ \ \ \ 4DFFEBBBBBr(   c                  :    d } t          t          di|            d S )Nc                 ^   t          | t                                }t          j        |d d          }|rJ d|j        j        z  g|j        k    sJ t          | t                                }|j                            ddg          J |j                            ddg          J d S )Nr  r  r  r   r  r  )r   r   r   r  r   r   r   r   r  s       r&   r   z:test_add_service_with_project_file_problems.<locals>.check  s    'LNN;;;($WMMMh )*
 ] 	 	 	 7\^^<<<$..
K/HIIQQQ#--z;.GHHPPPPPr(   r   r   r   s    r&   +test_add_service_with_project_file_problemsr    s4    Q Q Q  45MOa4bdijjjjjr(   c                 @      fd}t          t          di|           d S )Nc                 T   t                     t          |           }t          j        |d d          }|sJ t	          |j        j        t                    sJ g |j        k    sJ t          | t                                }d|j                            ddg          k    sJ d S )Nr  r  r  r  r  )r  r   r   r  r   rU  r  rT   r   r   r   r   r   r  s       r&   r   z.test_add_service_already_exists.<locals>.check  s    A+NNN*733($WMMM'*/66666V]"""" 7\^^<<<(/99:{:STTTTTTTTr(   
services:
  REDIS_URL: redis
r   r  s   ` r&   test_add_service_already_existsr    sR    U U U U U 45M P 5     r(   c                 @      fd}t          t          di|           d S )Nc                     t                     t          | t                                }t          j        |d d          }|rJ dg|j        k    sJ d S )Nr  r  r  z,Service REDIS_URL has an unknown type 'foo'.r  r   r   r   r  r   rY   r[   r   r,   s      r&   r   zBtest_add_service_already_exists_with_different_type.<locals>.check  sh    A+NNN'LNN;;;($WMMM ??6=PPPPPPr(   z
services:
  REDIS_URL: foo
r   r  s   ` r&   3test_add_service_already_exists_with_different_typer    sR    	Q 	Q 	Q 	Q 	Q 45M P 5     r(   c                 @      fd}t          t          di|           d S )Nc                     t                     t          | t                                }t          j        |d d          }|rJ dg|j        k    sJ d S )Nr  r  r  z%Variable REDIS_URL is already in use.r  r  s      r&   r   z=test_add_service_already_exists_as_non_service.<locals>.check  sf    A+NNN'LNN;;;($WMMM78FMIIIIIIr(   z#
variables:
  REDIS_URL: something
r   r  s   ` r&   .test_add_service_already_exists_as_non_servicer     sQ    J J J J J 4	! $ 	 	    r(   c                 J      fd}t          t                      |           d S )Nc                     t                     t          | t                                }t          j        |d d          }|rJ dg|j        k    sJ d S )Nr  not_a_servicer  z:Unknown service type 'not_a_service', we know about: redisr  r  s      r&   r   z0test_add_service_bad_service_type.<locals>.check  sh    A+NNN'LNN;;;($_UUULMQWQ^^^^^^^r(   r  r  s   ` r&   !test_add_service_bad_service_typer$    s=    _ _ _ _ _ 4DFFEBBBBBr(   c                 :    d }t          t          di|           d S )Nc                     t          |           }t          j        |d d          }|sJ g |j        k    sJ t          |           }|j                            ddg          J d S )Nr  r  r  r  )r   r   remove_servicer   r   r   r  s       r&   r   z"test_remove_service.<locals>.check  sw    *733+GTQQQV]""""+G44$..
K/HIIQQQQQr(   r  r   r  s     r&   test_remove_servicer)    sE    R R R 45M P 5     r(   c                 @      fd}t          t          di|           d S )Nc                     t                     t          |           }t          j        |          }|sJ t	          j        |d d|          }|sJ g |j        k    sJ t          |           }|j                            ddg          J d S )Nr  )r  r  r  r  )	r  r   r   r!  r   r(  r   r   r   r"  s        r&   r   z/test_remove_service_with_prepare.<locals>.check  s    A+NNN*7334W==+GTaghhhV]""""+G44$..
K/HIIQQQQQr(   r  r   r  s   ` r&    test_remove_service_with_preparer,    sR    R R R R R 45M P 5     r(   c                 :    d }t          t          di|           d S )Nc                    g d}t          |           }|j                            |          dk    sJ t          j        |dd          }|sJ g |j        k    sJ t          |           }|j                            |          J d S )Nr  r  r   r'  )r   r   r   r   r(  r   r&  s        r&   r   z0test_remove_service_with_env_spec.<locals>.check  s    FFF*733#--k::gEEEE+GXWUUUV]""""+G44$..{;;CCCCCr(   z
env_specs:
    default:
      packages: [python]
      channels: []
    myspec:
      packages: [python]
      channels: []
      services:
        REDIS_URL: redis
r   r  s     r&   !test_remove_service_with_env_specr/    sD    
D 
D 
D 4$
	
     r(   r  c                 ,   t          | t                                }t          j        |d          }|sJ t          j                            | |          }t          j                            t          j                            |d                    sJ t          j        |d          }|sJ t          j                            | |d          }t          j                            |          sJ t          j                            | d          }t	          j        t          j                            |d                     t          j
        ||          }|sJ |j        dk    sJ |j        j        d|z  d	|z  d	|z  gk    sJ |j        g k    sJ t          j                            t          j                            | |                    rJ t          j                            t          j                            | d                    rJ d S )
Nr  r0   rT  rw   r  leftover-debriszCleaned.z Deleted environment files in %s.Removing %s.)r   r   r   r!  rL   r7   rM   r9  r  r   cleanr   rU  r  r   )rY   envs_dirnamer[   r   envs_dirbar_dirservices_dirr   s           r&   check_cleanedr8  %  s   g777G0NNNFMMMw||G\22H7==h6677777 0NNNFMMMgll7L%88G7==!!!!!
 7<<44LK\+<==>>>w//FMMM$
2222 &H7&RVdgsVs&4x&?%B B B B B=Bw}}RW\\'<@@AAAAAw}}RW\\':>>???????r(   c                 p    d }|                      d|           t          t          dit                     d S )Nc                 j    t          j        t           j                            | d                     d S Nr/  rL   r  r7   rM   r  r  rX   r  r  s        r&   r	  ztest_clean.<locals>.mock_createF  (    
BGLL6677777r(   r
  "
env_specs:
   foo: {}
   bar: {}
)r+   r   r   r8  )r,   r	  s     r&   
test_cleanr@  E  sX    8 8 8 DkRRR3	! $ 	     r(   c                 l    d }|                      d|           d }t          t          di|           d S )Nc                 j    t          j        t           j                            | d                     d S r;  r<  r=  s        r&   r	  z,test_clean_from_environ.<locals>.mock_createT  r>  r(   r
  c                     t           j                            | d          t           j        d<   t	          | d          }t           j                            d           |S )Nsome_random_pathANACONDA_PROJECT_ENVS_PATH)rL   r7   rM   environr8  pop)rY   r  s     r&   r   z&test_clean_from_environ.<locals>.checkY  sJ    357<<I[3\3\
/0G%788

3444
r(   r?  r  r,   r	  r   s      r&   test_clean_from_environrI  S  si    8 8 8 DkRRR   4	! $ 	     r(   c                 r     d }                      d|            fd}t          t          di|           d S )Nc                 j    t          j        t           j                            | d                     d S r;  r<  r=  s        r&   r	  z-test_clean_failed_delete.<locals>.mock_createh  r>  r(   r
  c                    t          | t                                }t          j        |d          }|sJ t          j                            | d          }t          j                            t          j                            |d                    sJ |j        	                                 t          j        |d          }|sJ t          j                            | dd          }t          j                            |          sJ t          j                            | d          }t	          j
        t          j                            |d                     dd}                    d	|           |j        	                                 t          j        ||          }|rJ |j        d
k    sJ |j        j        d|z  d|z  gk    sJ |j        d|z  d|z  d|z  gk    sJ t          j                            t          j                            | d                    sJ t          j                            t          j                            | d                    sJ                                  d S )Nr  r0   rT  r  rw   r  r1  c                      t          d          NzNo rmtree herer5   r7   onerrors     r&   mock_rmtreez<test_clean_failed_delete.<locals>.check.<locals>.mock_rmtree      *+++r(   shutil.rmtreeFailed to clean everything up.r2  9Failed to remove environment files in %s: No rmtree here."Error removing %s: No rmtree here.rb  )r   r   r   r!  rL   r7   rM   r9  rU  r  r  r+   r   r3  r   r  r   rP   )	rY   r[   r   r5  r6  r7  rQ  r   r,   s	           r&   r   z'test_clean_failed_delete.<locals>.checkm  s[   'LNN;;;4WERRR7<<00w}}RW\\(E::;;;;; 	   4WERRR',,w66w}}W%%%%%
 w||GZ88
BGLL/@AABBB	, 	, 	, 	, 	O[999   "7F33(,LLLLL$.<*G>\dKd(fffff}"]`g"g"F"U"F"Q!T T 	T 	T 	T w}}RW\\'6::;;;;;w}}RW\\':>>????? 	r(   r?  r  rH  s   `  r&   test_clean_failed_deleterW  g  su    8 8 8 DkRRR( ( ( ( (T 4	! $ 	     r(   c                 r     d }                      d|            fd}t          t          di|           d S )Nc                 j    t          j        t           j                            | d                     d S r;  r<  r=  s        r&   r	  z5test_clean_environ_failed_delete.<locals>.mock_create  r>  r(   r
  c                 V   t           j                            | d          x}t           j        d<   t	          | t                                }t          j        |d          }|sJ t           j                            t           j                            |d                    sJ |j	        
                                 t          j        |d          }|sJ t           j                            |d          }t           j                            |          sJ t           j                            | d          }t          j        t           j                            |d                     dd	}                    d
|           |j	        
                                 t          j        ||          }|rJ |j        dk    sJ |j	        j        d|z  d|z  gk    sJ |j        d|z  d|z  d|z  gk    sJ t           j                            t           j                            |                    sJ t           j                            t           j                            | d                    sJ                                  t           j                            d           d S )Nsome_random_failed_pathrE  r  r0   rT  rw   r  r1  c                      t          d          rN  r5   rO  s     r&   rQ  zDtest_clean_environ_failed_delete.<locals>.check.<locals>.mock_rmtree  rR  r(   rS  rT  r2  rU  rV  rb  )rL   r7   rM   rF  r   r   r   r!  r9  rU  r  r  r+   r   r3  r   r  r   rP   rG  )	rY   r5  r[   r   r6  r7  rQ  r   r,   s	           r&   r   z/test_clean_environ_failed_delete.<locals>.check  sz   >@gll7Tm>n>nn2::;'LNN;;;4WERRRw}}RW\\(E::;;;;; 	   4WERRR',,x//w}}W%%%%%
 w||GZ88
BGLL/@AABBB	, 	, 	, 	, 	O[999   "7F33(,LLLLL$.<*G>\dKd(fffff}"]`g"g"F"U"F"Q!T T 	T 	T 	T w}}RW\\(3344444w}}RW\\':>>????? 	

344444r(   r?  r  rH  s   `  r&    test_clean_environ_failed_deleter]    su    8 8 8 DkRRR+5 +5 +5 +5 +5Z 4	! $ 	     r(   c                 4    t          d | D                       S )Nc                 d    g | ]-}|t          d           d                             dd          .S )zarchivedproj/N\/)rK  r  )r  rg   s     r&   r  z#_strip_prefixes.<locals>.<listcomp>  s;    RRRDc/**++,44T3??RRRr(   )rT   )namess    r&   _strip_prefixesrc    s    RRERRRSSSr(   c                     t          j        | d          5 }t          t          |                                                    t          |          k    sJ 	 d d d            d S # 1 swxY w Y   d S Nr  )mode)zipfileZipFilerS   rc  namelist)zip_path	filenameszfs      r&   _assert_zip_containsrm    s    		,	,	, Kobkkmm4455	9J9JJJJJJK K K K K K K K K K K K K K K K K K   AA''A+.A+c                     t          j        | d          5 }t          t          |                                                    t          |          k    sJ 	 d d d            d S # 1 swxY w Y   d S re  )tarfiler;   rS   rc  getnames)tar_pathrk  tfs      r&   _assert_tar_containsrt    s    	hS	)	)	) KRobkkmm4455	9J9JJJJJJK K K K K K K K K K K K K K K K K Krn  c                 |    | t           j        z   }|                    |          sJ |t          |          d          S rb  )rL   sepr  rK  )rootr7   r  s      r&   _relative_torx    s:    BF]F??6"""""Fr(   c           	   #   x  K   t          j        |           D ]\  }}}|D ]d}t          j        t           j                            ||                    s0t          | t           j                            ||                    V  e|D ]2}t          | t           j                            ||                    V  3d S rb  )rL   walklistdirr7   rM   rx  )dir_pathrw  directoriesrk  dirr  s         r&   _recursive_listr    s      (*(9(9 G G$k9 	F 	FC:bgll45566 F"8RW\\$-D-DEEEEE! 	G 	GHxdH)E)EFFFFFF	G	G Gr(   c                 x    t          d t          |           D                       t          |          k    sJ d S )Nc                 :    g | ]}|                     d d          S )r`  ra  )r  )r  r  s     r&   r  z(_assert_dir_contains.<locals>.<listcomp>  s(    YYY88##D#..YYYr(   )rS   r  )r|  rk  s     r&   _assert_dir_containsr    sB    YYx?X?XYYYZZ^den^o^ooooooor(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t          ddddd ddd	di|           d S )
Nfoo.zipc                    t          j        t           j                            | d                     t          j        t           j                            | d                     t	          |           }t          j        |          }|sJ t           j                                      sJ t          g d           t          j        |          }|sJ t           j                                      sJ t          g d           d S )Nr  r  )r=   
a/b/c/d.py
a/b/c/e.pyz	emptydir/foo.pyr   	rL   r  r7   rM   r   r   archiver:  rm  rY   r[   r   archivefiles      r&   r   z4test_archive_zip.<locals>.archivetest.<locals>.check  s
   KWj99:::KWf55666.w77G (+>>FMMM7>>+..... mmmo o o
 !(+>>FMMM7>>+..... mmmo o o o or(   6
name: archivedproj
services:
   REDIS_URL: redis
    r  print('hello')
emptydirr  r   r  rL   r7   rM   r   r   archive_dest_dirr   r  s     @r&   archivetestz%test_archive_zip.<locals>.archivetest  s~    gll#3Y??	o 	o 	o 	o 	o. 	8( +
 ,Dbb
 	 	 	 	 	r(   r  r  s    r&   test_archive_zipr    .    % % %N 4DFFKHHHHHr(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t          dt
          dddi|           d S )Nr  c                 R   t          |           }g |j        k    sJ |j        d         j        j        sJ |j        d         j        j        sJ t          j        |          }|sJ t          j	        
                              sJ dt          j	                            dd          z   dt          j	                            dd          z   dt          j	                            dd          z   dt          j	                            dd          z   d	d
dg|j        j        k    sJ d S )Nr0   rw   z  added archivedprojr=   zanaconda-project-lock.ymlr   r  zjWarning: env specs are not locked, which means they may not work consistently for others or when deployed.zI  Consider using the 'anaconda-project lock' command to lock the project.z  Unlocked env specs are: bar)r   rO   rU   r7  r8  r  r   r  rL   r7   r:  rM   rU  r  r  s      r&   r   zAtest_archive_unlocked_warning.<locals>.archivetest.<locals>.check*  s+   .w77G)))))$U+4<<<<$U+4==== (+>>FMMM7>>+..... RW\\.:JKKKRW\\.:UVVVRW\\.:PQQQRW\\.(CCC<[/	 !&	' 	' 	' 	' 	' 	'r(   zS
name: archivedproj
env_specs:
  foo:
    packages: []
  bar:
    packages: []
    z
locking_enabled: false
env_specs:
  foo:
    locked: true
    platforms: [linux-32,linux-64,osx-64,win-32,win-64]
    packages:
      all: []
             r  r  )rL   r7   rM   r   r   r   r  s     @r&   r  z2test_archive_unlocked_warning.<locals>.archivetest'  st    gll#3Y??	' 	' 	' 	' 	'. 	8( + . 0 ,%& )	 	 	 	 	r(   r  r  s    r&   test_archive_unlocked_warningr  &  s.    . . .` 4DFFKHHHHHr(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t          ddddd ddd	di|           d S )
Nfoo.tarc                    t          j        t           j                            | d                     t          j        t           j                            | d                     t	          |           }t          j        |          }|sJ t           j                                      sJ t          g d           t          j        |          }|sJ t           j                                      sJ t          g d           d S Nr  r  )r=   r  r  r  r  r   	rL   r  r7   rM   r   r   r  r:  rt  r  s      r&   r   z4test_archive_tar.<locals>.archivetest.<locals>.check^  
   KWj99:::KWf55666.w77G (+>>FMMM7>>+..... llln n n
 !(+>>FMMM7>>+..... llln n n n nr(   r  r  r  r  r  r   r  r  r  s     @r&   r  z%test_archive_tar.<locals>.archivetest[  s~    gll#3Y??	n 	n 	n 	n 	n. 	8( +
 ,Dbb
 	 	 	 	 	r(   r  r  s    r&   test_archive_tarr  Z  r  r(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t          ddddd ddd	di|           d S )
N
foo.tar.gzc                    t          j        t           j                            | d                     t          j        t           j                            | d                     t	          |           }t          j        |          }|sJ t           j                                      sJ t          g d           t          j        |          }|sJ t           j                                      sJ t          g d           d S r  r  r  s      r&   r   z7test_archive_tar_gz.<locals>.archivetest.<locals>.check  r  r(   r  r  r  r  r  r   r  r  r  s     @r&   r  z(test_archive_tar_gz.<locals>.archivetest  s~    gll#3\BB	n 	n 	n 	n 	n. 	8( +
 ,Dbb
 	 	 	 	 	r(   r  r  s    r&   test_archive_tar_gzr    r  r(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t          ddddd ddd	di|           d S )
Nfoo.tar.bz2c                    t          j        t           j                            | d                     t          j        t           j                            | d                     t	          |           }t          j        |          }|sJ t           j                                      sJ t          g d           t          j        |          }|sJ t           j                                      sJ t          g d           d S r  r  r  s      r&   r   z8test_archive_tar_bz2.<locals>.archivetest.<locals>.check  r  r(   r  r  r  r  r  r   r  r  r  s     @r&   r  z)test_archive_tar_bz2.<locals>.archivetest  s~    gll#3]CC	n 	n 	n 	n 	n. 	8( +
 ,Dbb
 	 	 	 	 	r(   r  r  s    r&   test_archive_tar_bz2r    r  r(   c                 J      fd}t          t                      |           d S )Nc                     t           j                            | d          d }                    d|                               t          ddd           fd}t          t          dd	d
i|           d S )Nr  c                       t          d          Nr  r5   r  s     r&   mock_ZipFilezUtest_archive_cannot_write_destination_path.<locals>.archivetest.<locals>.mock_ZipFile  r9   r(   zzipfile.ZipFileget_pluginsfakec                     i S rb  r!   )xs    r&   <lambda>zQtest_archive_cannot_write_destination_path.<locals>.archivetest.<locals>.<lambda>  s     r(   c                     t          j        t           j                            | d                     t	          |           }t          j        |          }|rJ |j        dz  k    sJ dg|j        k    sJ d S )Nr  z#Failed to write project archive %s.r  )	rL   r  r7   rM   r   r   r  r   r   r  s      r&   r   zNtest_archive_cannot_write_destination_path.<locals>.archivetest.<locals>.check  s    KWf55666.w77G (+>>F,1VYd1deeee8v},,,,,,r(   z
name: archivedproj
    r  r  )r  )rL   r7   rM   r+   plugins_apir   r   )r  r  r   r  r,   s      @r&   r  z?test_archive_cannot_write_destination_path.<locals>.archivetest  s    gll#3Y??	" 	" 	" 	-|<<< 	K8K8K8KLLL		- 		- 		- 		- 		- 	8( + ,	
 	 	 	 	 	r(   r  r,   r  s   ` r&   *test_archive_cannot_write_destination_pathr    s8        > 4DFFKHHHHHr(   c                 F    |                      d d d d d d d dddd
           | S )Nz
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        zTestingGitRepository
zref: refs/heads/master
)
z.git/branchesz
.git/hooksz	.git/infoz.git/objects/infoz.git/objects/packz.git/refs/headsz.git/refs/tagsz.git/configz.git/descriptionz	.git/HEAD)r  )r  s    r&   _add_empty_gitr    sM    OO !! 5/'    * Or(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t	          t
          ddddddd	d
dddddi          |           d S )Nr  c                 "   t          j        t           j                            | d                     t	          |           }t          j        |          }|sJ t           j                                      sJ t          g d           d S )Nr  )r  
.gitignorer   r  r  s      r&   r   zCtest_archive_zip_with_gitignore.<locals>.archivetest.<locals>.check  s    KWf55666.w77G (+>>FMMM7>>+..... .^.^.^_____r(   
name: archivedproj
        r  r  r  z#/ignored.py
/subdir
/subwithslash/
z
ignored.pyprint("ignore me!")zsubdir/foo.pyr0   zsubdir/subsub/bar.pyrw   zsubwithslash/something.pyr   rL   r7   rM   r   r  r   r  s     @r&   r  z4test_archive_zip_with_gitignore.<locals>.archivetest  s    gll#3Y??		` 		` 		` 		` 		` 	8( + ,F3&+[
 
 
 	 	 	 	 	r(   r  r  s    r&   test_archive_zip_with_gitignorer    s-      6 4DFFKHHHHHr(   c                 J      fd}t          t                      |           d S )Nc                     t           j                            | d          fd}t          t	          t
          dddi          |           d S )Nr  c                 ^   t          j        t           j                            | d                     t	          |           }ddlm fd}                    d|           t          j	        |          }|rJ t           j        
                              rJ |j        dgk    sJ d S )Nr  r   check_outputc                 .    fd}t          d|          S )Nc                      |           S rb  r!   )commandlinereal_check_outputs    r&   runzutest_archive_zip_with_failing_git_command.<locals>.archivetest.<locals>.check.<locals>.mock_check_output.<locals>.runC  s    ,,[999r(   zimport sys
sys.exit(1)
)r   )rC   cwdr  r  s      r&   mock_check_outputzhtest_archive_zip_with_failing_git_command.<locals>.archivetest.<locals>.check.<locals>.mock_check_outputB  s0    : : : : : 99TVYZZZr(   subprocess.check_outputz.'git ls-files' failed to list ignored files: .)rL   r  r7   rM   r   
subprocessr  r+   r   r  r:  r   rY   r[   r  r   r  r  r,   s       @r&   r   zMtest_archive_zip_with_failing_git_command.<locals>.archivetest.<locals>.check:  s    KWf55666.w77GDDDDDD[ [ [ [ [  9;LMMM (+>>Fw~~k22222=%U$VVVVVVVr(   	
        r  r  r  r  r   r  r,   s     @r&   r  z>test_archive_zip_with_failing_git_command.<locals>.archivetest7  s    gll#3Y??	W 	W 	W 	W 	W 	W. 	8( +,   	 	 	 	 	r(   r  r  s   ` r&   )test_archive_zip_with_failing_git_commandr  6  s9        B 4DFFKHHHHHr(   c                 J      fd}t          t                      |           d S )Nc                     t           j                            | d          fd}t          t	          t
          dddi          |           d S )Nr  c                    t          j        t           j                            | d                     t          j        t           j                            | d                     t	          |           }ddlm fd}                    d|           t          j	        |          }|rJ t           j        
                              rJ t          |j                  dk    sJ |j        d                             d          sJ d S )	Nr  r  r   r  c                       dg|          S )Nzthis-is-not-a-real-command)rC   r  r!   )rC   r  r  s     r&   r  zttest_archive_zip_with_exception_executing_git_command.<locals>.archivetest.<locals>.check.<locals>.mock_check_outputh  s    ((/K.LRUVVVVr(   r  r>   zFailed to run 'git ls-files')rL   r  r7   rM   r   r  r  r+   r   r  r:  rK  r   r  r  s       @r&   r   zYtest_archive_zip_with_exception_executing_git_command.<locals>.archivetest.<locals>.check_  s   KWj99:::KWf55666.w77GDDDDDDW W W W W  9;LMMM (+>>Fw~~k22222v}%%****=#../MNNNNNNNr(   r  r  r  r  r  s     @r&   r  zJtest_archive_zip_with_exception_executing_git_command.<locals>.archivetest\  s    gll#3Y??	O 	O 	O 	O 	O 	O, 	8( +,   	 	 	 	 	r(   r  r  s   ` r&   5test_archive_zip_with_exception_executing_git_commandr  [  9        @ 4DFFKHHHHHr(   c                 J      fd}t          t                      |           d S )Nc                     t           j                            | d          fd}t          t	          t
          dddi          |           d S )Nr  c                 @   t          j        t           j                            | d                     t          j        t           j                            | d                     t	          |           }|j        g k    sJ d }                    d|           t          j        |          }|rJ t           j        	                              rJ |j
        dk    sJ t          |j                  dk    sJ |j        d                             d          sJ d S )Nr  r  c                      t          d          r  OSErrorrY   s    r&   mock_os_walkzktest_archive_zip_with_inability_to_walk_directory.<locals>.archivetest.<locals>.check.<locals>.mock_os_walk  s    foo%r(   os.walkz$Failed to list files in the project.r   Could not list files in)rL   r  r7   rM   r   rO   r+   r   r  r:  r   rK  r   r  )rY   r[   r  r   r  r,   s       r&   r   zUtest_archive_zip_with_inability_to_walk_directory.<locals>.archivetest.<locals>.check  s   KWj99:::KWf55666.w77G#r))))& & & 	<888 (+>>Fw~~k22222,0VVVVVv}%%))))=#../HIIIIIIIr(   r  r  r  r  r  s     @r&   r  zFtest_archive_zip_with_inability_to_walk_directory.<locals>.archivetest  s    gll#3Y??	J 	J 	J 	J 	J 	J* 	8( + ,	  
 	 	 	 	 	r(   r  r  s   ` r&   1test_archive_zip_with_inability_to_walk_directoryr    r  r(   c                 J      fd}t          t                      |           d S )Nc                     t           j                            | d          fd}t          t	          t
          dddi          |           d S )Nr  c                    t          j        t           j                            | d                     t          j        t           j                            | d                     t	          |           }t           j                            | d          }t          j        |dd          5 }|                    d           d d d            n# 1 swxY w Y   ddlm fd	}                    d
|           t          j
        |          }|rJ t           j                                      rJ d|z  g|j        k    sJ d S )Nr  r  r=   r?   r  r  r   r:   c                  h    | d                              d          rt          d           | i |S )Nr   r=   r  r@   rB   s     r&   rF   zltest_archive_zip_with_unreadable_projectignore.<locals>.archivetest.<locals>.check.<locals>.mock_codecs_open  s?    7##$455 6!&//)$9d5f555r(   rG   zFailed to read %s: NOPE)rL   r  r7   rM   r   rQ   r;   r  r+   r   r  r:  r   )	rY   r[   
ignorefilerl  rF   r   rE   r  r,   s	         @r&   r   zRtest_archive_zip_with_unreadable_projectignore.<locals>.archivetest.<locals>.check  s{   KWj99:::KWf55666.w77Gg/?@@JZg66 !               1000006 6 6 6 6 /?@@@ (+>>Fw~~k22222-
:;v}LLLLLLs   ,CCCr  r  r  r  r  s     @r&   r  zCtest_archive_zip_with_unreadable_projectignore.<locals>.archivetest  s    gll#3Y??	M 	M 	M 	M 	M 	M6 	8( + ,	  
 	 	 	 	 	r(   r  r  s   ` r&   .test_archive_zip_with_unreadable_projectignorer    s9    $ $ $ $ $L 4DFFKHHHHHr(   c                 D    d }t          t                      |           d S )Nc                     t           j                            | d          fd}t          t	          t
          dddi          |           d S )Nfoo.barc                     t          |           }t          j        |          }|rJ t          j                                      rJ |j        dk    sJ |j        dz  gk    sJ d S )Nz>Project archive filename must be a .zip, .tar.gz, or .tar.bz2.z Unsupported archive filename %s.)r   r   r  rL   r7   r:  r   r   r  s      r&   r   zDtest_archive_with_bogus_filename.<locals>.archivetest.<locals>.check  s    .w77G (+>>Fw~~k22222,0ppppp=%G+%U$VVVVVVVr(   r  r  r  r  r  s     @r&   r  z5test_archive_with_bogus_filename.<locals>.archivetest  s|    gll#3Y??	W 	W 	W 	W 	W 	8( + ,	  
 	 	 	 	 	r(   r  r  s     r&    test_archive_with_bogus_filenamer    s-      * 4DFFKHHHHHr(   c                 D    d }t          t                      |           d S )Nc                     t           j                            | d          fd}t          t	                      |           d S )Nr  c                 6   t          |           }t          j                            |j        j                  rJ t          j        |          }|rJ t          j                                      rJ |j        dk    sJ |j	        dt          z  gk    sJ d S )NCan't create an archive.z%s does not exist.)r   rL   r7   r:  r   r  r   r  r   r   r   r  s      r&   r   zEtest_archive_with_no_project_file.<locals>.archivetest.<locals>.check  s    .w77Gw~~g&:&CDDDDD (+>>Fw~~k22222,0JJJJJ=%9<T%T$UUUUUUUr(   rL   r7   rM   r   r_   r  s     @r&   r  z6test_archive_with_no_project_file.<locals>.archivetest  sS    gll#3Y??		V 		V 		V 		V 		V 	 .....r(   r^   r  s     r&   !test_archive_with_no_project_filer    -    / / /  DFFK00000r(   c                 D    d }t          t                      |           d S )Nc                     t           j                            | d          fd}t          t          di|           d S )Nr  c                 n   t          |           }t          j                            |j        j                  sJ |j                            dgd           t          j        |          }|rJ t          j                                      rJ |j	        dk    sJ |j
        dt          z  gk    sJ d S )Nrg   rc   r  z#%s has been modified but not saved.)r   rL   r7   r:  r   r  r  r   r  r   r   r   r  s      r&   r   zEtest_archive_with_unsaved_project.<locals>.archivetest.<locals>.check  s    .w77G7>>'"6"?@@@@@ **F8W=== (+>>Fw~~k22222,0JJJJJ=%JMe%e$fffffffr(   z(
env_specs:
  default:
    packages: []
r  r  s     @r&   r  z6test_archive_with_unsaved_project.<locals>.archivetest  sg    gll#3Y??
	g 
	g 
	g 
	g 
	g 	8% (  	 	 	 	 	r(   r^   r  s     r&   !test_archive_with_unsaved_projectr    s-      , DFFK00000r(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t	          t
          ddddddd	i          |           d S )
Nr  c                     t          |           }t          j        |          }|sJ t          j                                      sJ t          g d           d S )Nr=   r  r   )r   r   r  rL   r7   r:  rm  r  s      r&   r   zItest_archive_zip_with_downloaded_file.<locals>.archivetest.<locals>.check  sb    .w77G (+>>FMMM7>>+..... .b.b.bcccccr(   zQ
name: archivedproj
downloads:
   MYDOWNLOAD: "http://example.com/downloaded.py"
r  r  zdownloaded.pyr  zdownloaded.py.partr   r  r  s     @r&   r  z:test_archive_zip_with_downloaded_file.<locals>.archivetest  s    gll#3Y??	d 	d 	d 	d 	d 	8( +
 ,!6$b	 	 	 
	 
	 
	 
	 
	r(   r  r  s    r&   %test_archive_zip_with_downloaded_filer    s-      . 4DFFKHHHHHr(   c            
      \    d } t          t          t          dddddi          |            d S )Nc                    t          |           }t          j                            | d          }t          j                            |          sJ t          j        ||          }|sJ t          j                            |          sJ t          |g d           t          j        ||          }|sJ t          j                            |          sJ t          |g d           d S )Nr  r  )	r   rL   r7   rM   rR   r   r  r:  rm  )rY   r[   r  r   s       r&   r   zLtest_archive_zip_overwrites_but_does_not_include_the_dest_zip.<locals>.check0  s    *733gll7I66w~~k*****$Wk::w~~k*****[*^*^*^___ $Wk::w~~k*****[*^*^*^_____r(   z
name: archivedproj
r  r  r  r   )r   r  r   r   s    r&   =test_archive_zip_overwrites_but_does_not_include_the_dest_zipr  /  s^    ` ` `* 4$ ' (r
 	 	     r(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t          dddddddd	di|           d S )
Nr  c                 F   t          j        t           j                            | d                     t	          j        |           }g |j        k    sJ t	          j        |          }|sJ t           j                                      sJ t          g d           d S )Nr  )r  r   r=   zbar/)
rL   r  r7   rM   r   rN   rO   r  r:  rm  r  s      r&   r   zGtest_archive_zip_with_projectignore.<locals>.archivetest.<locals>.checkS  s    KWf55666!(11G))))) (+>>FMMM7>>+..... .j.j.jkkkkkr(   r  r  r  foo.pycr   .ipynb_checkpoints/blehbar/blah.pycr  r  s     @r&   r  z8test_archive_zip_with_projectignore.<locals>.archivetestP  s~    gll#3Y??
	l 
	l 
	l 
	l 
	l 	8( + ,2)2 		 		 		 		 		r(   r  r  s    r&   #test_archive_zip_with_projectignorer  O  s-      4 4DFFKHHHHHr(   rH  Linuxz0Something wrong with pip freeze on linux for py2)reasonsuffix)ziptar.bz2tar.gzc                 J      fd}t          t                      |           d S )Nc                     t           j                            | d                                        fd}t	          t
          di|           d S )Nfoo.{}c                 H   t          j        |           }g |j        k    sJ t          j        |          }|sJ t          j        |d          }|sJ t          j                                      sJ t          j        	                    t          j        
                              d          }t          j        |          }|j        g k    sJ |sJ t          j                            |          sJ t          |          }t          j        |          }|sJ d S )NT	pack_envsunpacked)r   rN   rO   r   r!  r  rL   r7   r:  rM   rY   	unarchiver   r9  r   )rY   r[   r   r  unpacked_projectr  s        r&   r   zNtest_archive_unarchive_conda_pack_with_pip.<locals>.archivetest.<locals>.checku  s   !(11G)))))8AAFMMM (+NNNFMMM7>>+.....w||BGOOK$@$@*MMH *;AAF=B&&&&MMM7==*****&x0089IJJFMMMMMr(   zA
name: archivedproj
packages:
  - python=3.8
  - pip:
    - pep8
rL   r7   rM   r  r   r   r  r   r  r  s     @r&   r  z?test_archive_unarchive_conda_pack_with_pip.<locals>.archivetestr  so    gll#3X__V5L5LMM	 	 	 	 	, 	8% (  	 	 	 	 	r(   r^   r  r  s   ` r&   *test_archive_unarchive_conda_pack_with_pipr!  m  s9    
         D DFFK00000r(   c                 J      fd}t          t                      |           d S )Nc                     t           j                            | d                                        fd}t	          t
          dddddddd	dd
di|           d S )Nr  c           	         t          j        |           }g |j        k    sJ t          j        |          }|sJ t
          j                            | dd          }t          t
          j                            |dd          d          5 }|	                    |           d d d            n# 1 swxY w Y   t          j
        |d          }|sJ t
          j                                      sJ g d}g d	}g d
}dt                      v r|                    |           n|                    |           dk    rt          |           ndv rt          |           t
          j                            t
          j                                      d          }t          j        |          }|j        g k    sJ |sJ t
          j                            |          sJ t)          ||           dt                      vrXt
          j                            |dddd          }	t          j        |	          t,          j                 }
|
t,          j        z  sJ t3          |          }t          j        |          }|sJ t          t
          j                            |dddd                    5 }|                                }d d d            n# 1 swxY w Y   ||k    sJ d S )Nr  rH   r/  _prefixwtTr  )r   r=   r  bar/blah.pyzenvs/default/conda-meta/.packedzenvs/default/conda-meta/historyzenvs/default/conda-meta/_prefixz<envs/default/conda-meta/font-ttf-ubuntu-0.83-h8b1ccd4_0.jsonzZenvs/default/var/cache/anaconda-project/env-specs/7d832cfb38dabc7b1c20f98e15bfc4c601f21b62zenvs/default/fonts/Ubuntu-M.ttfzenvs/default/fonts/Ubuntu-L.ttfz$envs/default/fonts/UbuntuMono-BI.ttfz envs/default/fonts/Ubuntu-BI.ttfz envs/default/fonts/Ubuntu-MI.ttfzenvs/default/fonts/Ubuntu-R.ttfz envs/default/fonts/Ubuntu-LI.ttfzenvs/default/fonts/Ubuntu-B.ttfzenvs/default/fonts/Ubuntu-C.ttfz$envs/default/fonts/UbuntuMono-RI.ttfz#envs/default/fonts/UbuntuMono-R.ttfz envs/default/fonts/Ubuntu-RI.ttfz#envs/default/fonts/UbuntuMono-B.ttf)zenvs/default/bin/conda-unpackzenvs/default/bin/deactivatezenvs/default/bin/activate)z!envs/default/Scripts/activate.batz+envs/default/Scripts/conda-unpack-script.pyz%envs/default/Scripts/conda-unpack.exez#envs/default/Scripts/deactivate.batwinr  )r  r  r  binzconda-unpack)r   rN   rO   r   r!  rL   r7   rM   r;   r  r  r:  r   extendrm  rt  rY   r  r   r9  r  lstatstatST_MODES_IXUSRr   r  )rY   r[   r   original_prefixrl  expected_filesscripts_nixscripts_winr  conda_unpackrf  r  unpacked_prefixr  r  s                r&   r   zEtest_archive_unarchive_conda_pack.<locals>.archivetest.<locals>.check  se   !(11G)))))8AAFMMM !gll7FIFFObgll?L)LLdSS )WX((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) !(+NNNFMMM7>>+.....  N xwwK  K
 (*** 3%%k2222%%k222 B$[.AAAA00 B$[.AAAw||BGOOK$@$@*MMH *;AAF=B&&&&MMM7==***** >:::,... +!w||HfiP^__x--dl;dl****&x0089IJJFMMMbgll8VYiXXYY +]^"#&&((+ + + + + + + + + + + + + + + #o555555s$   B--B14B19KK!KzJ
name: archivedproj
packages:
  - font-ttf-ubuntu=0.83=h8b1ccd4_0
        r  r  r  r   r  r'  r  r  r  s     @r&   r  z6test_archive_unarchive_conda_pack.<locals>.archivetest  s    gll#3X__V5L5LMMD	6 D	6 D	6 D	6 D	6 D	6L 	8( +
 ,2)2r 	 	 	 	 	r(   r^   r   s   ` r&   !test_archive_unarchive_conda_packr5    s>    U U U U Un DFFK00000r(   r>   rs  Fc                 4   t           j                            | d          }t          j        |d          5 }|                                D ]\  }}|t          u rE|                    t           j                  s|t           j        z   }|	                    |d           S|t          u rJ|r1t          j        |          }d|_        |	                    |d           |	                    |d           t          d          	 d d d            n# 1 swxY w Y   |S )Nr  r?   r      rc   zcan't put this in a zip)rL   r7   rM   rg  rh  items_CONTENTS_DIRrA   rv  writestr_CONTENTS_FILEZipInfoexternal_attrAssertionError)r  r  	mode_zeror  rl  keywhatinfos           r&   	_make_ziprC    sf   ',,/;;K	c	*	* @b#>>++ 	@ 	@KS$}$ @||BF++ ',CC$$$$' @ /"?3//D)+D&KKg...C))))$%>???	@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ s   C
DDDc                 n   d}d}|dk    r|dz   }|dz   }n|dk    r
|dz   }|dz   }t           j                            | d	          }t          j        |           t           j                            | d
          }t	          |d          5 }|                    d           d d d            n# 1 swxY w Y   t           j                            | d          }t          |                                v rt          j        d|           t           j                            | d|z             }	t          j        |	|          5 }
|
                                D ]m\  }}t          j        |          }|t          u rt          j        |_        n$|t          u rn|t          u rt          j        |_        |
                    |           n	 d d d            n# 1 swxY w Y   t          j        |           t          j        |           t           j                            |          rt          j        |           |	S )Nr?   z.targzz:gzz.gzbz2z:bz2z.bz2a_directorya_filerc   a_linkz
/somewherer0   )rL   r7   rM   mkdirr;   r  _CONTENTS_SYMLINKr  symlinkrp  r8  TarInfor9  DIRTYPEtyper;  SYMTYPEaddfileremovermdirr:  )r  r  compressionrf  	extensionrG  rH  rl  	a_symlinkr  rs  r@  rA  ts                 r&   	_make_tarrX    s   DId 'e|%				 'f}&	 ',,/??KH[W\\*H55F	fc		 a	              -x88IHOO--- ,

<+++',,/1BCCK	k4	(	( 	B#>>++ 	 	KS$$$A}$ ) ' )** ) JJqMMMM		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 IfH[	w~~i   
	)s%   
B,,B03B0?BGGGc                 J      fd}t          t                      |           d S )Nc                     t          | t          t          t          t          d                                        sJ fd}t	          t                      |           d S )Na/a.txt	a/q/b.txta/crs   rT  c                     t           j                            | d          }t          j        |          }|j        g k    sJ |sJ t           j                            |          sJ t          |g d           d S Nr0   a.txtr  zq/b.txtrL   r7   rM   r   r  r   r9  r  rY   r  r   r  s      r&   r   z7_test_unarchive_tar.<locals>.archivetest.<locals>.checkD  }    w||GU33H *;AAF=B&&&&MMM7==***** +D+D+DEEEEEr(   )rX  r;  r9  rA   r   r_   )r  r   r  rT  s     @r&   r  z(_test_unarchive_tar.<locals>.archivetest7  s     0%' 	3
 3
 -89 9 9  	5''44444	F 	F 	F 	F 	F 	 .....r(   r^   )rT  r  s   ` r&   _test_unarchive_tarrg  6  s8    / / / / /0 DFFK00000r(   c                  &    t          d            d S )Nr_  rg  r!   r(   r&   test_unarchive_tarrj  R      D))))))r(   c                  &    t          d           d S )NrE  r_  ri  r!   r(   r&   test_unarchive_tar_gzrm  V  rk  r(   c                  &    t          d           d S )NrF  r_  ri  r!   r(   r&   test_unarchive_tar_bz2ro  Z  s    E******r(   c                  D    d } t          t                      |            d S )Nc                     t          | t          t          t          t          d          fd}t          t	                      |           d S )Nr[  c                    t           j                            | d          }t          j        |          }|j        g k    sJ |sJ t           j                            |          sJ t          |g d           |j        |k    sJ d S ra  	rL   r7   rM   r   r  r   r9  r  project_dirre  s      r&   r   z6test_unarchive_zip.<locals>.archivetest.<locals>.checkj      w||GU33H *;AAF=B&&&&MMM7==***** +D+D+DEEE%111111r(   rC  r;  r9  r   r_   r  s     @r&   r  z'test_unarchive_zip.<locals>.archivetest_  s`     0%' 	3
 3
  	2 	2 	2 	2 	2 	 .....r(   r^   r  s    r&   test_unarchive_ziprw  ^  s-    / / /. DFFK00000r(   c                  D    d } t          t                      |            d S )Nc                     t          | t          t          t          t          dd          fd}t          t	                      |           d S )Nr[  T)r?  c                    t           j                            | d          }t          j        |          }|j        g k    sJ |sJ t           j                            |          sJ t          |g d           |j        |k    sJ d S ra  rs  re  s      r&   r   z@test_unarchive_zip_mode_zero.<locals>.archivetest.<locals>.check  ru  r(   rv  r  s     @r&   r  z1test_unarchive_zip_mode_zero.<locals>.archivetestz  sj     0%' 	3
 3
 +/0 0 0	2 	2 	2 	2 	2 	 .....r(   r^   r  s    r&   test_unarchive_zip_mode_zeror{  y  s-    / / /0 DFFK00000r(   c                  D    d } t          t                      |            d S )Nc                     t          | t          t          t          t          d          fd}t          t	                      |           d S )Nr[  c                    t          j                    }	 t          j        |            t          j        d           }t          j        |           n# t          j        |           w xY wt           j                            | d          }|j        g k    sJ |sJ t           j                            |          sJ t          |g d           |j
        |k    sJ d S )Nrt  rs   rb  )rL   getcwdchdirr   r  r7   rM   r   r9  r  rt  )rY   r  r   r  r  s       r&   r   zKtest_unarchive_zip_to_current_directory.<locals>.archivetest.<locals>.check  s    )++C!!!$.{MMMw||GS11H=B&&&&MMM7==***** +D+D+DEEE%111111s   *A A+rv  r  s     @r&   r  z<test_unarchive_zip_to_current_directory.<locals>.archivetest  s`     0%' 	3
 3
  	2 	2 	2 	2 	2  	 .....r(   r^   r  s    r&   'test_unarchive_zip_to_current_directoryr    s-    / / /: DFFK00000r(   c                  D    d } t          t                      |            d S )Nc                     t          | t          t          t          d          fd}t          t	                      |           d S )Nr\  r]  r^  c                    t           j                            | d          }t          j        d |           }|j        g k    sJ |sJ t           j                            |          sJ t          |g d           |j        |k    sJ d S Nrs   rt  
parent_dirrb  rs  re  s      r&   r   zZtest_unarchive_zip_to_parent_dir_with_auto_project_dir.<locals>.archivetest.<locals>.check      w||GS11H *;DU\]]]F=B&&&&MMM7==***** +D+D+DEEE%111111r(   rv  r  s     @r&   r  zKtest_unarchive_zip_to_parent_dir_with_auto_project_dir.<locals>.archivetest  s]     0%' 3
 3
  	2 	2 	2 	2 	2 	 .....r(   r^   r  s    r&   6test_unarchive_zip_to_parent_dir_with_auto_project_dirr    -    / / /, DFFK00000r(   c                  D    d } t          t                      |            d S )Nc                     t          | t          t          t          d          fd}t          t	                      |           d S )Nr  c                    t           j                            | d          }t          j        d |           }|j        g k    sJ |sJ t           j                            |          sJ t          |g d           |j        |k    sJ d S r  rs  re  s      r&   r   zZtest_unarchive_tar_to_parent_dir_with_auto_project_dir.<locals>.archivetest.<locals>.check  r  r(   )rX  r;  r9  r   r_   r  s     @r&   r  zKtest_unarchive_tar_to_parent_dir_with_auto_project_dir.<locals>.archivetest  s]     0%' 3
 3
  	2 	2 	2 	2 	2 	 .....r(   r^   r  s    r&   6test_unarchive_tar_to_parent_dir_with_auto_project_dirr    s-    / / /& DFFK00000r(   c                  D    d } t          t                      |            d S )Nc                 x    t          | dt          i          fd}t          t                      |           d S )Nr\  c                     t           j                            | d          }t          j        |           t	          j        |          }t	          j        |          }d|z  }|j        |gk    sJ |rJ d S )Nr0   z>Destination '%s' already exists and is not an empty directory.)rL   r7   rM   rJ  r   r  r   rY   r  r   messager  s       r&   r   zKtest_unarchive_error_on_dest_dir_exists.<locals>.archivetest.<locals>.check  s~    w||GU33HHX *;AAF *;AAFVYaaG=WI----r(   rX  r;  r   r_   r  s     @r&   r  z<test_unarchive_error_on_dest_dir_exists.<locals>.archivetest  sM     09n2MNN	 	 	 	 	 	 .....r(   r^   r  s    r&   'test_unarchive_error_on_dest_dir_existsr    -    / / / DFFK00000r(   c                 J      fd}t          t                      |           d S )Nc                 |    t          | dt          i          fd}t          t                      |           d S )Nr\  c                    t           j                            | d          }d }                    d|           t	          j        |          }                                 |sJ t           j                            |          sJ t           j                            t           j                            |d                    sJ d S )Nr0   c                       t          d          )NFAILUREr5   r  s     r&   rQ  zitest_unarchive_ignore_rmtree_fail_when_unzipping.<locals>.archivetest.<locals>.check.<locals>.mock_rmtree  s    i(((r(   rS  rc  )	rL   r7   rM   r+   r   r  rP   r9  rR   )rY   r  rQ  r   r  r,   s       r&   r   zTtest_unarchive_ignore_rmtree_fail_when_unzipping.<locals>.archivetest.<locals>.check  s    w||GU33H) ) ) === *;AAFMMM7==*****7>>"',,x"A"ABBBBBBBr(   rC  r;  r   r_   r  s     @r&   r  zEtest_unarchive_ignore_rmtree_fail_when_unzipping.<locals>.archivetest  sY     09n2MNN	C 	C 	C 	C 	C 	C 	 .....r(   r^   r  s   ` r&   0test_unarchive_ignore_rmtree_fail_when_unzippingr    s8    / / / / /( DFFK00000r(   c                  D    d } t          t                      |            d S )Nc                    t           j                            | d          t          d          5 }|                    d           d d d            n# 1 swxY w Y   fd}t          t                      |           d S )Nr  r?   rc   c                     t           j                            | d          }t          j        |          }dz  }|j        |gk    sJ |rJ t           j                            |          rJ d S )Nr0   zEUnsupported archive filename %s, must be a .zip, .tar.gz, or .tar.bz2rL   r7   rM   r   r  r   r9  r  s       r&   r   zItest_unarchive_error_on_bad_extension.<locals>.archivetest.<locals>.check  sv    w||GU33H *;AAF]`kkG=WI----w}}X.......r(   rL   r7   rM   r;   r  r   r_   r  rl  r   r  s      @r&   r  z:test_unarchive_error_on_bad_extension.<locals>.archivetest      gll#3Y??+s## 	qGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 		/ 	/ 	/ 	/ 	/ 	 .....   AAAr^   r  s    r&   %test_unarchive_error_on_bad_extensionr    r  r(   c                  D    d } t          t                      |            d S )Nc                    t           j                            | d          t          d          5 }|                    d           d d d            n# 1 swxY w Y   fd}t          t                      |           d S )Nr  r?   rc   c                     t           j                            | d          }t          j        |          }d}|j        |gk    sJ |rJ t           j                            |          rJ d S )Nr0   zFile is not a zip filer  r  s       r&   r   zGtest_unarchive_error_on_corrupt_zip.<locals>.archivetest.<locals>.check,  sp    w||GU33H *;AAF.G=WI----w}}X.......r(   r  r  s      @r&   r  z8test_unarchive_error_on_corrupt_zip.<locals>.archivetest'  r  r  r^   r  s    r&   #test_unarchive_error_on_corrupt_zipr  &  r  r(   c                  D    d } t          t                      |            d S )Nc                    t           j                            | d          t          d          5 }|                    d           d d d            n# 1 swxY w Y   fd}t          t                      |           d S )Nr  r?   rc   c                    t           j                            | d          }t          j        |          }d}|j        d                             |          sJ |rJ t           j                            |          rJ d S )Nr0   z%file could not be opened successfullyr   )rL   r7   rM   r   r  r   r  r9  r  s       r&   r   zGtest_unarchive_error_on_corrupt_tar.<locals>.archivetest.<locals>.check@  s|    w||GU33H *;AAF=G=#..w77777w}}X.......r(   r  r  s      @r&   r  z8test_unarchive_error_on_corrupt_tar.<locals>.archivetest;  r  r  r^   r  s    r&   #test_unarchive_error_on_corrupt_tarr  :  r  r(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t	                      |           d S )Nr  c                     t           j                            | d          }t          j        |          }t          |j                  dk    sJ |rJ t           j                            |          rJ d S Nr0   r>   rL   r7   rM   r   r  rK  r   r9  re  s      r&   r   zKtest_unarchive_error_on_nonexistent_tar.<locals>.archivetest.<locals>.checkR  s    w||GU33H *;AAF v}%%****w}}X.......r(   r  r  s     @r&   r  z<test_unarchive_error_on_nonexistent_tar.<locals>.archivetestO  N    gll#3Y??	/ 	/ 	/ 	/ 	/ 	 .....r(   r^   r  s    r&   'test_unarchive_error_on_nonexistent_tarr  N  -    / / / DFFK00000r(   c                  D    d } t          t                      |            d S )Nc                     t           j                            | d          fd}t          t	                      |           d S )Nr  c                     t           j                            | d          }t          j        |          }t          |j                  dk    sJ |rJ t           j                            |          rJ d S r  r  re  s      r&   r   zKtest_unarchive_error_on_nonexistent_zip.<locals>.archivetest.<locals>.checkd  r  r(   r  r  s     @r&   r  z<test_unarchive_error_on_nonexistent_zip.<locals>.archivetesta  r  r(   r^   r  s    r&   'test_unarchive_error_on_nonexistent_zipr  `  r  r(   c                      t          j                    dk    rt          d           d S d } t          t	                      |            d S )NWindowszMCan't test tars with symlinks on Windows because there's no way to create onec                 V   t          | t          t          t          t          d          t	          j        d          5 }|                    d          }|J |                                sJ 	 d d d            n# 1 swxY w Y   fd}t          t                      |           d S )N)r\  r]  r^  a/linkr  r  c                     t           j                            | d          }t          j        |          }|j        g k    sJ |sJ t           j                            |          sJ t          |g d           d S ra  rd  re  s      r&   r   zFtest_unarchive_tar_ignores_symlink.<locals>.archivetest.<locals>.check  rf  r(   )
rX  r;  r9  rK  rp  r;   	getmemberissymr   r_   )r  rs  memberr   r  s       @r&   r  z7test_unarchive_tar_ignores_symlink.<locals>.archivetestw  s     0%' '	3
 3
   \+s++ 	"r\\(++F%%%<<>>!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"
	F 	F 	F 	F 	F 	 .....s    0A==BB)platformsystemr   r   r_   r  s    r&   "test_unarchive_tar_ignores_symlinkr  r  sV    I% ]^^^/ / /. DFFK00000r(   c                  D    d } t          t                      |            d S )Nc                 x    t          | dt          i          fd}t          t                      |           d S )N
a/../a.txtc                 `   t           j                            | d          }t          j        |          }t           j                            |          rJ dt           j                            | d          dt           j                            |          d}|j        |gk    sJ |rJ d S Nr0   z,Archive entry 'a/../a.txt' would end up at 'rc  z' which is outside 'z'.rL   r7   rM   r   r  r:  r   r  s       r&   r   zMtest_unarchive_tar_error_on_relative_path.<locals>.archivetest.<locals>.check  s    w||GU33H *;AAFw~~h//////bdbibnbnc" c" c" c"#%7<<#9#9#9#9;G=WI----r(   r  r  s     @r&   r  z>test_unarchive_tar_error_on_relative_path.<locals>.archivetest  sM     0<2PQQ	 	 	 	 	 	 .....r(   r^   r  s    r&   )test_unarchive_tar_error_on_relative_pathr    r  r(   c                  D    d } t          t                      |            d S )Nc                 x    t          | dt          i          fd}t          t                      |           d S )N../a.txtc                 4   t          j        d |           }d}|j        |gk    sJ |rJ t          j                            | d          }t          j        |          }d}|j        |gk    sJ |rJ t          j                            |          rJ d S Nr  z?Archive contains relative path '../a.txt' which is not allowed.r0   r  r   r  r   rL   r7   rM   r9  rY   r   r  r  r  s       r&   r   zRtest_unarchive_tar_error_on_root_relative_path.<locals>.archivetest.<locals>.check       *;DU\]]]FWG=WI---- w||GU33H *;HMMMFWG=WI----w}}X.......r(   r  r  s     @r&   r  zCtest_unarchive_tar_error_on_root_relative_path.<locals>.archivetest  M     0:~2NOO	/ 	/ 	/ 	/ 	/" 	 .....r(   r^   r  s    r&   .test_unarchive_tar_error_on_root_relative_pathr    r  r(   c                  D    d } t          t                      |            d S )Nc                 x    t          | dt          i          fd}t          t                      |           d S )Nr  c                 `   t           j                            | d          }t          j        |          }dt           j                            | d          dt           j                            |          d}|j        |gk    sJ |rJ t           j                            |          rJ d S r  )rL   r7   rM   r   r  r   r:  r  s       r&   r   zMtest_unarchive_zip_error_on_relative_path.<locals>.archivetest.<locals>.check  s    w||GU33H *;AAFFbdbibnbnc" c" c" c"#%7<<#9#9#9#9;G=WI----w~~h///////r(   r  r  s     @r&   r  z>test_unarchive_zip_error_on_relative_path.<locals>.archivetest  sM     0<2PQQ	0 	0 	0 	0 	0 	 .....r(   r^   r  s    r&   )test_unarchive_zip_error_on_relative_pathr    r  r(   c                  D    d } t          t                      |            d S )Nc                 x    t          | dt          i          fd}t          t                      |           d S )Nr  c                 4   t          j        d |           }d}|j        |gk    sJ |rJ t          j                            | d          }t          j        |          }d}|j        |gk    sJ |rJ t          j                            |          rJ d S r  r  r  s       r&   r   zRtest_unarchive_zip_error_on_root_relative_path.<locals>.archivetest.<locals>.check  r  r(   r  r  s     @r&   r  zCtest_unarchive_zip_error_on_root_relative_path.<locals>.archivetest  r  r(   r^   r  s    r&   .test_unarchive_zip_error_on_root_relative_pathr    r  r(   c                  D    d } t          t                      |            d S )Nc                 x    t          | dt          i          fd}t          t                      |           d S )Nrc  c                     t           j                            | d          }t          j        |          }t           j                            |          rJ d}|j        |gk    sJ |rJ d S Nr0   z9Archive does not contain a project directory or is empty.r  r  s       r&   r   zLtest_unarchive_tar_error_on_no_directory.<locals>.archivetest.<locals>.check  p    w||GU33H *;AAFw~~h/////QG=WI----r(   r  r  s     @r&   r  z=test_unarchive_tar_error_on_no_directory.<locals>.archivetest  sM     07N2KLL	 	 	 	 	 	 .....r(   r^   r  s    r&   (test_unarchive_tar_error_on_no_directoryr    r  r(   c                  D    d } t          t                      |            d S )Nc                 x    t          | dt          i          fd}t          t                      |           d S )Nrs   c                     t           j                            | d          }t          j        |          }t           j                            |          rJ d}|j        |gk    sJ |rJ d S r  r  r  s       r&   r   zNtest_unarchive_tar_error_on_only_directory.<locals>.archivetest.<locals>.check  r  r(   )rX  r9  r   r_   r  s     @r&   r  z?test_unarchive_tar_error_on_only_directory.<locals>.archivetest  sM     032FGG	 	 	 	 	 	 .....r(   r^   r  s    r&   *test_unarchive_tar_error_on_only_directoryr    r  r(   c                  D    d } t          t                      |            d S )Nc                     t          | t          t          d          fd}t          t                      |           d S )N)a/b.txtzc/d.txtc                     t           j                            | d          }t          j        |          }t           j                            |          rJ d}|j        |gk    sJ |rJ d S )Nr0   z{A valid project archive contains only one project directory with all files inside that directory. 'c/d.txt' is outside 'a'.r  r  s       r&   r   zTtest_unarchive_tar_error_on_multiple_directories.<locals>.archivetest.<locals>.check  ss    w||GU33H *;AAFw~~h/////XG=WI----r(   r  r  s     @r&   r  zEtest_unarchive_tar_error_on_multiple_directories.<locals>.archivetest  sQ     0nYg2h2hii	 	 	 	 	 	 .....r(   r^   r  s    r&   0test_unarchive_tar_error_on_multiple_directoriesr    r  r(   c                  D    d } t          t                      |            d S )Nc                 j    t          | i           fd}t          t                      |           d S )Nc                     t           j                            | d          }t          j        |          }t           j                            |          rJ d}|j        |gk    sJ |rJ d S Nr0   z7A valid project archive must contain at least one file.r  r  s       r&   r   zEtest_unarchive_tar_error_on_empty.<locals>.archivetest.<locals>.check&  p    w||GU33H *;AAFw~~h/////OG=WI----r(   )rX  r   r_   r  s     @r&   r  z6test_unarchive_tar_error_on_empty.<locals>.archivetest#  H     0"55	 	 	 	 	 	 .....r(   r^   r  s    r&   !test_unarchive_tar_error_on_emptyr  "  r  r(   c                  D    d } t          t                      |            d S )Nc                 j    t          | i           fd}t          t                      |           d S )Nc                     t           j                            | d          }t          j        |          }t           j                            |          rJ d}|j        |gk    sJ |rJ d S r  r  r  s       r&   r   zEtest_unarchive_zip_error_on_empty.<locals>.archivetest.<locals>.check8  r  r(   )rC  r   r_   r  s     @r&   r  z6test_unarchive_zip_error_on_empty.<locals>.archivetest5  r  r(   r^   r  s    r&   !test_unarchive_zip_error_on_emptyr  4  r  r(   c                      t          j        t                    5 } t          j        ddd           d d d            n# 1 swxY w Y   dt          | j                  k    sJ d S )Nr  z	/absolutez/barzJIf supplying parent_dir to unarchive, project_dir must be relative or None)r}  r~  r  r   r  r  r  )r  s    r&   .test_unarchive_abs_project_dir_with_parent_dirr  F  s    	z	"	" AglK@@@A A A A A A A A A A A A A A AW[^_f_l[m[mmmmmmms   =AAc                 J      fd}t          t                      |           d S )Nc                     t          | t          t          d          fd}t          t                      |           d S )Nr  za/c.txtc                 T   t           j                            | d          t          d          fd}                    d|           t          j                  }d         dk    sJ t           j                                      rJ d}|j        |gk    sJ |rJ d S )	Nr0   r   )countc                      t           j                                      sJ d         dz   d<   d         dk    rt          d          d S Nr  r>   rH  Not copying second filerL   r7   r:  r6   rC   rD   stater  s     r&   mock_copyfileobjzmtest_unarchive_tar_error_on_writing_removes_dir.<locals>.archivetest.<locals>.check.<locals>.mock_copyfileobjX  Y    w~~h/////!&w!!3g>Q& =!";<<<= =r(   tarfile.copyfileobjr  rH  r  )	rL   r7   rM   r_   r+   r   r  r:  r   )rY   r	  r   r  r  r  r  r,   s       @@r&   r   zStest_unarchive_tar_error_on_writing_removes_dir.<locals>.archivetest.<locals>.checkP  s    w||GU33H
 qMMME= = = = = =  57GHHH *;AAF>Q&&&&w~~h//////G=WI----r(   r  r  s     @r&   r  zDtest_unarchive_tar_error_on_writing_removes_dir.<locals>.archivetestM  sW     0nYg2h2hii	 	 	 	 	 	2 	 .....r(   r^   r  s   ` r&   /test_unarchive_tar_error_on_writing_removes_dirr  L  s8    / / / / /< DFFK00000r(   c                 J      fd}t          t                      |           d S )Nc                     t          | t          t          d          fd}t          t                      |           d S )Nr   c                    t           j                            | d          t          dd          fd}                    d|           fd}                    d|           t          j                  }                                 d         d	k    sJ d
         dk    sJ t           j                                      sJ d}|j	        |gk    sJ |rJ d S )Nr0   r   )r  rmtree_countc                      t           j                                      sJ d         dz   d<   d         dk    rt          d          d S r  r  r  s     r&   r	  zytest_unarchive_tar_error_on_writing_then_error_removing_dir.<locals>.archivetest.<locals>.check.<locals>.mock_copyfileobjw  r
  r(   r  c                     t           j                                      sJ d         dz   d<   t          d          )Nr  r>   zrmtree failedr  )r7   r  r  s    r&   rQ  zttest_unarchive_tar_error_on_writing_then_error_removing_dir.<locals>.archivetest.<locals>.check.<locals>.mock_rmtree  s?    w~~h/////(-n(=(An%o...r(   rS  r  rH  r  r>   r  )
rL   r7   rM   r_   r+   r   r  rP   r:  r   )	rY   r	  rQ  r   r  r  r  r  r,   s	        @@r&   r   z_test_unarchive_tar_error_on_writing_then_error_removing_dir.<locals>.archivetest.<locals>.checkr  s/   w||GU33Hqq111E= = = = = =  57GHHH/ / / / / /
 === *;AAF>Q&&&&(A----7>>(+++++/G=WI----r(   r  r  s     @r&   r  zPtest_unarchive_tar_error_on_writing_then_error_removing_dir.<locals>.archivetesto  sX     0nYg2h2hii 	  	  	  	  	  	D 	 .....r(   r^   r  s   ` r&   ;test_unarchive_tar_error_on_writing_then_error_removing_dirr  n  s9    %/ %/ %/ %/ %/N DFFK00000r(   c                 D      fd}t          t          dddi|           d S )Nc                     t          d          5  t          |           }g |j        k    sJ t          j        |d          }|sJ |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  expected_basename	unit_testsitezhttp://example.com/whatevs)r   r   rO   r   uploadr  r  s      r&   r   ztest_upload.<locals>.check  s    FFF 	> 	>.w77G))))) 'kBBBFMMM:!======	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   AA%%A),A)
name: foo
r  r  r   r  s   ` r&   test_uploadr    sO    > > > > > 4$m(	
 	    r(   c                  :    d } t          t          di|            d S )Nc                     t          | t                                }t          j        |          }|rJ d|j        j        z  g|j        k    sJ d S )Nr  r   )r   r   r   r  r   r   r   r   s      r&   r   z5test_upload_with_project_file_problems.<locals>.check  so    'LNN;;;#G,,h )*
 ] 	 	 	 	 	r(   r   r   r   s    r&   &test_upload_with_project_file_problemsr     r   r(   c                 D      fd}t          t          dddi|           d S )Nc                     t          |           }g |j        k    sJ d }                    d|           t          j        |d          }|rJ |j        d                             d          sJ d S )Nc                      t          d          r  r  r  s    r&   r  zFtest_upload_cannot_walk_directory.<locals>.check.<locals>.mock_os_walk  r9   r(   r  r  r  r   r  )r   rO   r+   r   r  r   r  )rY   r[   r  r   r,   s       r&   r   z0test_upload_cannot_walk_directory.<locals>.check  s    *733W%%%%%	" 	" 	" 	I|444#G+>>>}Q**+DEEEEEEEr(   r  r  r  r   r  s   ` r&   !test_upload_cannot_walk_directoryr$    sT    F F F F F 4$m(	
 	    r(   c                 D      fd}t          t          dddi|           d S )Nc                     t          d          5  t          j        ddd          }|sJ 	 d d d            d S # 1 swxY w Y   d S )Nfake_project.zipr  fake_username/fake_projectFr  unpackr  r   r   downloadrY   r   r,   s     r&   r   ztest_download.<locals>.check  s    8JKKK 	 	 )*Fu[fgggFMMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   =AAr  r  r  r   r  s   ` r&   test_downloadr/    O        
 4$m(	
 	    r(   c                 D      fd}t          t          dddi|           d S )Nc                     t          d          5  t          j        ddd          }|sJ 	 d d d            d S # 1 swxY w Y   d S )Nr'  r  r(  Tr  r)  r+  r-  s     r&   r   z#test_download_unpack.<locals>.check  s    8JKKK 	 	 )*FtZefffFMMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r.  r  r  r  r   r  s   ` r&   test_download_unpackr3    r0  r(   c                 D      fd}t          t          dddi|           d S )Nc                     t          d          5  t          j        ddd          }|rJ 	 d d d            d S # 1 swxY w Y   d S )Nr'  r  zfake_username/missing_projectFr  r)  r+  r-  s     r&   r   z$test_download_missing.<locals>.check  s    8JKKK 	 	 )*IRW^ijjjF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r.  r  r  r  r   r  s   ` r&   test_download_missingr6    sO        
 4$m(	
 	    r(   c                 P    d                     ||          }t          d|          S )Nz2
Docker image {} build successful with command {}.T)ri   )r  r   )r7   tagr/  builder_image
build_argsmsgs         r&   _mock_build_imager<    s*    
?
F
FsG
T
TC#....r(   c                 @      fd}t          t          di|           d S )Nc                     t          |           }g |j        k    sJ                     dt                     t	          j        |          }|sJ d|j        v sJ d S )N(anaconda_project.project_ops.build_imagez1Docker image dockerize-me:latest build successfulr   rO   r+   r<  r   	dockerizer   r  s      r&   r   z%test_dock_default_args.<locals>.check  so    *733W%%%%%FHYZZZ&w//BfF_______r(   z`name: dockerize-me
commands:
  default:
    unix: /usr/bin/true
    supports_http_options: falser   r  s   ` r&   test_dock_default_argsrB    sQ    ` ` ` ` ` 4$$	
     r(   c                 @      fd}t          t          di|           d S )Nc                     t          |           }g |j        k    sJ                     dt                     t	          j        |          }|sJ d|j        v sJ d S )Nr?  z0Docker image dockerizeme:latest build successfulr@  r  s      r&   r   z)test_dock_name_with_spaces.<locals>.check  so    *733W%%%%%FHYZZZ&w//AVE^^^^^^^r(   `name: Dockerize Me
commands:
  default:
    unix: /usr/bin/true
    supports_http_options: falser   r  s   ` r&   test_dock_name_with_spacesrF    sQ    _ _ _ _ _ 4$$	
     r(   c                 @      fd}t          t          di|           d S )Nc                     t          |           }g |j        k    sJ                     dt                     t	          j        |d          }|rJ d|j        v sJ d S )Nr?  r  r/  z9The command missing is not one of the configured commandsr@  r  s      r&   r   z(test_dock_missing_command.<locals>.check"  sw    *733W%%%%%FHYZZZ&w	BBBJfNgggggggr(   rE  r   r  s   ` r&   test_dock_missing_commandrJ  !  sQ    h h h h h 4$$	
     r(   c                 @      fd}t          t          di|           d S )Nc                     t          |           }g |j        k    sJ                     dt                     t	          j        |d          }|sJ d|j        v sJ d S )Nr?  rH   rI  zcommand cmdr@  r  s      r&   r   z.test_dock_default_command_alias.<locals>.check7  st    *733W%%%%%FHYZZZ&w	BBB 9999999r(   z\name: Dockerize Me
commands:
  cmd:
    unix: /usr/bin/true
    supports_http_options: falser   r  s   ` r&   test_dock_default_command_aliasrM  6  sL    : : : : : 4$$	
     r(   c                 @      fd}t          t          di|           d S )Nc                     t          |           }g |j        k    sJ                     dt                     t	          j        |          }|rJ d|j        v sJ d S )Nr?  z%No known run command for this projectr@  r  s      r&   r   z)test_dock_without_commands.<locals>.checkL  sr    *733W%%%%%FHYZZZ&w//6&:SSSSSSSr(   zname: Dockerize Mer   r  s   ` r&   test_dock_without_commandsrP  K  sA    T T T T T 45MOg4hjopppppr(   )r  N)Tr!   r!   NNN)r  re  rb  (  
__future__r   r   rQ   rL   tornador   r  r}  r,  rp  rg  r;  syscollectionsr   anaconda_projectr   anaconda_project.conda_managerr   r	   r
   r   r   r   anaconda_project.projectr   anaconda_project.preparer   #anaconda_project.internal.conda_apir   ,anaconda_project.internal.test.tmpfile_utilsr   r   r   r   "anaconda_project.test.test_preparer   !anaconda_project.local_state_filer   anaconda_project.project_filer   r   "anaconda_project.project_lock_filer   #anaconda_project.test.project_utilsr   ,anaconda_project.internal.test.fake_frontendr   -anaconda_project.internal.test.test_conda_apir   !anaconda_project.test.fake_serverr   !anaconda_project.internal.keyringinternalr  r  !anaconda_project.internal.pluginspluginsr  'anaconda_project.internal.simple_statusr   fixturer-   r`   rn   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r$  r*  r3  r7  r:  rA  rN  rQ  rW  rZ  rb  rh  rk  rn  ru  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r#  r(  markslowrF  rg  ri  rm  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r$  r)  r0  r3  r;  r?  rC  rG  rL  rR  rX  r\  r`  rc  rj  ro  rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r$  r)  r,  r/  r8  r@  rI  rW  r]  rc  rm  rt  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  skipifversion_infomajorr  parametrizer!  r5  r9  r;  rK  rC  rX  rg  rj  rm  ro  rw  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r$  r/  r3  r6  r<  rB  rF  rJ  rM  rP  r!   r(   r&   <module>ro     s&   7 6 6 6 6 6 6 6  				             



 # # # # # # ( ( ( ( ( (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ , , , , , , * * * * * * @ @ @ @ @ @Y Y Y Y Y Y Y Y Y Y Y Y P O O O O O < < < < < < O O O O O O O O L L L L L L H H H H H H E E E E E E \ \ \ \ \ \ 9 9 9 9 9 9 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 @ @ @ @ @ @ V V V(32 32 32lO O O   @" " "J  <  &? ? ?,H H H6
k 
k 
k+ + +,+ + +*c c c  4c c c  ,' ' 'TR R R$  Bs s s*c c cc c c(u u u0#+ #+ #+L(+ (+ (+Va a a # # #& & &c c c"g g g  ,  *  ,& & &R  8  6  8  6	h 	h 	hO O OT T T$k k kC C Ce e e.
H 
H 
HH H H H H H6H H H4H H H.K K K.H H H,H H H4i i i i"
i 
i 
ii i iC C C$  @C C C*C C C2  6  6C C C(C C C(k k k*  (  0  L . . .b$/ $/ $/N  
  $&(,."&*.04   "w w w<w w wBw w w2  4  4w w w(. . .b  <4 4 4n  B! ! !Hw w w6C C C C C C. . .b/ / /d/ / /d7 7 7t6 6 6r5 5 5p3 3 3l+ + +\0 0 0f* * *Z  .k k k  8  ,w w w0
C 
C 
CC C C"  @. . .b& & &R  ,k k kC C CC C C
C 
C 
C
C 
C 
CG G GTt t tn; ; ;|1 1 1h! ! !H  B9 9 9x/ / /dB B BJ  &  (  2! ! !,C C C$  <C C C$k k k(  *  $  "
C 
C 
C  "  (  <@ @ @ @@    (5 5 5p8 8 8vT T TK K K
K K K
  G G Gp p p(I (I (IV1I 1I 1Ih(I (I (IV(I (I (IV(I (I (IV I  I  IF  2I I I>"I "I "IJ!I !I !IH!I !I !IH'I 'I 'ITI I I21 1 1(1 1 14I I I6  @I I I< S%+q0Tx7H7HG7SM  O O#?#?#?@@#1 #1 A@O O #1L #?#?#?@@X1 X1 A@ X1v     (& & & &R1 1 18* * ** * *+ + +1 1 161 1 181 1 1B1 1 141 1 1.1 1 1&1 1 101 1 1(1 1 1(1 1 1(1 1 1$1 1 1$1 1 1>1 1 1&1 1 141 1 1&1 1 141 1 1$1 1 1$1 1 1&1 1 1$1 1 1$n n n1 1 1D(1 (1 (1V   
k 
k 
k  *
 
 

 
 

 
 
/ / /
  *  *  *  *
q 
q 
q 
q 
qr(   