
    =e~*              
         U 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d dlZd dl	Z	d dl
Z
d dlmZ d dlZd dlmZ 	 d dlmZ n# e$ r dZY nw xY w	 d dlmZ n# e$ r dZY nw xY wd dlmZ d dlmZmZ d dlmZ d	d
lmZmZ  ej        d          Zdej        v r7 eej        d                   Z ej!        "                    e j#        d          Z$nA edd          Z ej!        "                    ej!        %                    d          ddd          Z$ G d dej&                  Z'dddddZ(de)d<   e'j*        de'j+        de'j,        de'j-        de'j.        diZ/de)d<   e j0        Z1d e)d!<   ej!        "                    ej2        pd"d#dd          Z3d e)d$<   e3Z4d e)d%<   d&Z5d'e5id'e5id(d)de5d)d*Z6g d+Z7e j8        d,d-e j#        d.d/fZ9d0 Z:d@d1Z;dAd2Z<e j#        ej!        "                    ej!        =                    e$          d3          gZ>e>d4         Z?eI ej@                    ZAeAe>d          k    r. e
jB        d5eAd6e?d7eC           e>D                    d eA           d8 ZEd9 ZFd: ZGd; ZHd< ZIdBd=ZJd> ZKdCd?ZLdS )D    )annotationsN)
quote_plus)PlatformDirs)anaconda_client)BinstarError)condapaths)
EnvAppDirs   )	yaml_load	yaml_dumpbinstarBINSTAR_CONFIG_DIRzconfig.yamlContinuumIO~z
.continuumzanaconda-clientc                  h     e Zd ZdZdZdZdZdZdZdZ	dZ
edd            Zed fd            Z xZS )PackageTyper   envfileipynbpypirproject	installerreturnstrc                B    t                               | | j                  S N)PACKAGE_TYPE_LABELSgetvalue)selfs    ;lib/python3.11/site-packages/binstar_client/utils/config.pylabelzPackageType.label7   s    "&&tTZ888    r!   
typing.Anyc                    	  | t           |                   S # t          $ r$ t                                          |          cY S w xY wr   )PACKAGE_TYPE_ALIASESKeyErrorsuper	_missing_)clsr!   	__class__s     r#   r+   zPackageType._missing_;   sW    	,3+E2333 	, 	, 	,77$$U+++++	,s    +AA)r   r   )r!   r&   r   r   )__name__
__module____qualname__CONDAENVFILENOTEBOOKSTANDARD_PYTHON
STANDARD_RPROJECT	INSTALLERpropertyr$   classmethodr+   __classcell__)r-   s   @r#   r   r   -   s        E
CDHOJGI9 9 9 X9 , , , , , [, , , , ,r%   r   r   r   )PyPIstandard_pythoncran
standard_rz&typing.Final[typing.Mapping[str, str]]r(   EnvironmentNotebookCondazStandard Pythonz
Standard Rz.typing.Final[typing.Mapping[PackageType, str]]r   ztyping.Final[str]USER_LOGDIR/etcSITE_CONFIGSYSTEM_CONFIGzhttps://api.anaconda.orgurl)anacondar   T)sitesauto_registerdefault_siterH   
ssl_verify)rK   rL   upload_userrJ   rH   
verify_sslrM   z/etc/anaconda-client/z $CONDA_ROOT/etc/anaconda-client/z~/.continuum/anaconda-client/z"$CONDA_PREFIX/etc/anaconda-client/c                    |                                 D ]T\  }}t          |t          j                  r*t	          |                     |i           |          }|| |<   I||         | |<   U| S r   )items
isinstancetypingMappingrecursive_updater    )configupdate_dict
update_keyupdated_valueupdated_value_dicts        r#   rU   rU   v   sx    %0%6%6%8%8 9 9!
MmV^44 	9!1&**Z2L2Lm!\!\!3F:!,Z!8F:Mr%   c                j   |sddl m} |}||nt          |          }|                    dt                    }t
                              d|           | rt
                              d           ndt          j	        v r-t
                              d	           t          j	        d         } nJd
t          j	        v r-t
                              d           t          j	        d
         } nt          |          } |                    dd          }||                    dd          }|d} || f||d|S )z"Get the anaconda server api class.r   )BinstarNsiterH   zUsing Anaconda API: %sz"Using token from command line argsBINSTAR_API_TOKENz7Using token from environment variable BINSTAR_API_TOKENANACONDA_API_TOKENz8Using token from environment variable ANACONDA_API_TOKENrM   rO   T)domainverify)binstar_clientr\   
get_configr    DEFAULT_URLloggerinfodebugosenviron
load_token)tokenr^   r,   rV   kwargsr\   rH   rb   s           r#   get_server_apirn      s=    ******)VVzt/D/D/DF
**UK
(
(C
KK(#... 	 9::::	
	*	*NOOO
./		+	+OPPP
/03ZZd++F~L$//~3u:S::6:::r%   c                    t          j        dt                     t          | dd          }t          | dt          j                  }t          | dd          }t          ||||          }|S )z6
    DEPRECATED METHOD,

    use `get_server_api`
    z=method get_binstar is deprecated, please use `get_server_api`rl   N	log_levelr^   )rl   r^   rp   r,   )warningswarnDeprecationWarninggetattrloggingINFOrn   )argsr,   rl   rp   r^   aserver_apis         r#   get_binstarry      sr     MG  
 D'4((Ek7<88I4&&D u49RUVVVKr%   tokenszAconda and anaconda-client have conflicting token paths:
  conda: z
  anaconda-client: z=
to ensure consistent behavior, the conda path will be used.
c                   t          |o|j                  }|                    dt                    }t          1t
                              d           t	          j        ||            d S t          D ]}t          j
                            |          st          j        |           t          j
                            |dt          |          z            }t          j
                            |          rt          j        |           t#          |d          5 }|                    |            d d d            n# 1 swxY w Y   t          j        |t(          j        t(          j        z             d S )Nr]   rH   zUsing conda..set_binstar_token%s.tokenw)rd   r^   r    re   c_clientrf   rh   set_binstar_token
TOKEN_DIRSri   pathisdirmakedirsjoinr   isfileunlinkopenwritechmodstatS_IWRITES_IREAD)rl   rw   rV   rH   	token_dir	tokenfiler   s          r#   store_tokenr      st   T/di000F
**UK
(
(C5666"3... 	: 	:	w}}Y'' 	#K	"""GLLJC,HII	7>>)$$ 	!Ii   )S!! 	TJJu	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
DMDL89999	: 	:s   D==E	E	c                V   t           t                              d           |                     d          dz   }t          j                                                    D ]6\  }}|                    |                    d          dz             r|r|c S 7t          D ]
}t          j	        
                    |dt          |           z            }t          j	                            |          rt                              d|           t          |          5 }|                                                                }d d d            n# 1 swxY w Y   |r|c S t                              d|           t                              d|           t          j        |           d S )Nz Using conda..read_binstar_tokensrD   r}   zFound login token: %szToken file is empty: %szRemoving file: %s)r   rf   rh   rstripread_binstar_tokensrQ   
startswithr   ri   r   r   r   r   r   readstripr   )rH   url_cbinstar_urlrl   r   r   r   s          r#   rk   rk      s   7888

3#%"*">"@"@"F"F"H"H 	! 	!K 2 23 7 7# =>> ! ! LLL ! !	GLLJC,HII	7>>)$$ 
	!LL0)<<<i ,D		))++, , , , , , , , , , , , , , ,  LL2I>>>LL,i888Ii   4s   'EE	E	c                D   t          | o| j                  }|                    dt                    }t          D ]e}t
          j                            |dt          |          z            }t
          j        	                    |          rt          j
        |           fd S )Nr]   rH   r}   )rd   r^   r    re   r   ri   r   r   r   r   r   )rw   rV   rH   r   r   s        r#   remove_tokenr      s    T/di000F
**UK
(
(C ! !	GLLJC,HII	7>>)$$ 	!Ii   ! !r%   c                   i }d }	 t          |           5 }t          |          p|}d d d            n# 1 swxY w Y   n# t          j        $ r3 | dz   }t	          j        | |           d                    | |          }Y nPt          $ r d                    |           }Y n0t          $ r$}t          
                    |           Y d }~nd }~ww xY w|t          j        |           |S )Nz.bakz`Config file `{}` has invalid structure and couldn't be read. 
File content was backed up to `{}`zMNot enough rights to access config file `{}`! Please review file permissions.)r   r   yaml	YAMLErrorshutilcopyfileformatPermissionErrorOSErrorrf   	exceptionrq   rr   )config_filedatawarn_msgr   backup_fileerrors         r#   load_configr     s^   DH + 	+$T??*dD	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+> Y Y Y!F*[11188>{K8X8X 	 w w wbiijuvv        hKs9   ? 3? 7? 7? ?C C 	C)CCc                h   d }d }t           j        |t           j        |id t          t	          t
          j        |                     }fd|D             }fdt          ||          D             }t          j	        d t          j                            |          D                       }|S )Nc              3     K   |                      d          s4|                      d          s|                      d          s
J |             | t          |           fV  d S )N.yml.yaml
anacondarc)endswithr   )fullpaths    r#   _file_yaml_loaderz,load_file_configs.<locals>._file_yaml_loader  s      !!&)) 	\$$W--	\191B1B<1P1P	\ 	\S[	\ 	\ 	\H--------r%   c              3     K   t          j        |           D ]_}|                    d          s|                    d          r3t           j                            | |          }|t          |          fV  `d S )Nr   r   )ri   listdirr   r   r   r   )r   filenamefilepaths      r#   _dir_yaml_loaderz+load_file_configs.<locals>._dir_yaml_loader  s      
8,, 	6 	6H  (( 6H,=,=g,F,F 67<<(;;H 5 55555	6 	6r%   c                |    	 t          j        t          j         |           j                  S # t          $ r Y d S w xY wr   )r   S_IFMTri   st_moder   )r   s    r#   _get_st_modez'load_file_configs.<locals>._get_st_mode*  sD    	;rwt}}4555 	 	 	44	s   *- 
;;c              3  .   K   | ]} |          V  d S r    ).0r   r   s     r#   	<genexpr>z$load_file_configs.<locals>.<genexpr>2  sA         	T     r%   c              3  D   K   | ]\  }}| |         |          V  d S r   r   )r   r   r   _loaders      r#   r   z$load_file_configs.<locals>.<genexpr>6  sH        D' 	 r%   c              3     K   | ]}|V  d S r   r   )r   kvs     r#   r   z$load_file_configs.<locals>.<genexpr>;  s6       ' ' 	' ' ' ' ' 'r%   )r   S_IFREGS_IFDIRlistmapr	   	normalizezipcollectionsOrderedDict	itertoolschainfrom_iterable)	search_pathr   r   expanded_paths
stat_paths
load_pathsraw_datar   r   s	          @@r#   load_file_configsr     s   . . .
6 6 6 	'&G
   #eo{;;<<N   "  J    <<  J
 & ' '///
;;' ' '  H
 Or%   c                   t                                           }t          t                    }|D ]}t	          |||                    | p|                    d          } |                    di           }| rSt          |           } | |vrt                              d|            n$t	          ||                    | i                      |S )NrL   rJ   z1Site alias "%s" does not exist in the config file)	DEFAULT_CONFIGcopyr   SEARCH_PATHrU   r    r   rf   warning)r^   rV   file_configs	file_namerJ   s        r#   rd   rd   C  s      ""F$[11L! : :	i!89999-6::n--DJJw##E :4yyuNNNPTUUUU VUYYtR%8%8999Mr%   c                   	 t          j        t           j                            |          d           |dz   }t	          |d          5 }t          | |           d d d            n# 1 swxY w Y   t          j        ||           d S # t          t          j	        f$ r(}t          d                    |                    |d }~ww xY w)NT)exist_okr   r~   )streamz8Config file `{}` couldn't be saved! Changes may be lost.)ri   r   r   dirnamer   r   replacer   r   r   r   r   )r   r   	temp_filer   r   s        r#   save_configr   Y  s   
v
BGOOK004@@@@#%	)S!! 	+Vd6****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	
9k*****T^$ v v vU\\]hiijjpuuvs<   AB
 
A(B
 (A,,B
 /A,0B
 
C #CCc                v    t          j        dt                     t          | |rt          nt
                     d S )Nz%Use save_config instead of set_config)rq   rr   rs   r   USER_CONFIGrG   )r   users     r#   
set_configr   g  s5    M9;MNNNT<kk}=====r%   )NNNN)NNr   )T)M
__future__r   r   enumr   ru   ri   r   r   rS   rq   urllib.parser   r   platformdirsr   conda.gatewaysr   r   ImportErrorbinstar_client.errorsr   binstar_client.utilsr   r	   binstar_client.utils.appdirsr
   r   r   	getLoggerrf   rj   dirsr   r   user_config_dirr   
expanduserEnumr   r(   __annotations__r2   r4   r1   r5   r6   r   user_log_dirrC   
CONDA_ROOTrF   rG   re   r   CONFIGURATION_KEYSsite_data_dirr   rU   rn   ry   r   r   	TOKEN_DIR_get_binstar_token_directoryconda_token_dirrr   RuntimeWarninginsertr   rk   r   r   r   rd   r   r   r   r%   r#   <module>r      s   # " " " " " "           				     # # # # # #  % % % % % %:::::::   HHH:::::::   HHH / . . . . . - - - - - - - - 3 3 3 3 3 3 & & & & & & & &		9	%	%2:%%:bj!5677D',,t3]CCKK<	=11D',,rw11#66FWYfggK, , , , ,$) , , ,. @ @      O]*w!2LG      "&!2 2 2 2 2!#e.>.E#uN_an!o!o o o o o#. . . . .( K(;'  	 	    	&#(  ; ; ; ;B   * 	GLL--x88
 rN	;h;==O*Q-'' P_`i`i`ik 	
 	
 	
 	!_---: : :(  6! ! !  .( ( (V   ,v v v> > > > > >s#   A AAA A#"A#