B
    '\/              
   @   sd  d dl mZmZmZmZ d dlmZ d dlZd dlm	Z	 d dl
Z
d dlmZmZmZmZ d dlZd dlZddlmZmZ dd	lmZmZ dd
lmZmZmZmZmZ 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)m*Z* ddl+m,Z, e	e-Z.dd Z/ddddhZ0e0dddddddddh	B Z1dd  Z2d!d" Z3d#d$ Z4d.d&d'Z5d(d) Z6d*d+ Z7d,d- Z8dS )/    )absolute_importdivisionprint_functionunicode_literals)OrderedDictN)	getLogger)exists
expanduserisfilejoin   )print_envs_liststdout_json   )CONDA_PACKAGE_ROOT__version__)conda_in_private_envcontextenv_namesys_rc_pathuser_rc_path)	iteritems
itervalueson_win	text_type)mask_anaconda_token)all_channel_urlsoffline_keep)	MatchSpec)human_bytesc           
      s   g } yt sRttdrtd}xxttdD ]}||r0| d|  q0W nHdtj	kr`| S tj	t
d  tt dr fddtt d	D } W n2 ttfk
r } ztd
| W d d }~X Y nX | S )Nz~/.local/libzpython\d\.\dz~/.local/lib/z~/.local/lib/%sAPPDATAPythonc                s   g | ]}t  d |qS )r!   )r   ).0i)r     2lib/python3.7/site-packages/conda/cli/main_info.py
<listcomp>(   s    z!get_user_site.<locals>.<listcomp>PYTHONz'Error accessing user site directory.
%r)r   r   r	   recompileoslistdirmatchappendenvironstrr   IOErrorOSErrorlogdebug)	site_dirsZ	python_repather$   )r    r%   get_user_site   s"    



r7   filesZauthZpreferred_envZprioritynameversionbuildbuild_numberchannelZschannelsizefndependsc             C   s   dd t |  D S )Nc             S   s   i | ]\}}|t kr||qS r$   )IGNORE_FIELDS)r"   kvr$   r$   r%   
<dictcomp>6   s    zdump_record.<locals>.<dictcomp>)r   dump)pkgr$   r$   r%   dump_record5   s    rG   c             C   s
  t | }td| jfd|d fd|d fd|d fd|d fdt| jfd	t|d	 fg}x(tt| t	 D ]}|| ||< qpW t
d
 d|d |d |d f }t
| t
dt|  x |D ]}t
d||| f  qW t
d x|d D ]}t
d|  qW d S )Nz	file namer9   r:   zbuild stringr;   zbuild numberr<   r=   r>    z%s %s %s-z	%-12s: %szdependencies:r@   z    %s)rG   r   r?   r   r=   r   sortedsetkeysSKIP_FIELDSprintlen)precrF   dkeyheaderZdepr$   r$   r%   pretty_package9   s(    




rT   c                s   ddl m} i  x&| D ]}t|}t|| |< qW tjrVt fdd| D  n(x&t D ]}x|D ]}t	| qjW q`W t
dtjd d S )Nr   )
SubdirDatac                s   i | ]} | |qS r$   r$   )r"   package)resultsr$   r%   rD   [   s    z&print_package_info.<locals>.<dictcomp>zcWARNING: 'conda info package_name' is deprecated.
          Use 'conda search package_name --info'.)file)Zcore.subdir_datarU   r   tupleZ	query_allr   jsonr   r   rT   rN   sysstderr)packagesrU   rV   specresultrP   r$   )rW   r%   print_package_infoS   s    

r`   Fc             C   s  yddl m} W nx tk
r`   yddlm} W n* tk
rZ } zd| }W d d }~X Y nX Y n* tk
r } zd| }W d d }~X Y nX yddlm} W n tk
r   d}Y nX ydd l}W nB tk
r   d}Y n2 tk
r } zd| }W d d }~X Y nX |j}ttt	j
}t	js.dd |D }dd |D }td	d
 t	 D }tjd}|sztd}	t|	rz|	}tt	j}
tt	jt||t	jt	jt t	jt	jt	jt	jt	j|
t	j|t t t!t	j"g d#t$t%t&j'|t	j(t)||d}t*rddl+m,} | |d< nt- |d< t. |d< dddh}|/dd
 tjD  |/dd
 tjD  |/dd
 tjD  |/dd
 tjD  dd |D }dd
 tjD }|/dd |D  |/t&j0t&j1t&j2t3 |d |S ) Nr   )r   zError %rznot installedzError %sc             S   s    g | ]}|t |rd nd qS )rH   z  (offline))r   )r"   cr$   r$   r%   r&      s   z!get_info_dict.<locals>.<listcomp>c             S   s   g | ]}t |qS r$   )r   )r"   ra   r$   r$   r%   r&      s    c             s   s   | ]}|d kr|V  qdS ))ZenvvarsZcmd_lineNr$   )r"   r5   r$   r$   r%   	<genexpr>   s    z get_info_dict.<locals>.<genexpr>ZNETRCz~/.netrc.)platformconda_versionconda_env_versionconda_build_versionroot_prefixconda_prefixZconda_privateroot_writable	pkgs_dirs	envs_dirsdefault_prefixactive_prefixactive_prefix_nameconda_shlvlchannelsr   Zrc_pathr   offlineenvspython_versionrequests_version
user_agentconda_locationconfig_files
netrc_filer   )is_admin_on_windowsis_windows_adminUIDGIDZCIO_TESTZREQUESTS_CA_BUNDLEZSSL_CERT_FILEc             s   s    | ]}|  d r|V  qdS )ZCONDAN)upper
startswith)r"   rC   r$   r$   r%   rb      s    c             s   s    | ]}|  d r|V  qdS )r'   N)r~   r   )r"   rC   r$   r$   r%   rb      s    c             s   s    | ]}|  d r|V  qdS )PATHN)r~   endswith)r"   rC   r$   r$   r%   rb      s    c             s   s    | ]}|  d r|V  qdS )ZSUDON)r~   r   )r"   rC   r$   r$   r%   rb      s    c          	   S   s&   i | ]}t |t | d |qS )z	<not set>)r*   getenvlower)r"   evr$   r$   r%   rD      s    z!get_info_dict.<locals>.<dictcomp>c             s   s    | ]}|  d r|V  qdS )ZPROXYN)r~   r   )r"   rC   r$   r$   r%   rb      s    c             S   s   i | ]
}d |qS )z<set>r$   )r"   r   r$   r$   r%   rD      s    )zsys.versionz
sys.prefixzsys.executabler4   env_vars)4Zrequestsr   ImportErrorZpip._vendor.requests	ExceptionZ	conda_envconda_buildlistr   r   rq   rZ   rY   Zcollect_allr*   r.   getr	   r
   r   rn   dictZsubdirre   rh   ri   r   rj   rk   rl   rm   Zshlvlr   r   rr   r   mapr/   r[   version_inforv   r   r   Zcommon.os.windowsrz   geteuidgetegidupdater:   prefix
executabler7   )systemru   r6   rf   r   rg   rq   rx   ry   Z
user_netrcro   	info_dictrz   Zenv_var_keysr   Z
proxy_keysr$   r$   r%   get_info_dictf   s    



r   c       	      C   s   ddl m} g }|dd  | di }xzt|D ]n}||| }t|rT|d nd}t|dkrp|dd  nd}|d	||f  x|D ]}|d
|  qW q4W d|S )Nr   )wrapz%23s:zenvironment variablesr   rH   r   r$   z%25s=%sz                          
)textwrapr   r-   r   rJ   rO   r   )	r   r   builderr   rR   valueZ
first_lineZother_linesvalr$   r$   r%   get_env_vars_str   s    
r   c             C   s  x"dD ]}d | | | d| < qW | d r0dnd| d< dd	 }d
g}| d rx||d| d  ||d| d  n||d| d  | d dkr||d| d  ||d| d |d| d |d| d |d| d |d| d |dd| d | d f |d| d  |d!| d" |d#| d$ |d%| d% |d&| d' f trb||d(| d)  n ||d*d+| d, | d- f  ||d.| d/ |d0| d1 f |d
 d2 |S )3N)rk   rl   rq   rx   z
                          _rj   writablez	read onlyZ_rtwroc             S   s   d| |f S )Nz	%23s : %sr$   )Znmr   r$   r$   r%   <lambda>       z#get_main_info_str.<locals>.<lambda>rH   ro   zactive environmentzactive env locationrn   rp   r   zshell levelzuser config filer   zpopulated config filesZ_config_fileszconda versionre   zconda-build versionrg   zpython versionrt   zbase environmentz%s  (%s)rh   zchannel URLsZ	_channelszpackage cacheZ
_pkgs_dirszenvs directoriesZ
_envs_dirsrd   z
user-agentrv   Zadministratorr{   zUID:GIDz%s:%sr|   r}   z
netrc filery   zoffline moderr   r   )r   r-   extendr   )r   rR   Zformat_paramr   r$   r$   r%   get_main_info_str   s@    
 
r   c          
      s   j r0tjrtdtji ntdtj d S  jrddlm	} yt
 j d S  |k
r } zddlm} ||jW d d }~X Y nX  jrtjstdtj nttdtji dS d	} jstjrx|D ]}t |d
 qW t j} jst fdd|D r<tjs<td}|t| |d  jrlddlm}	 |	 |d< t|d tj   jrtjsddlm}
m} tdtj d d   tdtj!  tdtj"  td|d   x4t#t$|
 d D ]}td||d| f  qW tddd |d }|r,t|d  ntd x"|dd  D ]}td|  qBW td x.t#t%|d  D ]\}}td!||f  qrW td tjrt| d S )"Nrh   z{}r   )ResolvePackageNotFound)PackagesNotFoundErrorr   rq   r   )rs   r   Tc             3   s   | ]}t  | V  qd S )N)getattr)r"   Zopt)argsr$   r%   rb   2  s    zexecute.<locals>.<genexpr>zconda.stdoutlog)list_all_known_prefixesrs   r   )find_commandsfind_executablezsys.version: %s...(   zsys.prefix: %szsys.executable: %szconda location: %srw   )r;   zconda-%s: %szconda-zuser site dirs: rH   )endr4   z                %sr   z%s: %s)&baser   rZ   r   rh   rN   formatr]   Zresolver   r`   
exceptionsr   Zbad_depsZunsafe_channelsr   rq   dumpsallsetattrr   r   r   infor   rs   Zcore.envs_managerr   r   r   r   r[   r:   r   r   rJ   rK   r   )r   parserr   r6   r   ZoptionsZoptionr   Zstdout_loggerr   r   r   cmdr4   Zsite_dirr9   r   r$   )r   r%   execute  sj    


(

r   )F)9Z
__future__r   r   r   r   collectionsr   rZ   Zloggingr   r*   os.pathr   r	   r
   r   r(   r[   commonr   r   rH   r   r   re   Zbase.contextr   r   r   r   r   Zcommon.compatr   r   r   r   Z
common.urlr   Zmodels.channelr   r   Zmodels.match_specr   Zutilsr   __name__r2   r7   rA   rM   rG   rT   r`   r   r   r   r   r$   r$   r$   r%   <module>   s6   

o/