a
    ϑ`                     @   s  d dl mZmZ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mZ d dlZd dlZd dlZd dlZd dlZd dlZzd dlmZ W n ey   d dlmZ Y n0 ddlmZmZ dd	lmZ dd
lmZm Z  ddl!m"Z"m#Z# e$dZ%dd Z&dd Z'dZ(dej)v r0edej)d Z*ee*j+e(Z,neddZ*e'de( Z,ddddddZ-dddd d!d"Z.e*j/Z0e'd#Z1e1Z2d$Z3i d%ddd%d&d'Z4g d(Z5de*j6d)d*e*j+d+d,fZ7d-d. Z8e*j+eee,d/gZ9e9d0 Z:d1d2 Z;d3d4 Z<d5d6 Z=d7d8 Z>d9d: Z?dAd;d<Z@d=d> ZAdBd?d@ZBdS )C    )print_functionabsolute_importunicode_literalsN)existsjoindirnameisfileisdirabspath
expanduser)Template)
quote_plus   )AppDirs
EnvAppDirs   )RepoCLIError)CONDA_PREFIX
CONDA_ROOT)	yaml_load	yaml_dumpZrepo_clic                 C   s,   t ttd}|tj t| jf i |S )N)r   r   )dictr   r   updateosenvironr   Zsafe_substitute)pathr    r   4lib/python3.9/site-packages/repo_cli/utils/config.py
expandvars   s    r   c                 C   s   t tt| S N)r
   r   r   r   r   r   r   expand"   s    r!   zrepo-cli-config.yamlZREPO_CONFIG_DIRz.condaZbinstarZContinuumIOz	~/.conda/ZEnvironmentZNotebookzConda PackagezPython PackagezAnaconda Project)envipynbcondapypiprojectZconda1Zanaconda_envZjupyter_notebookZanaconda_projectZbdist_wheel)r$   r"   r#   r&   r%   z+$CONDA_ROOT/etc/anaconda-client/config.yamlzrepo-service-cliTF)sitesauto_registerdefault_siteurl
ssl_verifyoauth2)r(   r)   r'   r*   r+   r,   z/etc/anaconda-client/z $CONDA_ROOT/etc/anaconda-client/z~/.continuum/anaconda-client/z"$CONDA_PREFIX/etc/anaconda-client/c                 C   sJ   |  D ]<\}}t|tjr8t| |i |}|| |< q|| | |< q| S r   )items
isinstancecollectionsMappingrecursive_updateget)configZupdate_dictZ
update_keyZupdated_valueZupdated_value_dictr   r   r   r1   j   s    
r1   tokensc              	   C   sb  t |o
|jd}tD ]F}|d}t|s6t| t|dt| }t	|rZt
| td|  d|  t|d0}td|  d|  ||  W d    n1 s0    Y  t|tjtjB  t|dtt|d }td|  d|  t|d0}td|  d|  ||  W d    n1 s>0    Y  t|tjtjB  qd S )Nsiter*   %s.tokenzSaving token z to wrepo)
get_configr7   
TOKEN_DIRSr2   r	   r   makedirsr   r   r   unlinkloggerdebugopenwritechmodstatS_IWRITES_IREAD)tokenargsr3   	token_dirr*   	tokenfilefdr   r   r   store_token|   s&    



(*rL   c              	   C   s   t | d}|d}|s&td d S tD ]}tdj|d t|dt| }t|}|rtd| t	|}|
  }W d    n1 s0    Y  |r|  S td| td	| t| q*td
j|d q*d S )Nr6   r*   zARepository URL is not set. Please configure. Skipping token checkz-[LOAD TOKEN] Looking for token in {token_dir})rI   r8   z"[LOAD TOKEN] Found login token: {}zToken file is empty: {}zRemoving file: {}z.[LOAD TOKEN] Token file {tokenfile} not found.)rJ   )r;   r2   r?   r@   r<   formatr   r   r   rA   readstripr   r>   )r7   r3   r*   rI   rJ   Z_is_filerK   rG   r   r   r   
load_token   s&    



*rP   c                 C   sv   t | o
| jd}|d}tD ]R}t|dt| }t|rFt| t|dtt|d }t|rt| qd S )Nr6   r*   r8   r:   )	r;   r7   r2   r<   r   r   r   r   r>   )rH   r3   r*   rI   rJ   r   r   r   remove_token   s    

rQ   c                 C   sR   t | rNt| .}t|}|r0|W  d    S W d    n1 sD0    Y  i S r   )r   rA   r   )config_filerK   datar   r   r   load_config   s    
0rT   c                    s   dd }dd }t j|t j|idd  dd | D } fd	d
|D }fdd
t||D }tdd
 tj|D }|S )Nc                 s   s8   |  ds&|  ds&|  ds&J | | t| fV  d S )Nz.ymlz.yamlZ
anacondarc)endswithrT   )fullpathr   r   r   _file_yaml_loader   s    &z,load_file_configs.<locals>._file_yaml_loaderc                 s   s4   t | D ]$}|tkr
t| |}|t|fV  q
d S r   )r   listdirCONFIG_FILENAMEr   rT   )rV   filenamefilepathr   r   r   _dir_yaml_loader   s    
z+load_file_configs.<locals>._dir_yaml_loaderc                 S   s.   zt t | jW S  ty(   Y d S 0 d S r   )rD   S_IFMTr   st_modeOSErrorr    r   r   r   _get_st_mode   s    z'load_file_configs.<locals>._get_st_modec                 S   s   g | ]}t |qS r   )r!   .0r   r   r   r   
<listcomp>       z%load_file_configs.<locals>.<listcomp>c                 3   s   | ]} |V  qd S r   r   ra   )r`   r   r   	<genexpr>   rd   z$load_file_configs.<locals>.<genexpr>c                 3   s&   | ]\}}|d ur | |V  qd S r   r   )rb   r   r^   )_loaderr   r   re      s   c                 s   s   | ]
}|V  qd S r   r   )rb   Zkvr   r   r   re      rd   )	rD   S_IFREGS_IFDIRzipr/   OrderedDict	itertoolschainfrom_iterable)search_pathrW   r\   Zexpanded_pathsZ
stat_pathsZ
load_pathsraw_datar   )r`   rf   r   load_file_configs   s    
rp   c                 C   sz   t  }tt}|D ]}t|||  q| p4|d} |di }| rvt| } | |vrdtd|  nt||| i  |S )Nr)   r'   z1Site alias "%s" does not exist in the config file)	DEFAULT_CONFIGcopyrp   SEARCH_PATHr1   r2   strr?   Zwarning)r7   r3   Zfile_configsfnr'   r   r   r   r;      s    r;   c              
   C   s   t |}zLt|st| t|d}t| |d W d    n1 sH0    Y  W n8 ty } z td|j|j	f W Y d }~n
d }~0 0 d S )Nr9   )streamz%s: %s)
r   r   r   r=   rA   r   EnvironmentErrorr   rZ   strerror)rS   rR   Zdata_dirrK   excr   r   r   save_config  s    
.rz   c                 C   s"   t dt t| |rtnt d S )Nz%Use save_config instead of set_config)warningswarnDeprecationWarningrz   USER_CONFIGSYSTEM_CONFIG)rS   userr   r   r   
set_config  s    r   )N)T)CZ
__future__r   r   r   sysZos.pathr   r   r   r   r	   r
   r   stringr   r/   loggingr   rD   r{   rk   Zurllibr   ImportErrorurllib.parseZappdirsr   r   errorsr   r$   r   r   Zyamlr   r   Z	getLoggerr?   r   r!   rY   r   dirsZuser_data_dirr~   ZPACKAGE_TYPESZUPLOAD_TYPE_MAPPINGZuser_log_dirZUSER_LOGDIRZSITE_CONFIGr   ZOIDC_CLIENT_IDrq   ZCONFIGURATION_KEYSZsite_data_dirrs   r1   r<   Z	TOKEN_DIRrL   rP   rQ   rT   rp   r;   rz   r   r   r   r   r   <module>   s   $

		


"
