o
    ni#                     @   s  d 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m	Z	m
Z
mZmZmZm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mZ dZ dZ!dZ"dZ#dZ$e e!e"e#gZ%ed Z&e	rzddl'm(Z( eej)dddZ*dee& dee& fddZ+de,fddZ-						d0dddee dee
 dee
 d e.d!e.d"e.dee,e.df fd#d$Z/d%e,d&e,d'e,dee. fd(d)Z0		d1ddd'ee, ded* d+e.ddf
d,d-Z1d2ded dee, fd.d/Z2dS )3zapikey util.    N)partial)TYPE_CHECKINGCallableDictLiteralOptionalUnion)urlparse)NETRC_FILESget_netrc_auth)InternalApi)term)url_registry)_is_databricksisattyprompt_choicesz*Private W&B dashboard, no account requiredzCreate a W&B accountzUse an existing W&B accountzDon't visualize my resultsUnconfigured)allowmustneverfalsetrue)SettingsT)
hide_inputerrdefaultreturnc                 C   s   | pd}ddd}| ||S )Nr   r   )r   r   )get)r   	anon_modemapping r    R/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/sdk/lib/apikey.py_fixup_anon_mode,   s   
r"   c                  C   s   t jd} | rt j| S tD ]} t jd}t jt j|| r,t j||   S qt	 dkr5dnd} t jt jd| S )z"Return the path to the netrc file.NETRC~Windowsz.netrc_netrc)
osenvironr   path
expanduserr
   existsjoinplatformsystem)
netrc_filehome_dirr    r    r!   get_netrc_file_path4   s   r1   Fsettingsr   apiinput_callbackbrowser_callback
no_offline	no_createlocalc                 C   s  |pt }tj}|pt| }t| j}| jpd}	|j}
dd tD }|dkr*|	t
 |	r/| jr1|r6|	t |	r;| jr=|rB|	t |	r_dtjv r_tj}tj|
}|dur_t| ||d |S |dkrft
}n*|	srttjruttjrut rxt}n|r}t}nt|d	kr|d
 }nt|| j|	d}| d}|t
kr| }t| ||dd |S |tkr|r|ddnd}|std|
 d || }t| ||d |S |tkr|r| nd}|s| j s|s|
}dD ]}|
!|r|
t|d }qtd| dt"#d d td|
 d || }t| ||d |S |tkr&dS |tkr-dS |	r6|r6| nd\}}t| ||d |S )zPrompt for api key.

    Returns:
        str - if key is configured
        None - if dryrun is selected
        False - if unconfigured (notty)
    Fc                 S   s   g | ]}|qS r    r    ).0choicer    r    r!   
<listcomp>^   s    z"prompt_api_key.<locals>.<listcomp>r   zgoogle.colabN)r3   r      r   )input_timeoutjupyterzK: Paste an API key from your profile and hit enter, or press ctrl+c to quitT)r3   	anonymous)signupzCreate an account here: z/authorize?signup=true)zhttp://zhttps://zLogging into z-. (Learn how to deploy a W&B server locally: zwandb-server)z0You can find your API key in your browser here: z
/authorizeNF)$getpassr   
LOG_STRINGr   r"   r?   _jupyterapp_urlLOGIN_CHOICESremoveLOGIN_CHOICE_ANONlogin_timeoutLOGIN_CHOICE_DRYRUNLOGIN_CHOICE_NEWsysmodulesLOG_STRING_NOCOLORwandbr>   attempt_colab_login	write_keyr   stdoutstdinr   LOGIN_CHOICE_NOTTYLOGIN_CHOICE_EXISTSlenr   create_anonymous_api_keytermlogstripis_local
startswithr   url)r2   r3   r4   r5   r6   r7   r8   
log_stringr   r>   rF   choiceskeyresultapi_askhostprefixr?   r    r    r!   prompt_api_keyG   s   










re   rc   entityr`   c                 C   s  d|v r
| ddnd|f\}}t|dkr#td|t| dS zt| j dd }t }td	| d
|  d| }d}zt	|}	|	
   d}W d   n1 s\w   Y  W n	 tyk   Y nw t	|d9}	|rd}
|D ]}|dks||v rd}
qx|
r|
d8 }
qx|	d| qx|	tdj|||d W d   n1 sw   Y  t|tjtjB  W dS  ty   td|  Y dS w )zAdd our host and key to .netrc.-r<    (   z9API-key must be exactly 40 characters long: {} ({} chars)N:r   zAppending key for z to your netrc file: zmachine 
w   z{}
za            machine {host}
              login {entity}
              password {key}
            )rc   rf   r`   TzUnable to read )splitrW   rP   	termerrorformatr	   netlocr1   rY   openreadrZ   OSErrorwritetextwrapdedentr'   chmodstatS_IRUSRS_IWUSR)rc   rf   r`   _
key_suffixnormalized_host
netrc_pathmachine_line
orig_linesfskipliner    r    r!   write_netrc   s^    


r   r   r?   c                 C   s   |st d|p
t }d|v r|ddnd|f\}}t|dkr*t dt||r6|jddd	d	d
 n|jdd	d	d
 t| jd| d S )NzNo API key specified.rg   r<   rh   ri   z0API key must be 40 characters long, yours was {}r?   r   T)globallypersistuser)	
ValueErrorr   rn   rW   rp   set_settingclear_settingr   base_url)r2   r`   r3   r?   r|   suffixr    r    r!   rR      s   
 rR   c                 C   sD   | d u rt  j} | d usJ | jr| jS t| j}|r |d S d S )N)rP   setupr2   api_keyr   r   )r2   authr    r    r!   r     s   

r   )NNNFFFrB   )N)3__doc__r'   r-   ry   rM   rv   	functoolsr   typingr   r   r   r   r   r   urllib.parser	   clickrequests.utilsr
   r   rP   
wandb.apisr   wandb.errorsr   wandb.errors.linksr   
wandb.utilr   r   r   rI   rL   rV   rK   rU   rG   Modewandb.sdk.wandb_settingsr   promptrC   r"   strr1   boolre   r   rR   r   r    r    r    r!   <module>   s     
l7
 