B
    lz]~                 @   s  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	 d dl
mZ d dlmZ d dlZd dlmZmZmZmZmZmZmZ d dlZd dlZd d	lmZ d
dlmZmZ d
dlmZm Z  d
dl!m"Z" d
dl#m$Z$m%Z%m&Z& d
dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d
dl.m/Z/ ee0Z1G dd de2Z3dd Z4dd Z5dd Z6dd Z7dd Z8G dd de3Z9G dd  d e3Z:G d!d" d"e3Z;G d#d$ d$e3Z<G d%d& d&e3Z=G d'd( d(e3Z>e9e9e9e9e9e:e:e;e<e=e>d)Z?d-d*d+Z@e0d,kreAe@  dS ).    )absolute_importdivisionprint_functionunicode_literals)OrderedDict)ENOENT)glob)chain)	getLoggerN)abspathbasenamedirname
expanduser
expandvarsisdirjoin)dedent   )CONDA_PACKAGE_ROOT
CondaError)concatvdrop)Utf8NamedTemporaryFile)ROOT_ENV_NAMEcontextlocate_prefix_by_name)FILESYSTEM_ENCODINGPY2	iteritemson_winstring_types	text_type)paths_equalc               @   s<  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdAddZdd Zdd Zdd	 Zd
d Zdd Zdd Zdd ZdBddZdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Z d(d) Z!d*d+ Z"dCd-d.Z#dDd/d0Z$dEd1d2Z%dFd3d4Z&d5d6 Z'd7d8 Z(d9d: Z)d;d< Z*d=d> Z+d?d@ Z,dS )G
_ActivatorNc             C   s2   || _ tr"dd ttjD | _ntj | _d S )Nc             S   s   i | ]\}}t |t |qS  )ensure_fs_path_encoding).0kvr$   r$   -lib/python3.7/site-packages/conda/activate.py
<dictcomp>G   s   z'_Activator.__init__.<locals>.<dictcomp>)_raw_argumentsr   r   osenvironcopy)self	argumentsr$   r$   r)   __init__C   s
    z_Activator.__init__c             C   s   |}d|ks|d dk	rdnd}g }g }ddl m} | }xDtj D ]6\}}	|	dksZ|rf|| qF|	rt| |	n|	||< qFW ddl m} | }
xD| D ]8\}}	|dkrqq|	dkr||  q|	|
| < qW ||7 }|t|
 | }
|
|fS )a)  
        :param kwargs: environment variables to export. The `conda_exe_vars` meta
                       variables are also exported by default. If you do not want
                       this to happen then pass:
                           conda_exe_vars=None
                       .. if you pass and set any other variable to None, then it
                       emits it to the dict with a value of None.

        :return: A OrderedDict of env vars to export ordered the same way as kwargs.
                 And a list of env vars to unset.
        Zconda_exe_varsNFTr   )r   )	collectionsr   r   conda_exe_vars_dictitemsappendpath_conversionupperr	   )r/   odargskwargsZconda_exe_vars_NoneZconda_exe_unset_vars
unset_varsr   Zconda_exe_vars_exportr'   r(   export_varsr$   r$   r)   get_export_unset_varsM   s,    z _Activator.get_export_unset_varsc             K   sJ   | j t|d\}}|d k	r2tt| | }|d k	rB||7 }||fS )N)r8   )r<   r   r	   r4   )r/   r;   r:   r9   Znew_export_varsZnew_unset_varsr$   r$   r)   add_export_unset_varsu   s    z _Activator.add_export_unset_varsc                sl    j t|d\}}d  }}|r> j fdd| D }|r\ j fdd|D }|pbd|phdfS )N)r8   c                s   g | ]\}} j ||f qS r$   )export_var_tmpl)r&   r'   r(   )r/   r$   r)   
<listcomp>   s    z<_Activator.get_scripts_export_unset_vars.<locals>.<listcomp>c                s   g | ]} j | qS r$   )unset_var_tmpl)r&   r'   )r/   r$   r)   r?      s     )r<   r   command_joinr   r4   )r/   r9   r;   r:   Zscript_export_varsZscript_unset_varsr$   )r/   r)   get_scripts_export_unset_vars~   s    z(_Activator.get_scripts_export_unset_varsc          	   C   s^   t |d}|d kr| j|S |rTtd|dd}|| j| W d Q R X |jS t d S )N)rA   zw+F)suffixdelete)r   rB   r   r   writenameNotImplementedError)r/   commandsZextZtfr$   r$   r)   	_finalize   s    
z_Activator._finalizec             C   s4   | j r| | j}n| | j}| | || jS )N)stackbuild_stackenv_name_or_prefixbuild_activaterJ   _yield_commandstempfile_extension)r/   Zbuilder_resultr$   r$   r)   activate   s    z_Activator.activatec             C   s   |  | |  | jS )N)rJ   rO   build_deactivaterP   )r/   r$   r$   r)   
deactivate   s    z_Activator.deactivatec             C   s   |  | |  | jS )N)rJ   rO   build_reactivaterP   )r/   r$   r$   r)   
reactivate   s    z_Activator.reactivatec          	   C   sv   g }| |   t| j}| |  W d Q R X |d krDtjsH|rR| d |  }|d k	rl| | d|S )Nzconda activate base

)	r5   _hook_preambleopenhook_source_pathreadr   auto_activate_base_hook_postambler   )r/   r[   ZbuilderZfsrcZ	postambler$   r$   r)   hook   s    

z_Activator.hookc             C   s   |  | j t| | j S )N)_parse_and_set_argsr+   getattrcommand)r/   r$   r$   r)   execute   s    z_Activator.executec             C   s<   ddl m} ddlm}m} dt|| t|d S )z
        Returns a list of possible subcommands that are valid
        immediately following `conda` at the command line.
        This method is generally only used by tab-completion.
        r   )find_commands)generate_parserfind_builtin_commandsrV   T)Zcli.find_commandsrb   Zcli.conda_argparserc   rd   r   sortedtuple)r/   rb   rc   rd   r$   r$   r)   rI      s
    z_Activator.commandsc             C   s
   t  d S )N)rH   )r/   r$   r$   r)   rW      s    z_Activator._hook_preamblec             C   s   d S )Nr$   )r/   r$   r$   r)   r\      s    z_Activator._hook_postamblec                s  |d krddl m} |d|d  ttd|}dtfdd|D }t|t|k}t fdd|D } sddl m} |d	nb|rdd
l m}m}m} | | |d|d|dd}	|	  n  dkrddl m} |d   	ds dkr<y|
d}
W n tk
r.   dt_Y nX ||
= dt_ dkry|
d}W n tk
rp   d| _Y nX ||= d| _t|dkrddl m} | d t| d |r|d pd| _n"|rddl m} |d |f  | _d S )Nr   )ArgumentErrorz?'activate', 'deactivate', or 'reactivate' command must be givenr   )z-hz--helpz/?c             3   s   | ]}| kr|V  qd S )Nr$   )r&   arg)
help_flagsr$   r)   	<genexpr>   s    z1_Activator._parse_and_set_args.<locals>.<genexpr>c             3   s   | ]}|r| kr|V  qd S )Nr$   )r&   rh   )r`   r$   r)   rj      s    zS'activate', 'deactivate', 'hook', 'commands', or 'reactivate' command must be given)ActivateHelpDeactivateHelpGenericHelpr]   rI   rU   )rQ   rS   r]   rI   rU   )rQ   rS   rU   r]   rI   zinvalid command '%s'rQ   z--devFTz--stackz) does not accept more than one argument:
rV   basez0%s does not accept arguments
remainder_args: %s
)
exceptionsrg   rf   r   lenlistrk   rl   rm   endswithindex
ValueErrorr   devrK   strrM   r`   )r/   r0   rg   Znon_help_argsZhelp_requestedZremainder_argsrk   rl   rm   Zhelp_classesZdev_idxZ	stack_idxr$   )r`   ri   r)   r^      s^    


z_Activator._parse_and_set_argsc             c   s   x0t t|di D ]\}}| j||f V  qW x |ddD ]}| j| V  q@W x |ddD ]}| j| V  qbW x,t|di D ]\}}| j||f V  qW x,t|di D ]\}}| j||f V  qW x |ddD ]}| j| V  qW d S )Nexport_pathdeactivate_scriptsr$   r:   set_varsr;   activate_scripts)re   r   getr>   run_script_tmplr@   set_var_tmpl)r/   Z	cmds_dictkeyvalueZscriptr$   r$   r)   rO     s    z_Activator._yield_commandsc             C   s   |  |dS )NF)_build_activate_stack)r/   rM   r$   r$   r)   rN     s    z_Activator.build_activatec             C   s   |  |dS )NT)r   )r/   rM   r$   r$   r)   rL   "  s    z_Activator.build_stackc             C   s$  t d|r8t|}tt|dsTddlm} ||n|tdfkrLtj	}nt
|}t| jdd pjd}|d }| jd	}||kr|dkr|  S | |}| |}	| ||	}
g }|dkr| | |}| jtd
|fd|fd|fd|	fd|
ffd\}}d}n| jd|d  |kr2|  S |r| | |}d}| jtd
|fd|fd|fd|	fd|
ffd\}}||d| < d|d| < nZ| | ||}| |}| jtd
|fd|fd|fd|	fd|
ffd\}}||d| < i }tjr
| ||
 | | |||||dS )Nz\\|/z
conda-metar   )EnvironmentLocationNotFoundrootCONDA_SHLVLrA   r   CONDA_PREFIXpathconda_prefixconda_shlvlconda_default_envconda_prompt_modifier)r8   r$   zCONDA_PREFIX_%szCONDA_PREFIX_%dtruezCONDA_STACKED_%d)r:   ry   r;   rx   rz   )researchexpandr   r   ro   r   r   r   root_prefixr   intr-   r{   striprT   _get_activate_scripts_default_env_prompt_modifierpathsep_join_add_prefix_to_pathr<   r   rR   _replace_prefix_in_path_get_deactivate_scripts	changeps1_update_prompt_build_activate_shell_custom)r/   rM   rK   prefixr   old_conda_shlvlnew_conda_shlvlold_conda_prefixrz   r   r   r:   new_pathr;   rx   ry   r$   r$   r)   r   %  sv    





z _Activator._build_activate_stackc             C   s  d| _ | jd}t| jdd p(d}|r8|dk rLdt t dddS | |}|d }i }|dkr| | |}| j	td	d
|fddfd\}}d}	d}
d|i}n|dkst
| jd| }| |}| ||}	d| | jk}d}d| g}|r | | |}|d|  n| | ||}| j	td|fd
|fd|fd|	ffd\}}||7 }d|i}| |}
tjr| ||	 ||||||
dS )NTr   r   rA   r   r   r$   )r:   ry   r;   rx   rz   )r   Nr   )r   N)r   N)r8   PATHzCONDA_PREFIX_%dzCONDA_STACKED_%dr   r   r   )r:   ry   r;   rw   rx   rz   )_deactivater-   r{   r   r   r   r   r   _remove_prefix_from_pathr<   AssertionErrorr   r   r5   r   r   r   r   r   )r/   r   r   rx   r   ry   r   r;   r:   r   rz   rw   
new_prefixr   Zold_prefix_stackedZunset_vars2r$   r$   r)   rR   q  sd    




z_Activator.build_deactivatec          
   C   s   d| _ | jd}t| jdd p(d}|r8|dk rLdt t dddS | jd	| |}| | ||}i }| 	||}t
jr| || d|td
|fd|fd| 	||fg| || |dS )NTr   r   rA   r   r   r$   )r:   ry   r;   rx   rz   ZCONDA_DEFAULT_ENVr   CONDA_PROMPT_MODIFIER)_reactivater-   r{   r   r   r   r   r   r   r   r   r   r   r   r   )r/   r   r   r   r   ry   r   r$   r$   r)   rT     s.    z_Activator.build_reactivatec             C   s   ddd}| j dtj|kr&|tj nd}|tj}t| tj	}d}x6|t
|k r|t
|k rt|| || r|d7 }qNW ||d  }| | jtj	dd	f}t|d |r|dd  }|S )
Nz/usr/bin:/bin:/usr/sbin:/sbinzcC:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\)darwinZwin32r   z/usr/binr   r   Librarybin)r-   r{   sysplatformsplitr,   pathseprf   _get_path_dirsr   rp   r"   r6   sepr   )r/   Zclean_pathsr   Z
path_splitprefix_dirsZstart_indexlibrary_bin_dirr$   r$   r)   _get_starting_path_list  s$    z"_Activator._get_starting_path_listFc             c   s   t rv|dV  | j|dddfV  | j|dddfV  | j|ddfV  | j|dfV  | j|dfV  n| j|dfV  d S )N\r   z	mingw-w64r   ZusrZScripts)r   rstripr   r   )r/   r   Zextra_library_binr$   r$   r)   r     s    z_Activator._get_path_dirsc             C   s   |  |}|d kr&t|  |  }nt|  |}t| jdd pJd}|stdd |D s|  tt	j
d}|d| t|  | ||dd< t|S )Nr   rA   r   c             s   s   | ]}| d V  qdS )condabinN)rr   )r&   pr$   r$   r)   rj     s    z1_Activator._add_prefix_to_path.<locals>.<genexpr>r   )r6   rq   r   r   r-   r{   r   anyr   r   r   insertr   rf   )r/   r   starting_path_dirs	path_listr   Zcondabin_dirr$   r$   r)   r   	  s    
z_Activator._add_prefix_to_pathc             C   s   |  |d |S )N)r   )r/   r   r   r$   r$   r)   r     s    z#_Activator._remove_prefix_from_pathc             C   sB  |  |}|  |}|d kr0t|  |  }nt|  |}dd }|d k	rt| |}|||d }|d krzd}nt|d }d }	xF|	d kr|dkr|||| }	|	d krtd||  |d }qW |  | j	
tjddf}
||	d  |
kr|	d7 }	|||	d = nd}|d k	r:t| ||||< t|S )	Nc             S   s(   x"t | D ]\}}t||r
|S q
W d S )N)	enumerater"   )pathsZ	test_pathqr   r$   r$   r)   index_of_path'  s    
z9_Activator._replace_prefix_in_path.<locals>.index_of_pathr   r   zDid not find path entry {}r   r   )r6   rq   r   rf   r   rp   loginfoformatr   r   r   r   )r/   Z
old_prefixr   r   r   r   r   Z	first_idxZprefix_dirs_idxZlast_idxr   r$   r$   r)   r     s6    



z"_Activator._replace_prefix_in_pathc             C   s   d S )Nr$   )r/   r;   r$   r$   r)   r   I  s    z'_Activator._build_activate_shell_customc             C   s   d S )Nr$   )r/   ry   r   r$   r$   r)   r   N  s    z_Activator._update_promptc             C   s,   t |tjrdS tt|dkr(t|S |S )Nrn   Zenvs)r"   r   r   r   r   )r/   r   r$   r$   r)   r   Q  s    z_Activator._default_envc             C   s  t jrg }g }t| jdd }xtd|d D ]}||krX| | jdd}n| | jd|d }t	| jd|d }|
| |s|dd	 }|
| q6W t| d
d}	t| dd}
|	r(|dd	 }|dd	 }t	| jd|d }|sX|rX|
|d	  n0|
r0n(t| dd}|sN|dd	 }|
| d|d d d	 }t jj|||t|dS dS d S )Nr   0r   r   rA   zCONDA_PREFIX_{}zCONDA_STACKED_{}r   r   r   Fr   rK   ,)Zdefault_envZstacked_envr   rG   )r   r   r   r-   r{   r   ranger   r   boolr5   r_   r   Z
env_promptr   )r/   r   r   Z	env_stackZprompt_stackZ	old_shlvliZenv_iZ	stacked_irS   rU   ZstackedrK   Zconda_stacked_envr$   r$   r)   r   V  sF    

z_Activator._prompt_modifierc             C   s$   |  ttt|dddd| j S )Netccondaz
activate.d*)r6   re   r   r   script_extension)r/   r   r$   r$   r)   r     s    
z _Activator._get_activate_scriptsc             C   s(   |  ttt|dddd| j ddS )Nr   r   zdeactivate.dr   T)reverse)r6   re   r   r   r   )r/   r   r$   r$   r)   r     s    
z"_Activator._get_deactivate_scripts)N)N)F)N)N)N)-__name__
__module____qualname__r   r   r6   r   rP   rB   r@   r>   r}   r|   rY   r1   r<   r=   rC   rJ   rQ   rS   rU   r]   ra   rI   rW   r\   r^   rO   rN   rL   r   rR   rT   r   r   r   r   r   r   r   r   r   r   r   r$   r$   r$   r)   r#      sT   

(	
?LJ!"



*.r#   c             C   s   t tt| S )N)r   r   r   )r   r$   r$   r)   r     s    r   c             C   s$   y
|  dS  tk
r   | S X d S )Nzutf-8)encodeAttributeError)r   r$   r$   r)   ensure_binary  s    
r   c             C   s$   y
|  tS  tk
r   | S X d S )N)decoder   r   )r   r$   r$   r)   r%     s    
r%   c          
   C   s  t st| S | d krd S ddlm}m}m} ddlm} ddlm	} |d}|rbt
jt|dnd}|d7 }t| t}|r| nd	t
j | }	t|	d
r|	d}	y||||||d}
W n\ tk
r } z<|jtkr܂ dd }t|	}	td||	ddd}W d d }~X Y nnX |
j|	d\}}|
j}|dks@|rhd|||f }t|tjd ||||t|dr~| d}|! }|r|"dpd}|r|d S t#|S )Nr   )CalledProcessErrorPIPEPopen)shlex_split_unicoder   )whichbashZcygpathz --path -f -z%sr   zutf-8)stdinstdoutstderrc             S   s0   |  ddddddd}d|d S )Nr   r   /:rA   z//)groupreplacer   )Z
found_pathfoundr$   r$   r)   _translation  s    "z)native_path_to_unix.<locals>._translationz/([a-zA-Z]:[\/\\\\]+(?:[^:*?\"<>|;]+[\/\\\\]*)*)z;/z:/;)inputz$
  stdout: %s
  stderr: %s
  rc: %s
)filer   r   r$   )$r   path_identity
subprocessr   r   r   Zconda._vendor.auxlib.compatr   common.pathr   r,   r   r   r   
isinstancer    r   hasattrr   EnvironmentErrorerrnor   r%   r   subr   r   Zcommunicate
returncodeprintr   r   r   r   r   rf   )r   r   r   r   r   r   r   r`   Zsingle_pathZjoinedr   er   r   r   Zrcmessagefinalr$   r$   r)   native_path_to_unix  sJ    



 
r   c             C   s8   t | trtj| S | d kr"d S tdd | D S d S )Nc             s   s   | ]}t j|V  qd S )N)r,   r   normpath)r&   _r$   r$   r)   rj     s    z path_identity.<locals>.<genexpr>)r   r    r,   r   r   rf   )r   r$   r$   r)   r     s
    
r   c                   s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	PosixActivatorNc                sd   dj | _d| _t| _d| _d | _d| _d| _d| _	d| _
d| _t td	d
dd| _tt| | d S )Nr   r   z.shrV   zunset %szexport %s='%s'z%s='%s'z. "%s"shellr   z	profile.dzconda.sh)r   r   r   r   r6   r   rP   rB   r@   r>   r}   r|   r   rY   superr   r1   )r/   r0   )	__class__r$   r)   r1     s    zPosixActivator.__init__c             C   s`   | j dd}d|krd S | j d}|r>tt|d|}|dd}|d|| i d S )NZPS1rA   ZPOWERLINE_COMMANDr   'z'"'"')r-   r{   r   r   escaper   update)r/   ry   r   Zps1current_prompt_modifierr$   r$   r)   r     s    zPosixActivator._update_promptc             C   s   d}x~t j D ]p\}}|d kr<|t| j|df d 7 }q|dkrf|t| j|| |f d 7 }q|t| j||f d 7 }qW |S )NrA   rV   )Z
PYTHONPATHZ	CONDA_EXE)r   r3   r4   r   r>   r6   )r/   resultr~   r   r$   r$   r)   rW     s    zPosixActivator._hook_preamble)N)r   r   r   r1   r   rW   __classcell__r$   r$   )r   r)   r     s   r   c                   s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	CshActivatorNc                sd   dj | _d| _t| _d| _d | _d| _d| _d| _	d| _
d| _t td	d
dd| _tt| | d S )Nr   r   z.cshz;
zunsetenv %szsetenv %s "%s"zset %s='%s'zsource "%s"r   r   z	profile.dz	conda.csh)r   r   r   r   r6   r   rP   rB   r@   r>   r}   r|   r   rY   r   r   r1   )r/   r0   )r   r$   r)   r1     s    zCshActivator.__init__c             C   sH   | j dd}| j d}|r2tt|d|}|d|| i d S )NpromptrA   r   )r-   r{   r   r   r   r   )r/   ry   r   r  r   r$   r$   r)   r   )  s    zCshActivator._update_promptc             C   s8   t rdtjtjtjtjf S dtjtjtjtjf S d S )Nzsetenv CONDA_EXE `cygpath %s`
setenv _CONDA_ROOT `cygpath %s`
setenv _CONDA_EXE `cygpath %s`
setenv CONDA_PYTHON_EXE `cygpath %s`zasetenv CONDA_EXE "%s"
setenv _CONDA_ROOT "%s"
setenv _CONDA_EXE "%s"
setenv CONDA_PYTHON_EXE "%s")r   r   	conda_exer   r   
executable)r/   r$   r$   r)   rW   2  s    zCshActivator._hook_preamble)N)r   r   r   r1   r   rW   r   r$   r$   )r   r)   r     s   	r   c                   s&   e Zd Zd fdd	Zdd Z  ZS )XonshActivatorNc                s`   dj | _d| _t| _d| _d | _d| _d| _d| _	d| _
d| _t tdd	| _tt| | d S )
Nr   r   z.xshrV   zdel $%sz
$%s = '%s'zsource "%s"r   z	conda.xsh)r   r   r   r   r6   r   rP   rB   r@   r>   r}   r|   r   rY   r   r  r1   )r/   r0   )r   r$   r)   r1   D  s    zXonshActivator.__init__c             C   s
   dt j S )Nz$CONDA_EXE = "%s")r   r  )r/   r$   r$   r)   rW   U  s    zXonshActivator._hook_preamble)N)r   r   r   r1   rW   r   r$   r$   )r   r)   r  B  s   r  c                   s   e Zd Zd fdd	Z  ZS )CmdExeActivatorNc                sX   dj | _d| _t| _d| _d| _d| _d| _d| _	d| _
d| _d | _tt| | d S )Nr   r   z.batrV   z@SET %s=z@SET "%s=%s"z
@CALL "%s")r   r   r   r   r6   r   rP   rB   r@   r>   r}   r|   rY   r   r  r1   )r/   r0   )r   r$   r)   r1   [  s    zCmdExeActivator.__init__)N)r   r   r   r1   r   r$   r$   )r   r)   r  Y  s   r  c                   s&   e Zd Zd fdd	Zdd Z  ZS )FishActivatorNc                sf   dj | _d| _t| _d| _d | _d| _d| _d| _	d| _
d| _t td	d
ddd| _tt| | d S )Nz" "r   z.fishz;
z	set -e %szset -gx %s "%s"zset -g %s "%s"zsource "%s"r   r   fishzconf.dz
conda.fish)r   r   r   r   r6   r   rP   rB   r@   r>   r}   r|   r   rY   r   r  r1   )r/   r0   )r   r$   r)   r1   u  s    zFishActivator.__init__c             C   s8   t rdtjtjtjtjf S dtjtjtjtjf S d S )Nzset -gx CONDA_EXE (cygpath "%s")
set _CONDA_ROOT (cygpath "%s")
set _CONDA_EXE (cygpath "%s")
set -gx CONDA_PYTHON_EXE (cygpath "%s")z]set -gx CONDA_EXE "%s"
set _CONDA_ROOT "%s"
set _CONDA_EXE "%s"
set -gx CONDA_PYTHON_EXE "%s")r   r   r  r   r   r  )r/   r$   r$   r)   rW     s
    zFishActivator._hook_preamble)N)r   r   r   r1   rW   r   r$   r$   )r   r)   r  s  s   r  c                   s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	PowerShellActivatorNc                st   t r
djndj| _t rdnd| _t| _d| _d | _d| _d| _	d| _
d| _d	| _ttd
dd| _tt| | d S )Nr   r   r   r   z.ps1rV   zRemove-Item Env:/%sz$Env:%s = "%s"z. "%s"r   r   zconda-hook.ps1)r   r   r   r   r   r6   r   rP   rB   r@   r>   r}   r|   r   rY   r   r  r1   )r/   r0   )r   r$   r)   r1     s    zPowerShellActivator.__init__c             C   s8   t jr$tdjtjtttj	t dS tdjt dS d S )Na-                  $Env:PYTHONPATH = "{python_path}"
                $Env:CONDA_EXE = "{sys_exe}"
                $Env:_CE_M = "-m"
                $Env:_CE_CONDA = "conda"
                $Env:_CONDA_ROOT = "{python_path}{s}conda"
                $Env:_CONDA_EXE = "{context.conda_exe}"
                )sZpython_pathZsys_exer   z                $Env:CONDA_EXE = "{context.conda_exe}"
                $Env:_CE_M = ""
                $Env:_CE_CONDA = ""
                $Env:_CONDA_ROOT = "{context.conda_prefix}"
                $Env:_CONDA_EXE = "{context.conda_exe}"
                )r   )
r   ru   r   r   r,   r   r   r   r   r  )r/   r$   r$   r)   rW     s    z"PowerShellActivator._hook_preamblec             C   s   t jr
dS d S )NzAdd-CondaEnvironmentToPrompt)r   r   )r/   r$   r$   r)   r\     s    z#PowerShellActivator._hook_postamble)N)r   r   r   r1   rW   r\   r   r$   r$   )r   r)   r    s   r  )posixZashr   ZdashZzshZcshZtcshZxonshzcmd.exer  Z
powershellc          
   C   s   ddl m} t  |  | p"tj} t| dks4t| d dsFt| d 	ddd}| dd  }yt
| }W n  tk
r   td| Y nX ||}yt| dd d	S  tk
r } z(t|trtt|tjd
 |jS  W d d }~X Y nX d S )Nr   )init_std_stream_encoding   zshell.rA      z%s is not a supported shell.)endr   )r   )common.compatr  r   r1   r   argvrp   r   
startswithr   activator_mapKeyErrorr   r   ra   	Exceptionr   r!   r   Zreturn_code)r  r  r   Zactivator_argsZactivator_clsZ	activatorr   r$   r$   r)   main  s*    

r  __main__)N)BZ
__future__r   r   r   r   r2   r   r   r   r   	itertoolsr	   Zloggingr
   r,   os.pathr   r   r   r   r   r   r   r   r   textwrapr   rA   r   r   Z_vendor.toolzr   r   Z_vendor.auxlib.compatr   Zbase.contextr   r   r   r  r   r   r   r   r    r!   r   r"   r   r   objectr#   r   r   r%   r   r   r   r   r  r  r  r  r  r  exitr$   r$   r$   r)   <module>   s^   $     u	6	4,#/

