
    gJ,                    ,   U d 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mZmZ ddl	m
Z
mZmZ ddlmZ ddlmZmZmZmZ ddlmZ  ee      Zd	ed
<   ej2                  rdZndZ G d de      ZddZdZddZ G d d      ZddZ ddZ!ddZ"ddZ#ddZ$y)z(Manage the user's Streamlit credentials.    )annotationsN)datetimetimezone)Final
NamedTupleNoReturn)uuid4)cli_utilenv_util	file_utilutil)
get_loggerr   _LOGGERz$%userprofile%/.streamlit/config.tomlz~/.streamlit/config.tomlc                  "    e Zd ZU ded<   ded<   y)_Activationz
str | Noneemailboolis_validN)__name__
__module____qualname____annotations__     R/var/www/openai/venv/lib/python3.12/site-packages/streamlit/runtime/credentials.pyr   r   '   s    Nr   r   c                    t         j                  j                  dk(  xr2 t        j                   xs t
        j                  j                  d      } d| rdnd t        j                  dd       d	t        j                  d
d       S )Nzutf-8
WT_SESSIONz
      u   👋  zWelcome to Streamlit!Tboldu   

      If you’d like to receive helpful onboarding emails, news, offers, promotions,
      and the occasional swag, please enter your email address below. Otherwise,
      leave this field blank.

      zEmail: bluefg)
sysstdoutencodingr   
IS_WINDOWSosenvirongetr
   style_for_cli)
show_emojis    r   email_promptr-   ,   s    
 $$/ ?2::>>,#? 
w"%h&<&<=T[_&`%a b iF348 8r   zT
Collecting usage statistics. To deactivate, set browser.gatherUsageStats to false.
c           
     h   ddl }| d| vrydddddd	d
}t        j                  t        j                        j                          d}dddddit        t                     |d| ddd| dd	}|j                  d|t        j                  |      j                               }|j                          y)z1Send the user's email to segment.io, if submittedr   N@zapi.segment.ioz*/*zen-US,en;q=0.9z
text/plainzlocalhost:8501zlocalhost:8501/)	authorityacceptzaccept-languagezcontent-typeoriginrefererz+00:00libraryzanalytics-pythonz2.2.2)nameversionsubmittedEmailprovided_email)authoremailsourcetrack iCkMy7ymtJ9qYzQRXkQpnAJEq7D4NyMU)	anonymous_idcontext	messageId	timestampeventtraitstypeuserIdwriteKeyzhttps://api.segment.io/v1/t)headersdata)requestsr   nowr   utc	isoformatstrr	   postjsondumpsencoderaise_for_status)r   rH   rF   dtrG   responses         r   _send_emailrT   E   s    }5( &+$"$G LL&00236	:B  2wG
 \! &
 6D" }}%ZZ$$&  H r   c                  v    e Zd ZU dZdZded<   ed        Zd ZddZ	dddZ
ddd	Zedd
       ZddZdddZy)CredentialszCredentials class.NzCredentials | None
_singletonc                N    | j                   
t                t        j                   S )zReturn the singleton instance.)rW   rV   )clss    r   get_currentzCredentials.get_currentv   s     >>!M%%%r   c                |    t         j                  t        d      d| _        t	               | _        | t         _        y)zInitialize class.Nz;Credentials already initialized. Use .get_current() instead)rV   rW   RuntimeError
activation_get_credential_file_path
_conf_fileselfs    r   __init__zCredentials.__init__~   s9    !!-M  35!%r   c                ,    t        j                  |       S N)r   repr_r`   s    r   __repr__zCredentials.__repr__   s    zz$r   c                F   | j                   t        j                  d       yddl}	 t	        | j
                        5 }|j                  |      j                  d      }ddd       t        t        |j                  d            | _         y# 1 sw Y   1xY w# t        $ r# |r| j                  |        Y yt        d      t        $ rS |r%| j                          | j                  |        Y yt        t        j                  d      | j
                  z        w xY w)	zLoad from toml file.Nz/Credentials already loaded. Not rereading file.r   generalr   )show_instructionsz7Credentials not found. Please run "streamlit activate".zz
                Unable to load credentials from %s.
                Run "streamlit reset" and try again.
                )r]   r   errortomlopenr_   loadr*   	Exception_verify_emailFileNotFoundErroractivater\   resettextwrapdedent)ra   auto_resolverk   frG   s        r   rm   zCredentials.load   s   ??&MMKL	doo&!yy|''	2 '|+DHHW,=>DO	 '&
 ! 	L0@AI   	

L0@A ??$ 	s.   B !B/B BB D :8D 4,D c                    	 | j                  |       | j
                  | j
                  j                  st        d       yy# t        t        f$ r}t        t	        |             Y d}~Wd}~ww xY w)zTCheck if streamlit is activated.

        Used by `streamlit run script.py`
        NzActivation email not valid.)rm   rn   r\   _exitrL   r]   r   )ra   ru   es      r   _check_activatedzCredentials._check_activated   s^    
	IIl# ??"$//*B*B/0 +C <( 	#a&MM	s   A A/A**A/c                    t         j                         }d|_        	 t        j                  |j
                         y# t        $ r t        j                  d       Y yw xY w)zReset credentials by removing file.

        This is used by `streamlit activate reset` in case a user wants
        to start over.
        Nz Error removing credentials file.)	rV   rZ   r]   r(   remover_   OSErrorr   	exception)rY   cs     r   rr   zCredentials.reset   sO     ##%	BIIall# 	B@A	Bs   = AAc                   ddl m} | j                  yt        j                  t        j
                  j                  | j                        d       d| j                  j                  i}ddl	}t        | j                  d      5 }|j                  d|i|       ddd       	 t        | j                  j                         y# 1 sw Y   *xY w# |$ r t        j                  d	       Y yw xY w)
z!Save to toml file and send email.r   )RequestExceptionNT)exist_okr   wrh   zError saving email:)requests.exceptionsr   r]   r(   makedirspathdirnamer_   r   rk   rl   dumprT   r   r~   )ra   r   rG   rk   rv   s        r   savezCredentials.save   s    8??" 	BGGOODOO4tD ../$//3'1IIy$'+ (	5--.	 ('
   	534	5s   C"C CC+*C+c                   	 | j                          | j                  r.| j                  j                  rt	        d       yt	        d       yd}|sddl}|j                  t               ddd      }t        |      | _        | j                  j                  r| j                          dt        j                  d	d
      t        j                  t              dz  }t        j                  |       |r^dt        j                  ddd
      t        j                  dd      t        j                  dd
      dz  }t        j                  |       d
}nt        j                  d       |syy# t        $ r Y iw xY w)zCActivate Streamlit.

        Used by `streamlit activate`.
        zAlready activatedzUActivation not valid. Please run `streamlit activate reset` then `streamlit activate`Fr   Nr   )textprompt_suffixdefaultshow_defaulta  
  You can find our privacy policy at %(link)s

  Summary:
  - This open source library collects usage statistics.
  - We cannot see and do not store information contained inside Streamlit apps,
    such as text, charts, images, etc.
  - Telemetry data is stored in servers in the United States.
  - If you'd like to opt out, add the following to %(config)s,
    creating that file if necessary:

    [browser]
    gatherUsageStats = false
z#https://streamlit.io/privacy-policyT)	underline)linkconfigz$
  %(start)s
  %(prompt)s %(hello)s
zGet started by typing:r!   )r#   r    $r"   zstreamlit hellor   )startprompthellozPlease try again.)rm   r\   r]   r   rx   clickr   r-   ro   r   r
   r+   _CONFIG_FILE_PATHprint_to_clir   rj   )ra   ri   	activatedr   r   TELEMETRY_TEXTINSTRUCTIONS_TEXTs          r   rq   zCredentials.activate   sf   
	IIK ??'')*K
 I%"$!&	 %  #0"6??++IIK& !) 6 6AT! #+"8"89J"K	&N( )).9(- &.%;%; 8V$& '/&<&<SV&L%-%;%; 1&-) !--.?@ $IMM"56k  !  	 	s   E/ /	E<;E<returnrL   )F)ru   r   r   None)Tr   r   )ri   r   r   r   )r   r   r   __doc__rW   r   classmethodrZ   rb   rf   rm   rz   rr   r   rq   r   r   r   rV   rV   q   sX    %)J")& &
& "H1 B B5.L7r   rV   c                    | j                         } t        |       dkD  r5| j                  d      dk7  r!t        j	                  d       t        dd      S t        | d      S )ar  Verify the user's email address.

    The email can either be an empty string (if the user chooses not to enter
    it), or a string with a single '@' somewhere in it.

    Parameters
    ----------
    email : str

    Returns
    -------
    _Activation
        An _Activation object. Its 'is_valid' property will be True only if
        the email was validated.

    r   r/      z"That doesn't look like an email :(NFT)striplencountr   rj   r   )r   s    r   ro   ro   3  sS    " KKME 5zA~%++c*a/:;4''ud##r   c                X    t         j                  |        t        j                  d       y)zExit program with error.N)r   rj   r$   exit)messages    r   rx   rx   O  s    MM'HHRLr   c                 ,    t        j                  d      S )Nzcredentials.toml)r   get_streamlit_file_pathr   r   r   r^   r^   U  s    ,,-?@@r   c                 P    t         j                  j                  t                     S rd   )r(   r   existsr^   r   r   r   _check_credential_file_existsr   Y  s    77>>3566r   c                     ddl m}  t               s<| j                  d      r+| j	                  d      st        j                  t               yt        j                         j                          y)zCheck credentials and potentially activate.

    Note
    ----
    If there is no credential file and we are in headless mode, we should not
    check, since credential would be automatically set to an empty string.

    r   r   zserver.headlesszbrowser.gatherUsageStatsN)	streamlitr   r   
get_optionis_manually_setr
   r   _TELEMETRY_HEADLESS_TEXTrV   rZ   rz   r   s    r   check_credentialsr   ]  sQ     !(*v/@/@AR/S%%&@A!!":;..0r   r   )r   rL   r   r   )r   rL   r   r   )r   rL   r   r   )r   r   r   )%r   
__future__r   rN   r(   r$   rs   r   r   typingr   r   r   uuidr	   r   r
   r   r   r   streamlit.loggerr   r   r   r   r'   r   r   r-   r   rT   rV   ro   rx   r^   r   r   r   r   r   <module>r      s    / "  	 
  ' . .  9 9 'H% % ?2* 
8( 
) X7 7D$8A71r   