
    [i*                    ,   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	m
Z
mZ ddlmZ ddlmZmZmZmZmZ ddlmZ  ee      Zded	<   ej2                  rd
ndZded<    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)Final
NamedTupleNoReturncast)uuid4)cli_utilconfigenv_util	file_utilutil)
get_loggerr   _LOGGERz$%userprofile%/.streamlit/config.tomlz~/.streamlit/config.toml_CONFIG_FILE_PATHc                  "    e Zd ZU ded<   ded<   y)_Activation
str | Noneemailboolis_validN)__name__
__module____qualname____annotations__     n/var/www/html/userprofiledev.eatanceapp.com/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 )Nutf-8
WT_SESSIONz
      u   👋  zWelcome to Streamlit!Tboldz

      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_promptr0   ,   s    
 $$/ ?2::>>,#? 
w"%h&<&<=T[_&`%a b iF348 8r   zT
Collecting usage statistics. To deactivate, set browser.gatherUsageStats to false.
c                   ddl }| d| vryd}	 |j                  dd      j                         }|j                  dd      }d
ddddd}dt        t                     d| dd| d}|j                  ||t        j                  |      j                         d      }|j                          y# t        $ r t        j                  d	       Y yw xY w)z0Send the user's email for metrics, if submitted.r   N@r!   z&https://data.streamlit.io/metrics.json   )timeouturlzFailed to fetch metrics URLz*/*zen-US,en;q=0.9zapplication/jsonzlocalhost:8501zlocalhost:8501/)acceptzaccept-languagezcontent-typeoriginreferersubmittedEmailprovided_emailtrack)anonymous_id	messageIdeventauthor_emailsourcetypeuserId
   )headersdatar4   )requestsr-   json	Exceptionr   	exceptionstrr   postdumpsencoderaise_for_status)r   rF   metrics_urlresponse_jsonrD   rE   responses          r   _send_emailrR   E   s    }5(K 4a % 

$& 	 $''r2 +*"$G \!"D }}ZZ$$&	  H ;  78s   3B, ,CCc                  z    e Zd ZU dZdZded<   edd       Zd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                b    | j                   
t                t        dt        j                         S )zReturn the singleton instance.rT   )rU   rT   r   )clss    r   get_currentzCredentials.get_currentw   s&     >>!MM;#9#9::r   c                |    t         j                  t        d      d| _        t	               | _        | t         _        y)zInitialize class.Nz;Credentials already initialized. Use .get_current() instead)rT   rU   RuntimeError
activation_get_credential_file_path
_conf_fileselfs    r   __init__zCredentials.__init__   s9    !!-M  /38:!%r   c                ,    t        j                  |       S N)r   repr_r^   s    r   __repr__zCredentials.__repr__   s    zz$r   c                J   | j                   t        j                  d       yddl}	 t	        | j
                  d      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   r   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-   rZ   _verify_emailFileNotFoundErroractivaterH   resettextwrapdedent)r_   auto_resolverj   frE   s        r   rl   zCredentials.load   s   ??&MMKL	doo8Ayy|''	2 9|""+DHHW,=>DO	 98
 ! 	L0@AI   	

L0@A ??$ 	s.   B !B /B BB D"<8D"6,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.)rl   rH   rZ   _exitrJ   r[   r   )r_   rs   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.)	rT   rX   r[   r+   remover]   OSErrorr   rI   )rW   cs     r   rp   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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   wr   rf   rg   zError saving email:)requests.exceptionsr~   r[   r+   makedirspathdirnamer]   r   rj   rk   dumprR   r   rI   )r_   r~   rE   rj   rt   s        r   savezCredentials.save   s    8??" 	BGGOODOO4tD ../$//39QIIy$'+ :	5--.	 :9
   	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
       dt        j                  t               d}t        j                  |       |radt        j                  ddd
       dt        j                  dd       dt        j                  dd
       d}t        j                  |       d
}nt        j                  d       |s yy# t        $ r Y mw 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_defaultz&
  You can find our privacy policy at z#https://streamlit.io/privacy-policyT)	underlinea-  

  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 zS,
    creating that file if necessary:

    [browser]
    gatherUsageStats = false
z
  zGet started by typing:r$   )r&   r#   $r%    zstreamlit hellor"   
zPlease try again.)rl   rZ   r[   r   rv   clickpromptr0   rm   r   r	   r.   r   print_to_clir   ri   )r_   rh   	activatedr   r   telemetry_textinstructions_texts          r   ro   zCredentials.activate   sz   
	IIK ??'')*K
 I%"$!&	 %  #0"6??++IIK*&&.&<&<=bnr&s%t u4 5=4J4JK\4]3^ _&N )).9(12vDIJ K#&)*!H,B,BCT[_,`+a b-)
 !--.?@ $IMM"56Q  !  	 	s   E3 3	F ?F )returnrT   r   Noner   rJ   )F)rs   r   r   r   )T)rh   r   r   r   )r   r   r   __doc__rU   r   classmethodrX   r`   rd   rl   rx   rp   r   ro   r   r   r   rT   rT   r   sW    %)J"); ;
& "H1 B B5.?7r   rT   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   r2      z"That doesn't look like an email :(NFT)striplencountr   ri   r   )r   s    r   rm   rm   '  sS    " KKME 5zA~%++c*a/:;4''ud##r   c                X    t         j                  |        t        j                  d       y)zExit program with error.N)r   ri   r'   exit)messages    r   rv   rv   C  s    MM'HHRLr   c                 ,    t        j                  d      S )Nzcredentials.toml)r   get_streamlit_file_pathr   r   r   r\   r\   I  s    ,,-?@@r   c                 P    t         j                  j                  t                     S rb   )r+   r   existsr\   r   r   r   _check_credential_file_existsr   M  s    77>>3566r   c                    t               sYt        j                  d      st        j                  d      s/t        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.

    zserver.headlesszserver.showEmailPromptzbrowser.gatherUsageStatsN)
r   r
   
get_optionis_manually_setr	   r   _TELEMETRY_HEADLESS_TEXTrT   rX   rx   r   r   r   check_credentialsr   Q  s^     )*+,  !9:%%&@A!!":;..0r   r   )r   r   r   r   )r   rJ   r   r   )r   rJ   r   r   )r   r   r   )%r   
__future__r   rG   r+   r'   rq   typingr   r   r   r   uuidr   	streamlitr	   r
   r   r   r   streamlit.loggerr   r   r   r   r*   r   r   r0   r   rR   rT   rm   rv   r\   r   r   r   r   r   <module>r      s    / "  	 
  4 4  A A 'H% %
  ,	# 5 * 
8( 
* Zr7 r7j$8A71r   