B
    T[-                 @   s"  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 d dlZd dlZd dlZd dlZd dlZd dlZyd dlmZ W n  ek
r   d dlmZ Y nX 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" e#dZ$dd Z%dd Z&dej'kr(eddej'd Z(ee(j)dZ*neddZ(e&dZ*dddddZ+e(j,Z-e&dZ.e.Z/dZ0de0ide0iddde0ddZ1dd d!d"dd#d$gZ2e(j3d%d&e(j)d'd(fZ4d)d* Z5dAd+d,Z6dBd-d.Z7e(j)eee*d/gZ8e8d0 Z9d1d2 Z:d3d4 Z;d5d6 Z<d7d8 Z=d9d: Z>dCd;d<Z?d=d> Z@dDd?d@ZAdS )E    )print_functionabsolute_importunicode_literals)existsjoindirnameisfileisdirabspath
expanduser)TemplateN)
quote_plus)CONDA_PREFIX
CONDA_ROOT)AppDirs
EnvAppDirs)BinstarError   )	yaml_load	yaml_dumpbinstarc             C   s(   t ttd}|tj t| jf |S )N)r   r   )dictr   r   updateosenvironr   Zsafe_substitute)pathr    r   Zlib/python3.7/site-packages/anaconda_client-1.7.2-py3.7.egg/binstar_client/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BINSTAR_CONFIG_DIRZContinuumIOzconfig.yamlz(~/.continuum/anaconda-client/config.yamlZEnvironmentZNotebookzConda PackagezPython Package)envZipynbZcondaZpypiz+$CONDA_ROOT/etc/anaconda-client/config.yamlzhttps://api.anaconda.orgurl)Zanacondar   T)sitesauto_registerdefault_siter!   
ssl_verifyr#   r$   Zupload_userr"   
verify_sslr%   z/etc/anaconda-client/z $CONDA_ROOT/etc/anaconda-client/z~/.continuum/anaconda-client/z"$CONDA_PREFIX/etc/anaconda-client/c             C   sN   xH|  D ]<\}}t|tjr:t| |i |}|| |< q
|| | |< q
W | S )N)items
isinstancecollectionsMappingrecursive_updateget)configZupdate_dictZ
update_keyZupdated_valueZupdated_value_dictr   r   r   r+   Z   s    
r+   c             K   s   |sddl m} |}|dk	r |nt|d}|dt}td| | rRtd nHdtj	krrtd	 tj	d } n(d
tj	krtd tj	d
 } nt
|} |d|dd}|| f||d|S )z+
    Get the anaconda server api class
    r   )BinstarN)siter!   zUsing Anaconda API: %sz"Using token from command line argsZBINSTAR_API_TOKENz7Using token from environment variable BINSTAR_API_TOKENZANACONDA_API_TOKENz8Using token from environment variable ANACONDA_API_TOKENr%   r&   T)Zdomainverify)Zbinstar_clientr.   
get_configr,   DEFAULT_URLloggerinfodebugr   r   
load_token)tokenr/   clsr-   kwargsr.   r!   r0   r   r   r   get_server_apie   s"    



r:   c             C   sF   t dt t| dd}t| dtj}t| dd}t||||d}|S )z6
    DEPRECATED METHOD,

    use `get_server_api`
    z=method get_binstar is deprecated, please use `get_server_api`r7   N	log_levelr/   )r7   r/   r;   r8   )warningswarnDeprecationWarninggetattrloggingINFOr:   )argsr8   r7   r;   r/   Zaserver_apir   r   r   get_binstar   s    rC   tokensc          
   C   s   t |o
|jd}xtD ]z}|dt}t|s8t| t|dt	| }t
|r\t| t|d}||  W d Q R X t|tjtjB  qW d S )N)r/   r!   z%s.tokenw)r1   r/   
TOKEN_DIRSr,   r2   r	   r   makedirsr   r   r   unlinkopenwritechmodstatS_IWRITES_IREAD)r7   rB   r-   	token_dirr!   	tokenfilefdr   r   r   store_token   s    


rS   c          
   C   s   xt D ]}t|dt|  }t|rtd| t|}| 	 }W d Q R X |r\|S td| td| t
| qW d S )Nz%s.tokenzFound login token: {}zToken file is empty: {}zRemoving file: {})rG   r   r   r   r3   r5   formatrJ   readstripr   rI   )r!   rP   rQ   rR   r7   r   r   r   r6      s    

r6   c             C   sR   t | o
| jd}|dt}x0tD ](}t|dt| }t|r"t	| q"W d S )N)r/   r!   z%s.token)
r1   r/   r,   r2   rG   r   r   r   r   rI   )rB   r-   r!   rP   rQ   r   r   r   remove_token   s    
rW   c          	   C   s0   t | r,t| }t|}|r"|S W d Q R X i S )N)r   rJ   r   )config_filerR   datar   r   r   load_config   s    
rZ   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&t| | t| fV  d S )Nz.ymlz.yamlZ
anacondarc)endswithAssertionErrorrZ   )fullpathr   r   r   _file_yaml_loader   s    &z,load_file_configs.<locals>._file_yaml_loaderc             s   sD   x>t | D ]0}|ds$|drt| |}|t|fV  qW d S )Nz.ymlz.yaml)r   listdirr[   r   rZ   )r]   filenamefilepathr   r   r   _dir_yaml_loader   s    
z+load_file_configs.<locals>._dir_yaml_loaderc             S   s,   yt t | jS  tk
r&   d S X d S )N)rM   S_IFMTr   st_modeOSError)r   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>   s    z%load_file_configs.<locals>.<listcomp>c             3   s   | ]} |V  qd S )Nr   )rg   r   )rf   r   r   	<genexpr>   s    z$load_file_configs.<locals>.<genexpr>c             3   s&   | ]\}}|d k	r | |V  qd S )Nr   )rg   r   rd   )_loaderr   r   ri      s   c             s   s   | ]
}|V  qd S )Nr   )rg   Zkvr   r   r   ri      s    )	rM   S_IFREGS_IFDIRzipr)   OrderedDict	itertoolschainfrom_iterable)search_pathr^   rb   Zexpanded_pathsZ
stat_pathsZ
load_pathsZraw_datar   )rf   rj   r   load_file_configs   s    

rs   c             C   s~   t  }tt}x|D ]}t|||  qW | p8|d} |di }| rzt| } | |krhtd|  nt||| i  |S )Nr$   r"   z1Site alias "%s" does not exist in the config file)	DEFAULT_CONFIGcopyrs   SEARCH_PATHr+   r,   strr3   Zwarning)r/   r-   Zfile_configsfnr"   r   r   r   r1      s    
r1   c          
   C   s|   t |}y8t|st| t|d}t| |d W d Q R X W n6 tk
rv } ztd|j|j	f W d d }~X Y nX d S )NrF   )streamz%s: %s)
r   r   r   rH   rJ   r   EnvironmentErrorr   r`   strerror)rY   rX   Zdata_dirrR   excr   r   r   save_config  s    
r}   c             C   s"   t dt t| |rtnt d S )Nz%Use save_config instead of set_config)r<   r=   r>   r}   USER_CONFIGSYSTEM_CONFIG)rY   userr   r   r   
set_config  s    r   )NNNN)NN)N)T)BZ
__future__r   r   r   os.pathr   r   r   r   r	   r
   r   stringr   r)   r@   r   rM   r<   ro   Zurllibr   ImportErrorZurllib.parseZbinstar_client.utils.condar   r   Zbinstar_client.utils.appdirsr   r   Zbinstar_client.errorsr   Zyamlr   r   Z	getLoggerr3   r   r   r   dirsZuser_data_dirr~   ZPACKAGE_TYPESZuser_log_dirZUSER_LOGDIRZSITE_CONFIGr   r2   rt   ZCONFIGURATION_KEYSZsite_data_dirrv   r+   r:   rC   rG   Z	TOKEN_DIRrS   r6   rW   rZ   rs   r1   r}   r   r   r   r   r   <module>   s   $






"
