B
    lz]t                 @   s>  d dl mZmZmZmZ d dlmZ d dlmZm	Z	 d dl
Z
d dlZddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ d0ddZddefddZdd Zd1ddZd2ddZ e
!de
j"Z#dd Z$dd  Z%d3d!d"Z&d#d$ Z'd%d& Z(ed'd( Z)d4d*d+Z*d5d,d-Z+d.d/ Z,dS )6    )absolute_importdivisionprint_functionunicode_literals)	getLogger)basenamedirnameN   )dals)ROOT_ENV_NAME)context)NULL)swallow_broken_pipe)paths_equal)	json_dump)	MatchSpecProceedyesnor   c             C   s   ||kst |tjr(ddlm} | g }x6|D ].}||krR|d|d   q2||d  q2W d| d|f } dd |D }||d	< x`tj	|  tj
  tj   }||krtd
|  qtj	d tj
  || S qW d S )Nr	   )
DryRunExitz[%s]r   z	%s (%s)? /c             S   s$   i | ]}||d  gD ]
}||qqS )r    ).0choiceZaltr   r   /lib/python3.7/site-packages/conda/cli/common.py
<dictcomp>"   s   zconfirm.<locals>.<dictcomp> zInvalid choice: %s
)AssertionErrorr   dry_run
exceptionsr   appendjoinsysstdoutwriteflushstdinreadlinestriplowerprint)messagechoicesdefaultr   ZoptionsZoptionZuser_choicer   r   r   confirm   s,    


r0   c             C   s   |t krtjn|}|r(ddlm} | tjr2dS yt| d|d}W n( tk
rl   ddlm} |dY nX |dkrddlm} |d	dS )
Nr	   )r   T)r   r   )r-   r.   r/   )CondaSystemExitz
Operation aborted.  Exiting.r   zExiting.)	r   r   r    r!   r   Z
always_yesr0   KeyboardInterruptr1   )r-   r/   r    r   r   r1   r   r   r   
confirm_yn3   s    r3   c             C   s(   | j s$| js$ddlm} |d| d S )Nr	   )CondaValueErrorzOeither -n NAME or -p PREFIX option required,
try "conda %s -h" for more details)nameprefixr!   r4   )argsZcommandr4   r   r   r   ensure_name_or_prefixE   s    r8   Fc             C   sz   yt | }W n$   ddlm} |d|  Y nX |j}| sr|rrddlm} |d|dt| t|  | f t|S )Nr	   )r4   z!invalid package specification: %szeversion specifications not allowed with 'update'; use
    conda update  %s%s  or
    conda install %s )r   r!   r4   r5   Z
_is_simplelenstr)argjsonupdatespecr4   r5   r   r   r   arg2specL   s     r@   c                s    fdd| D S )Nc                s   g | ]}t | d qS ))r=   )r@   )r   r<   )r=   r   r   
<listcomp>^   s    z#specs_from_args.<locals>.<listcomp>r   )r7   r=   r   )r=   r   specs_from_args]   s    rB   zM(?P<name>[^=<>!\s]+)\s*((?P<cc>=[^=]+(=[^=]+)?)|(?P<pc>(?:[=!]=|[><]=?).+))?$c             C   s   |  dd  S )N#r   )splitrstrip)liner   r   r   strip_commentk   s    rG   c             C   st   t t| }|d krd S |d |d|d  }}}|rT||dd S |rl|d |dd S |S d S )Nr5   ccpc=r9   r   )spec_patmatchrG   groupr+   replace)rF   mr5   rH   rI   r   r   r   spec_from_lineo   s    &rP   c             C   s   ddl m} d}|| dd}g }yxzt|D ]n}| }|r.|drJq.|dkrVd}|rf|| q.t|}|d krddlm} |d	|| f || q.W W n8 t	k
r }	 zdd
lm
}
 |
||	W d d }	~	X Y nX W d Q R X |S )Nr	   )TmpDownloadF)verboserC   z	@EXPLICITT)r4   zcould not parse '%s' in: %s)CondaFileIOError)Zgateways.connection.downloadrQ   openr*   
startswithr"   rP   r!   r4   IOErrorrS   )Zurlr=   rQ   ZexplicitpathspecsrF   r?   r4   erS   r   r   r   specs_from_url|   s0    
&rZ   c                s   t  fdd|D S )Nc             3   s   | ]}|  d   kV  qdS )r   N)rD   )r   r?   )namesr   r   	<genexpr>   s    z!names_in_specs.<locals>.<genexpr>)any)r[   rX   r   )r[   r   names_in_specs   s    r^   c             C   s   | rdd |  S dS d S )Nz[%s]r9   r   )r#   )Zfeaturesr   r   r   disp_features   s    r_   c             C   s   t dt|  d S )Nzconda.stdout)r   infor   )dr   r   r   stdout_json   s    rb   Tc             K   sr   d| i}| dd }|r\d|kr6dd |d D |d< d|krTdd |d D |d< ||d< || t| d S )NsuccessactionsZLINKc             S   s   g | ]}|  qS r   )dist_fields_dump)r   precr   r   r   rA      s    z'stdout_json_success.<locals>.<listcomp>ZUNLINKc             S   s   g | ]}|  qS r   )re   )r   rf   r   r   r   rA      s    )popr>   rb   )rc   kwargsresultrd   r   r   r   stdout_json_success   s    
rj   c                sF    rt d t d  fdd}x| D ]}|| q&W  rBt d d S )Nz# conda environments:rC   c                sf   d} t jkrdnd} t jkr&t}n&t fddt jD rHt }nd}rbt||| f  d S )Nz%-20s  %s  %s*r9   c             3   s   | ]}t |t V  qd S )N)r   r   )r   Zenvs_dir)r6   r   r   r\      s    z4print_envs_list.<locals>.disp_env.<locals>.<genexpr>r   )r   Zdefault_prefixZroot_prefixr   r]   Z	envs_dirsr   r,   )r6   Zfmtr/   r5   )output)r6   r   disp_env   s    

z!print_envs_list.<locals>.disp_envr   )r,   )Zknown_conda_prefixesrl   rm   r6   r   )rl   r   print_envs_list   s    
rn   c              C   s4   ddl m}  tjs0|  s0ddlm} |tdd S )Nr	   )is_admin)OperationNotAllowedz
            The create, install, update, and remove operations have been disabled
            on your system for non-privileged users.
        )Z
common._osro   r   Znon_admin_enabledr!   rp   r
   )ro   rp   r   r   r   check_non_admin   s
    rq   )r   r   r   )FF)F)F)T)T)-Z
__future__r   r   r   r   Zloggingr   os.pathr   r   rer$   Z_vendor.auxlib.ishr
   Zbase.constantsr   Zbase.contextr   Zcommon.constantsr   Z	common.ior   Zcommon.pathr   Zcommon.serializer   Zmodels.match_specr   r0   r3   r8   r@   rB   compileVERBOSErK   rG   rP   rZ   r^   r_   rb   rj   rn   rq   r   r   r   r   <module>   s8   





