U
    b_                     @   s  d dl mZmZmZmZ d dlmZ d dlZd dlZd dl	m
Z
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% ddl&m'Z'm(Z( ddl)m*Z* G dd de+Z,dd Z-dd Z.dd Z/dd Z0dd Z1G dd de,Z2G dd de,Z3G dd de,Z4G d d! d!e,Z5G d"d# d#e,Z6G d$d% d%e,Z7G d&d' d'e,Z8e2e2e2e2e2e3e3e4e5e6e7d(Z9d)e8iZ:d*d+ Z;dS ),    )absolute_importdivisionprint_functionunicode_literals)ENOENTN)abspathbasenamedirname
expanduser
expandvarsisdirjoinexists)dedent   )CONDA_PACKAGE_ROOTCONDA_SOURCE_ROOT)concatvdrop)Utf8NamedTemporaryFile)PREFIX_STATE_FILEPACKAGE_ENV_VARS_DIRCONDA_ENV_VARS_UNSET_VAR)ROOT_ENV_NAMEcontextlocate_prefix_by_name)FILESYSTEM_ENCODINGon_win)paths_equalc                   @   sF  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dDddZdEddZdd Zd	d
 Zdd Zdd Zdd Zdd ZdFd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"dGd.d/Z#dHd0d1Z$dId2d3Z%dJd4d5Z&d6d7 Z'd8d9 Z(d:d; Z)d<d= Z*d>d? Z+d@dA Z,dBdC Z-dS )K
_ActivatorNc                 C   s   || _ tj | _d S N)_raw_argumentsosenvironcopyself	arguments r(   -lib/python3.8/site-packages/conda/activate.py__init__>   s    z_Activator.__init__Tc                 K   s   g }i }|  D ],\}}|dkr0||  q||| < q|rtj  D ]:\}}|dkrl||  qL|rz| |n||| < qLn|tj ||fS )a  
        :param export_metavars: whether to export `conda_exe_vars` meta variables.
        :param kwargs: environment variables to export.
                       .. if you pass and set any other variable to None, then it
                       emits it to the dict with a value of None.

        :return: A dict of env vars to export ordered the same way as kwargs.
                 And a list of env vars to unset.
        N)itemsappendupperr   conda_exe_vars_dictpath_conversionextend)r&   Zexport_metavarskwargs
unset_varsexport_varsnamevaluer(   r(   r)   get_export_unset_varsB   s    
z _Activator.get_export_unset_varsc                 K   s8   | j f |\}}|d k	r ||}|d k	r0||}||fS r    )r6   )r&   r3   r2   r1   Znew_export_varsZnew_unset_varsr(   r(   r)   add_export_unset_varsd   s    z _Activator.add_export_unset_varsc                    sh    j f |\}}d  }}|r: j fdd| D }|rX j fdd|D }|p^d|pddfS )Nc                    s   g | ]\}} j ||f qS r(   )export_var_tmpl.0kvr&   r(   r)   
<listcomp>r   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>   u   s      )r6   command_joinr   r+   r&   r1   r3   r2   Zscript_export_varsZscript_unset_varsr(   r=   r)   get_scripts_export_unset_varsm   s    z(_Activator.get_scripts_export_unset_varsc              	   C   s^   t |d}|d kr| j|S |rTtd|dd}|| j| W 5 Q R X |jS t d S )N)rA   w+Fsuffixdelete)r   rB   r   r   writer4   NotImplementedError)r&   commandsexttfr(   r(   r)   	_finalizex   s    
z_Activator._finalizec                 C   s4   | j r| | j}n| | j}| | || jS r    )stackbuild_stackenv_name_or_prefixbuild_activaterN   _yield_commandstempfile_extension)r&   Zbuilder_resultr(   r(   r)   activate   s    z_Activator.activatec                 C   s   |  | |  | jS r    )rN   rS   build_deactivaterT   r=   r(   r(   r)   
deactivate   s    z_Activator.deactivatec                 C   s   |  | |  | jS r    )rN   rS   build_reactivaterT   r=   r(   r(   r)   
reactivate   s    z_Activator.reactivatec              	   C   sv   g }| |   t| j}| |  W 5 Q R X |d krDtjsH|rR| d |  }|d k	rl| | d|S )Nzconda activate base

)	r,   _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 r    )_parse_and_set_argsr!   getattrcommandr=   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_commandsrZ   T)Zcli.find_commandsrf   Zcli.conda_argparserg   rh   r   sortedtuple)r&   rf   rg   rh   r(   r(   r)   rK      s    
z_Activator.commandsc                 C   s
   t  d S r    )rJ   r=   r(   r(   r)   r[      s    z_Activator._hook_preamblec                 C   s   d S r    r(   r=   r(   r(   r)   r`      s    z_Activator._hook_postamblec                    sh  ddd}|d kst |dk r$|  |d  ttd|}dtfdd|D }t |t |k}t fdd|D } s|  nT|rdd	lm}m}m} | | |d
|d|dd}	|	  n dkr| d  ds d
kr&z|	d}
W n t
k
r   dt_Y nX ||
= dt_ dkr<tjoBtjtjk| _z|	d}W n t
k
rn   d}Y nX z|	d}W n t
k
r   d}Y nX |dkr|dkrddlm} |d  |dkrd| _||= |dkrd| _||= t |dkr$ddlm} | d t| d |r4|d p6d| _n"|r^ddlm} |d |f  | _d S )Nc                 S   s,   ddl m} d}| r |d|  7 }||d S )Nr   ArgumentErrorzS'activate', 'deactivate', 'hook', 'commands', or 'reactivate' command must be givenz. Instead got '%s'.)
exceptionsrl   )actual_commandrl   messager(   r(   r)   raise_invalid_command_error   s
    zC_Activator._parse_and_set_args.<locals>.raise_invalid_command_errorr   r   )z-hz--helpz/?c                 3   s   | ]}| kr|V  qd S r    r(   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 r    r(   rq   )rd   r(   r)   rt      s       )ActivateHelpDeactivateHelpGenericHelpra   rK   rY   )rU   rW   ra   rK   rY   )rU   rW   rY   ra   rK   )rn   rU   z--devFTz--stackz
--no-stackrk   z.cannot specify both --stack and --no-stack to z) does not accept more than one argument:
rZ   basez0%s does not accept arguments
remainder_args: %s
)N)lenrj   r   listrm   ru   rv   rw   endswithindex
ValueErrorr   devZ
auto_stackZshlvlrO   rl   strrQ   rd   )r&   r'   rp   Znon_help_argsZhelp_requestedZremainder_argsru   rv   rw   Zhelp_classesZdev_idxZ	stack_idxZno_stack_idxrl   r(   )rd   rs   r)   rb      s|    







z_Activator._parse_and_set_argsc                 c   s   t |di  D ]\}}| j||f V  q|ddD ]}| j| V  q:|ddD ]}| j| V  qX|di  D ]\}}| j||f V  qz|di  D ]\}}| j||f V  q|ddD ]}| j| V  qd S )Nexport_pathdeactivate_scriptsr(   r2   set_varsr3   activate_scripts)ri   getr+   r8   run_script_tmplr?   set_var_tmpl)r&   	cmds_dictkeyr5   Zscriptr(   r(   r)   rS   	  s    z_Activator._yield_commandsc                 C   s   |  |dS )NF_build_activate_stackr&   rQ   r(   r(   r)   rR     s    z_Activator.build_activatec                 C   s   |  |dS )NTr   r   r(   r(   r)   rP     s    z_Activator.build_stackc                    st  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 | |}| |}	| ||	}
| | d
d   D } fdd|D  dd   D }|D ] }d||f }tj| |< q|rLtdtjd tdd| tjd g }|dkr| jf | | ||||	|
d \}}d}n| jd|d  |kr|  S |rd}| jf | | ||||	|
d \}}||d| < d|d| < nD| |}| jf | | |||||	|
d \}}||d| < i }tj rZ| !||
 | "| |||||dS )Nz\\|/z
conda-metar   )EnvironmentLocationNotFoundrootCONDA_SHLVLrA   r   CONDA_PREFIXc                 S   s   g | ]\}}|t kr|qS r(   )r   r9   r(   r(   r)   r>   9  s    z4_Activator._build_activate_stack.<locals>.<listcomp>c                    s   g | ]}  |qS r(   )popr:   _conda_environment_env_varsr(   r)   r>   ;  s     c                 S   s   g | ]}|t j kr|qS r(   )r"   r#   keysr@   r(   r(   r)   r>   =  s    __CONDA_SHLVL_%s_%sz=WARNING: overwriting environment variables set in the machinefilezoverwriting variable %s )pathconda_prefixconda_shlvlconda_default_envconda_prompt_modifierr(   zCONDA_PREFIX_%sCONDA_PREFIX_%dtrueCONDA_STACKED_%dr2   r   r3   r   r   )#researchexpandr   r   rm   r   r   r   root_prefixr   intr#   r   striprX   _get_activate_scripts_default_env_prompt_modifier_get_environment_env_varsr+   r   r"   printsysstderrr6   pathsep_join_add_prefix_to_pathrV   _get_deactivate_scripts_replace_prefix_in_path	changeps1_update_prompt_build_activate_shell_custom)r&   rQ   rO   prefixr   old_conda_shlvlnew_conda_shlvlold_conda_prefixr   r   r   Zunset_env_varsZclobbering_env_varsZcvarsave_varr2   r3   r   r   r(   r   r)   r   "  s    









z _Activator._build_activate_stackc                 C   s  d| _ | jd}t| jdd p(d}|r8|dk rHdi i dddS | |}| |}|d }i }|dkr| | |}| j	d |d d d	\}}	d}
d}d
|i}n|dkst
| jd| }| |}| ||}
| |}d| | jk}d}d| g}	|r&| | |}|	d|  n| | ||}| j	f ||||
d	|\}}|	|7 }	d
|i}| |}tjr| ||
 | D ]:}|	| d||f }|tj krtj| ||< q|	|||||dS )NTr   r   rA   r   r   r(   r   )r   r   r   r   PATHr   r   r   )r2   r   r3   r   r   r   )_deactivater#   r   r   r   r   r   r   _remove_prefix_from_pathr6   AssertionErrorr   r   r,   r   r   r   r   r   r   r"   )r&   r   r   r   Zold_conda_environment_env_varsr   r   new_pathr3   r2   r   r   r   
new_prefixr   Znew_conda_environment_env_varsZold_prefix_stackedZunset_vars2Zenv_varr   r(   r(   r)   rV   ~  s    










z_Activator.build_deactivatec                 C   s   d| _ | jd}t| jdd p(d}|r8|dk rHdi i dddS | jd	| |}| | ||}i }| ||}t	j
r| || d}||| ||d
}| |}	|	 D ]$\}
}|tkr||
f }q|||
< q|||| || |dS )NTr   r   rA   r   r   r(   r   ZCONDA_DEFAULT_ENV)r   r   CONDA_PROMPT_MODIFIER)_reactivater#   r   r   r   r   r   r   r   r   r   r   r   r+   r   r   r   )r&   r   r   r   r   r   r   Zenv_vars_to_unsetZenv_vars_to_exportr   r;   r<   r(   r(   r)   rX     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}|t
|k r|t
|k rt|| || r|d7 }qL||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   r   platformsplitr"   pathseprj   _get_path_dirsr   rz   r   r/   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)r|   r:   pr(   r(   r)   rt   4  s     z1_Activator._add_prefix_to_path.<locals>.<genexpr>r   )r/   r{   r   r   r#   r   r   anyr   r   r   insertr   rj   )r&   r   starting_path_dirs	path_listr   Zcondabin_dirr(   r(   r)   r   (  s    
z_Activator._add_prefix_to_pathc                 C   s   |  |d |S r    )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 }	|	d kr|dkr|||| }	|	d krtd|| tj	d |d }q|  | j
tjdd	f}
||	d  |
kr|	d7 }	|||	d = nd}|d k	r:t| ||||< t|S )
Nc                 S   s(   t | D ]\}}t||r|  S qd S r    )	enumerater   )pathsZ	test_pathqr   r(   r(   r)   index_of_pathF  s    

z9_Activator._replace_prefix_in_path.<locals>.index_of_pathr   r   rx   zDid not find path entry {0}r   r   r   )r/   r{   r   rj   r   rz   r   formatr   r   r   r   r   )r&   Z
old_prefixr   r   r   r   r   Z	first_idxZprefix_dirs_idxZlast_idxr   r(   r(   r)   r   >  s>    




z"_Activator._replace_prefix_in_pathc                 C   s   d S r    r(   )r&   r3   r(   r(   r)   r   k  s    z'_Activator._build_activate_shell_customc                 C   s   d S r    r(   )r&   r   r   r(   r(   r)   r   p  s    z_Activator._update_promptc                 C   s,   t |tjrdS tt|dkr(t|S |S )Nry   Zenvs)r   r   r   r   r	   )r&   r   r(   r(   r)   r   s  s    z_Activator._default_envc                 C   s  t jrg }g }t| jdd }td|d D ]}||krV| | jdd}n| | jd|d }t	| jd|d }|
| |s|dd	 }|
| q4t| d
d}	t| dd}
|	r$|dd	 }|dd	 }t	| jd|d }|sT|rT|
|d	  n0|
r,n(t| dd}|sJ|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   rx   r   Fr   rO   ,)Zdefault_envZstacked_envr   r4   )r   r   r   r#   r   r   ranger   r   boolr,   rc   r   Z
env_promptr   )r&   r   r   Z	env_stackZprompt_stackZ	old_shlvliZenv_iZ	stacked_irW   rY   ZstackedrO   Zconda_stacked_envr(   r(   r)   r   x  sJ    

z_Activator._prompt_modifierc                    sh   | j  t  z"dd tt|dddD }W n tk
rH   Y dS X | t fdd|D S )Nc                 s   s   | ]}|j V  qd S r    r   r:   entryr(   r(   r)   rt     s    z3_Activator._get_activate_scripts.<locals>.<genexpr>etccondaz
activate.dr(   c                 3   s"   | ]}|d   kr|V  qd S r    r(   r   Z_script_extensionZse_lenr(   r)   rt     s     script_extensionrz   r"   scandirr   EnvironmentErrorr/   ri   r&   r   r   r(   r   r)   r     s    

z _Activator._get_activate_scriptsc                    sl   | j  t  z"dd tt|dddD }W n tk
rH   Y dS X | t fdd|D dd	S )
Nc                 s   s   | ]}|j V  qd S r    r   r   r(   r(   r)   rt     s    z5_Activator._get_deactivate_scripts.<locals>.<genexpr>r   r   zdeactivate.dr(   c                 3   s"   | ]}|d   kr|V  qd S r    r(   r   r   r(   r)   rt     s      T)reverser   r   r(   r   r)   r     s    

z"_Activator._get_deactivate_scriptsc           
   
      s   t |t}t |t}i }t|rhtdd t|D D ].}t|d}|t	
|  W 5 Q R X q8t|rt|dj}t	
| }|di   fdd| D }|D ]$}	tdtjd td	|	 tjd q|  W 5 Q R X |S )
Nc                 s   s   | ]}|j V  qd S r    r   r   r(   r(   r)   rt     s     z7_Activator._get_environment_env_vars.<locals>.<genexpr>renv_varsc                    s   g | ]}|   kr|qS r(   )r   )r:   ZevZprefix_state_env_varsr(   r)   r>     s      z8_Activator._get_environment_env_vars.<locals>.<listcomp>zbWARNING: duplicate env vars detected. Vars from the environment will overwrite those from packagesr   zvariable %s duplicated)r   r   r   r   ri   r"   r   r\   updatejsonloadsr^   r   r   r   r   r   )
r&   r   Zenv_vars_fileZpkg_env_var_dirr   Zpkg_env_var_pathfZprefix_stateZdup_varsdupr(   r   r)   r     s&    

 z$_Activator._get_environment_env_vars)N)T)N)F)N)N)N).__name__
__module____qualname__r   r   r/   r   rT   rB   r?   r8   r   r   r]   r*   r6   r7   rD   rN   rU   rW   rY   ra   re   rK   r[   r`   rb   rS   rR   rP   r   rV   rX   r   r   r   r   r   r   r   r   r   r   r   r   r(   r(   r(   r)   r      sV   

"	
M\T)"



-/r   c                 C   s   t tt| S r    )r   r
   r   r   r(   r(   r)   r     s    r   c                 C   s*   z|  dW S  tk
r$   |  Y S X d S )Nutf-8)encodeAttributeErrorr5   r(   r(   r)   ensure_binary  s    r   c                 C   s*   z|  tW S  tk
r$   |  Y S X d S r    )decoder   r   r   r(   r(   r)   ensure_fs_path_encoding  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}	z||||||d}
W n\ tk
r } z<|jtkr܂ dd }t|	}	td||	ddd}W 5 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   r   )stdinstdoutr   c                 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
r   r   r
  r(   )$r   path_identity
subprocessr  r  r  Zconda.auxlib.compatr  common.pathr  r"   r   r   r	   
isinstancer   r   hasattrr   r   errnor   r   r   subr  r   Zcommunicate
returncoder   r   r   r   r   r   rj   )r   r  r  r  r  r  r  rd   Zsingle_pathZjoinedr   er  r  r   Zrcro   finalr(   r(   r)   native_path_to_unix  sT    



 
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 r    )r"   r   normpathr   r(   r(   r)   rt   ,  s     z path_identity.<locals>.<genexpr>)r  r   r"   r   r  rj   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	  .shrZ   zunset %szexport %s='%s'z%s='%s'. "%s"shellr   	profile.dzconda.sh)r   r   r   r  r/   r   rT   rB   r?   r8   r   r   r   r]   superr  r*   r%   	__class__r(   r)   r*   1  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  r   )r&   r   r   Zps1current_prompt_modifierr(   r(   r)   r   B  s     zPosixActivator._update_promptc                 C   s   d}t j D ]p\}}|d kr:|t| j|df d 7 }q|dkrd|t| j|| |f d 7 }q|t| j||f d 7 }q|S )NrA   rZ   )
PYTHONPATH	CONDA_EXE)r   r.   r+   r   r8   r/   )r&   resultr   r5   r(   r(   r)   r[   R  s     zPosixActivator._hook_preamble)Nr   r   r   r*   r   r[   __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.csh;
zunsetenv %szsetenv %s "%s"zset %s='%s'source "%s"r!  r   r"  z	conda.csh)r   r   r   r  r/   r   rT   rB   r?   r8   r   r   r   r]   r#  r.  r*   r%   r$  r(   r)   r*   e  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&   r   r   r1  r(  r(   r(   r)   r   v  s     zCshActivator._update_promptc              
   C   sd   t r2tdtj dtj dtj dtj d	 S tdtj dtj dtj d	tj d
	 S d S )Nz+
                setenv CONDA_EXE `cygpath z.`
                setenv _CONDA_ROOT `cygpath z-`
                setenv _CONDA_EXE `cygpath z3`
                setenv CONDA_PYTHON_EXE `cygpath z`
                z#
                setenv CONDA_EXE "z&"
                setenv _CONDA_ROOT "z%"
                setenv _CONDA_EXE "z+"
                setenv CONDA_PYTHON_EXE ""
                r   r   r   	conda_exer   r   
executabler   r=   r(   r(   r)   r[     s.    	zCshActivator._hook_preamble)Nr,  r(   r(   r$  r)   r.  c  s   	r.  c                       s2   e Zd Zedd Zd fdd	Zdd Z  ZS )	XonshActivatorc                 C   sD   t st| S t| tr"| ddS | d kr.d S tdd | D S d S )Nr   r	  c                 S   s   g | ]}| d dqS )r   r	  )r  )r:   r   r(   r(   r)   r>     s     z2XonshActivator.path_conversion.<locals>.<listcomp>)r   r  r  r   r  rj   r  r(   r(   r)   r/     s    
zXonshActivator.path_conversionNc                    s   t r
djndj| _d| _d | _d| _d| _d| _d| _dd l	}|
 dkrXd	| _d
| _nd| _d| _ttdd| _tt| | d S )Nr  r
  r	  rZ   zdel $%sz
$%s = '%s'r   ZWindows.batz'source-cmd --suppress-skip-message "%s"r  z(source-bash --suppress-skip-message "%s"r!  z	conda.xsh)r   r   r   r   rT   rB   r?   r8   r   r   systemr   r   r   r]   r#  r6  r*   )r&   r'   r   r$  r(   r)   r*     s    zXonshActivator.__init__c                 C   s   d|  tj S )Nz$CONDA_EXE = "%s")r/   r   r4  r=   r(   r(   r)   r[     s    zXonshActivator._hook_preamble)N)r   r   r   staticmethodr/   r*   r[   r-  r(   r(   r$  r)   r6    s   

r6  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   r7  rZ   z@SET %s=z@SET "%s=%s"z
@CALL "%s")r   r   r   r  r/   r   rT   rB   r?   r8   r   r   r]   r#  r:  r*   r%   r$  r(   r)   r*     s    zCmdExeActivator.__init__)N)r   r   r   r*   r-  r(   r(   r$  r)   r:    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.fishr/  z	set -e %szset -gx %s "%s"zset -g %s "%s"r0  r!  r   fishzconf.dz
conda.fish)r   r   r   r  r/   r   rT   rB   r?   r8   r   r   r   r]   r#  r;  r*   r%   r$  r(   r)   r*     s    zFishActivator.__init__c              
   C   sd   t r2tdtj dtj dtj dtj d	 S tdtj dtj dtj d	tj d
	 S d S )Nz-
                set -gx CONDA_EXE (cygpath "z-")
                set _CONDA_ROOT (cygpath "z,")
                set _CONDA_EXE (cygpath "z6")
                set -gx CONDA_PYTHON_EXE (cygpath "z")
                z$
                set -gx CONDA_EXE "z#"
                set _CONDA_ROOT "z""
                set _CONDA_EXE "z,"
                set -gx CONDA_PYTHON_EXE "r2  r3  r=   r(   r(   r)   r[     s.    	zFishActivator._hook_preamble)N)r   r   r   r*   r[   r-  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 )	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.ps1rZ   z$Env:%s = ""z$Env:%s = "%s"r   r!  r   zconda-hook.ps1)r   r   r   r   r  r/   r   rT   rB   r?   r8   r   r   r   r]   r#  r=  r*   r%   r$  r(   r)   r*     s    zPowerShellActivator.__init__c                 C   sj   t jr8tdt dtj dt dt j dt j d	 S tdt j dt j
 dt j dt j d		 S d S )	Nz$
                $Env:PYTHONPATH = "z$"
                $Env:CONDA_EXE = "zq"
                $Env:_CE_M = "-m"
                $Env:_CE_CONDA = "conda"
                $Env:_CONDA_ROOT = "z%"
                $Env:_CONDA_EXE = "z4"
                $CondaModuleArgs = @{ChangePs1 = $z}
                z#
                $Env:CONDA_EXE = "zj"
                $Env:_CE_M = ""
                $Env:_CE_CONDA = ""
                $Env:_CONDA_ROOT = ")r   r   r   r   r   r5  r   r4  r   r   r   r=   r(   r(   r)   r[     s2    z"PowerShellActivator._hook_preamblec                 C   s   dS )NzRemove-Variable CondaModuleArgsr(   r=   r(   r(   r)   r`   ,  s    z#PowerShellActivator._hook_postamble)N)r   r   r   r*   r[   r`   r-  r(   r(   r$  r)   r=     s   r=  c                       sB   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Zdd Z  Z	S )JSONFormatMixinzPReturns the necessary values for activation as JSON, so that tools can use them.Nc                    s&   t | _d | _t | _tt| | d S r    )r{   r   rT   rB   r#  r>  r*   r%   r$  r(   r)   r*   3  s    zJSONFormatMixin.__init__c                 C   s6   t jrttjddtt jdS t jddt jt jdS d S )Nz-mr   )r)  r*  _CE_M	_CE_CONDA_CONDA_ROOT
_CONDA_EXErA   )r*  r?  r@  rA  rB  )r   r   r   r   r5  r   r4  r   r=   r(   r(   r)   r[   :  s    
zJSONFormatMixin._hook_preamblec                 K   s@   | j f |\}}d  }}|r(t| }|r0|}|p6i |p<g fS r    )r6   dictr+   rC   r(   r(   r)   rD   M  s    z-JSONFormatMixin.get_scripts_export_unset_varsc              	   C   sp   i }|D ]}| | q|}|d kr2tj|ddS |rftd|dd}tj||dd W 5 Q R X |jS t d S )N   )indentrE   FrF   )r   r   dumpsr   dumpr4   rJ   )r&   rK   rL   ZmergedZ_cmdsrM   r(   r(   r)   rN   V  s    zJSONFormatMixin._finalizec                 c   s   | di }| di }d|krD| dg }||d ||d< ||| dd| di d| dd| d	dd
dV  d S )Nr   r3   r   r2   r(   r   )ZexportZunsetsetr   r   )rU   rW   )r   varsZscripts)r   r0   r   )r&   r   r   r3   r   r(   r(   r)   rS   g  s    



zJSONFormatMixin._yield_commands)N)
r   r   r   __doc__r*   r[   rD   rN   rS   r-  r(   r(   r$  r)   r>  0  s   	r>  )posixZashr  ZdashZzshZcshZtcshZxonshzcmd.exer<  Z
powershellr   c                 C   sZ   |  d}|d |dd  }}t| g}|D ]}|t|  q.ttdt|i }|S )a  Construct the activator class dynamically from a base activator and any
    number of formatters, appended using '+' to the name. For example,
    `posix+json` (as in `conda shell.posix+json activate`) would use the
    `PosixActivator` base class and add the `JSONFormatMixin`.+r   r   NZ	Activator)r   activator_mapr,   formatter_maptyper   rj   )r!  Z	shell_etcZ	activatorZ
formattersbasesr   clsr(   r(   r)   _build_activator_cls  s    

rR  )<Z
__future__r   r   r   r   r  r   r   r"   os.pathr   r   r	   r
   r   r   r   r   r   r   textwrapr   rA   r   r   Z_vendor.toolzr   r   Zauxlib.compatr   Zbase.constantsr   r   r   Zbase.contextr   r   r   Zcommon.compatr   r   r  r   objectr   r   r   r   r  r  r  r.  r6  r:  r;  r=  r>  rM  rN  rR  r(   r(   r(   r)   <module>   s`   (     H	6	41))0Q 