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m	Z	 d dl
Z
d dlmZm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mZ ddlmZmZmZmZmZ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)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3 dd Z4dd Z5dd Z6dd Z7dd Z8dS )    )absolute_importdivisionprint_functionunicode_literals)OrderedDictN)	getLogger)isfilejoin)wrap   )
CondaError)EntityEncoder)concatgroupby)ChannelPriorityDepsModifierPathConflictSafetyChecksUpdateModifierSatSolverChoice)contextsys_rc_pathuser_rc_path)MappingSequence
isiterable	iteritems
itervaluesstring_types	text_type)pretty_list
pretty_map)timeout)yaml	yaml_dump	yaml_loadc          
   C   sN   ddl m} yt| | W n. |tfk
rH } zt|W d d }~X Y nX d S )Nr   )CouldntParseError)
exceptionsr&   execute_configNotImplementedErrorr   )argsparserr&   e r-   4lib/python3.7/site-packages/conda/cli/main_config.pyexecute   s
    r/   c             C   s   g }xt | D ]\}}t|trR|rB|d|  |t| q|d|  qt|r|r||d|  |t| q|d|  q|d||d k	r|ndf  qW |S )Nz%s:z%s: {}z%s: []z%s: %sNone)r   
isinstancer   appendr!   r   r    )dlineskvr-   r-   r.   format_dict#   s    
"r7   c             C   s@  g }t | }|d }|d}|d }tj|d td}|d dkrr|d| d	tt	d
d |D f  n0|d| |d d	tt	dd |D f  |r|dd	|  |r|d|  |
dd t|d dD  |d dd |D }|
t| t|i d dd |D }|d |S )Naliasesstring_delimiterelement_typesZdefault_value)clsparameter_type	primitivez%s (%s)z, c             s   s   | ]
}|V  qd S )Nr-   ).0etr-   r-   r.   	<genexpr>@   s    z0parameter_description_builder.<locals>.<genexpr>z%s (%s: %s)c             s   s   | ]
}|V  qd S )Nr-   )r>   r?   r-   r-   r.   r@   C   s    z  aliases: %sz   env var string delimiter: '%s'c             s   s   | ]}d | V  qdS )z  Nr-   )r>   liner-   r-   r.   r@   J   s    ZdescriptionF    c             S   s   g | ]}d | qS )z# r-   )r>   rA   r-   r-   r.   
<listcomp>M   s    z1parameter_description_builder.<locals>.<listcomp>
c             S   s   g | ]}d | qS )z# r-   )r>   rA   r-   r-   r.   rD   Q   s    )r   describe_parametergetjsondumpsr   r2   r	   sortedsetextendr
   r$   loadsstripsplit)namebuilderZdetailsr8   r9   r:   Zdefault_value_strr-   r-   r.   parameter_description_builder7   s*    

,"
"
rR   c              C   s   g } d}xpt tjD ]b\}}||kr&q| d | d| | d | d | tdd |D  | d qW d| S )N)zCLI-onlyzHidden and Undocumentedz8# ######################################################z# ## {:^48} ##rC   c             s   s   | ]}t |V  qd S )N)rR   )r>   rP   r-   r-   r.   r@   `   s   z*describe_all_parameters.<locals>.<genexpr>rE   )r   r   category_mapr2   formatrL   r   r	   )rQ   skip_categoriescategoryparameter_namesr-   r-   r.   describe_all_parametersV   s    


rX   c       -   
      s	  t dj}t dj}g }i }| jrtjrD|tjt dddd nRg }x>tt D ].\}}|d|  |	t
| |d qVW |d	| d S | jd k	r| jr| j}	t }
t|	t|
 }|rdd
lm} ddlm  |d | nt }	tdd |	D }tjr4|tj|dddtd njd|krXdd t|d D |d< d|krddlm   fddt|d D |d< |d	t
| t  d S | jd k	r| jrb| j}	t }
t|	t|
 }|r
dd
lm} ddlm  |d | tjr6|tjdd |	D dddtd n*g }|	tdd |	D  |d	| nZtjrdttfddtj D }	|tjdd |	D dddtd n
|t  d S | jrt  d S | jrt }n@| j!rdt"j#krtt"j#d d}nt$}n| j%r| j%}nt$}| j&rt'|rft(|}|) * }W d Q R X |rft+d| t(|d}|,t  W d Q R X d S t"j-.|rt(|d}t/|pi }W d Q R X ni }t0d d! t }|d" }|d# }|d$ }| j1d k	rPt  | j1g krt|2 | _1x0| j1D ]$}||| krbd%| }tjsT|| n
|| q&||krpq&tjr|| ||< q&t3|| t4t5t6fr|d&d'|t7|| f n|1|g }t8|}xxt9t:|D ]h\}|d(kr,|d)|d* fkr,|d&d+|t;|d)kr d,nd-f n|d&d+|t;f qW q&W | j<rt=d.t>j<j)}|spd S yt/|}|?| W n. t@k
r   dd/lmA} |d0| Y nX xHtB| jC| jfd1D ]0\}} x"|D ]\}|d(kr||krd2g||< ||kr(dd3lmD}! |!d4| t3|1|g tErPt3|1|g t6rxdd5lmF}" || jGjH}#|"d6||#f |I|g }$|$krd7|| rd8nd9f }fd:d|$D  }$||< tjs|| n
|| |$J| rd)nt8|$ qW qW x| jD ]\}d;|kr(|Kd;d*n|d f\}}%||krTtL|}&|&||< n8||krt|I|i }'|'|%< ndd3lmD}! |!d<| q
W x| jMD ]\}d;|kr|Kd;d*n|d f\}}%||kr|d(krdd=lmN}( |(|d>| d2g||< || kr(dd=lmN}( |(|d?|f fd@d|| D ||< qW x^| jOD ]T\}d;|krl|Kd;d*n|d f\}}%||krdd=lmN}( |(|d>| ||= qPW | j1	szdAdB })tPjQjRStT|) tPjQjRStU|) tPjQjRStV|) tPjQjRStW|) tPjQjRStX|) tPjQjRStY|) y(t(|d}*|*,tZ| W d Q R X W n8 t[t\fk
	rx }+ zt+dC||+f W d d }+~+X Y nX tj	rd*dDl]m^}, |,|||dE d S )FNzconda.stdoutzconda.stderrTr   ),z: )	sort_keysindent
separatorsz
==> %s <==rC   rE   )ArgumentError)dashlistz$Invalid configuration parameters: %sc             s   s   | ]}|t t|fV  qd S )N)getattrr   )r>   keyr-   r-   r.   r@      s    z!execute_config.<locals>.<genexpr>)rZ   r[   r\   r;   Zcustom_channelsc             S   s    i | ]}d |j |jf |jqS )z%s://%s)ZschemelocationrP   )r>   Zchannelr-   r-   r.   
<dictcomp>   s   z"execute_config.<locals>.<dictcomp>Zcustom_multichannelsc                s   i | ]\}} |d d|qS )   )r[   r-   )r>   Zmultichannel_namechannels)r^   r-   r.   rb      s   c             S   s   g | ]}t |qS r-   )r   rF   )r>   rP   r-   r-   r.   rD      s    z"execute_config.<locals>.<listcomp>c             s   s   | ]}t |V  qd S )N)rR   )r>   rP   r-   r-   r.   r@      s   )zCLI-onlyzHidden and Undocumentedc             3   s   | ]\}}| kr|V  qd S )Nr-   )r>   rV   rW   )rU   r-   r.   r@      s    c             S   s   g | ]}t |qS r-   )r   rF   )r>   rP   r-   r-   r.   rD      s    ZCONDA_PREFIXz.condarczThe file '%s' already contains configuration information.
Remove the file to proceed.
Use `conda config --describe` to display default configuration.wrc             S   s   t | d S )Nr<   )r   rF   )pr-   r-   r.   <lambda>       z execute_config.<locals>.<lambda>r=   Zsequencemapzunknown key %s z--setrd   r      z--addz  # lowest priorityz  # highest priority   )
ParseErrorzinvalid yaml content:
%s)TFdefaults)CondaValueErrorz+Key '%s' is not a known sequence parameter.)r&   z key %r should be a list, not %s.z4Warning: '%s' already in '%s' list, moving to the %stopZbottomc                s   g | ]}| kr|qS r-   r-   )r>   rg   )itemr-   r.   rD   .  s    .z,Key '%s' is not a known primitive parameter.)CondaKeyErrorz key %r is not in the config filez*%r is not in the %r key of the config filec                s   g | ]}| kr|qS r-   r-   )r>   i)rr   r-   r.   rD   N  s    c             S   s   |  t|S )N)Zrepresent_strstr)Zdumperdatar-   r-   r.   enum_representer`  s    z(execute_config.<locals>.enum_representerz/Cannot write to condarc file at %s
Caused by %r)stdout_json_success)rc_pathwarningsrG   )_r   infoZshow_sourcesr   rH   rI   Zcollect_allr   r2   rL   r7   r	   ZshowZlist_parametersrK   r'   r]   	common.ior^   r   r   r   Zvalidate_configurationZdescriber   rJ   rS   itemsrX   ZvalidateZvalidate_allsystemr   envosenvironr   fileZwrite_defaultr   openreadrN   r   writepathexistsr%   r   rG   keysr1   boolintr   r   len	enumeratereversedreprstdinr"   sysupdate	Exceptionrn   zipprependrp   r   r&   	__class____name__
setdefaultinsertrO   Ztypify_parameterremovert   Z
remove_keyr#   ZrepresenterZRoundTripRepresenterZadd_representerr   r   r   r   r   r   r$   IOErrorOSErrorcommonry   )-r*   r+   Zstdout_writeZstderr_writeZjson_warningsZjson_getr4   sourceZreprsZparamater_namesZ	all_namesZ
not_paramsr]   r3   rQ   rz   Zfhrw   Z	rc_configZgrouped_paramatersZprimitive_parametersZsequence_parametersZmap_parametersr`   messager~   ZnumitemsqZcontentZparsedrn   argr   rp   r&   ZbadZarglistZsubkeyvalueZargmaprt   rx   Zrcr,   ry   r-   )r^   rr   rU   r.   r(   f   s   












$ 




&"



"


 "
r(   )9Z
__future__r   r   r   r   collectionsr   rH   Zloggingr   r   os.pathr   r	   r   textwrapr
   rC   r   Z_vendor.auxlib.entityr   Z_vendor.toolzr   r   Zbase.constantsr   r   r   r   r   r   Zbase.contextr   r   r   Zcommon.compatr   r   r   r   r   r   r   Zcommon.configurationr    r!   r}   r"   Zcommon.serializer#   r$   r%   r/   r7   rR   rX   r(   r-   r-   r-   r.   <module>   s*    $