Ë
    úmxiÖ*  ã                  ó,  — 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__© ó    úT/home/htdocs/ttos/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©Ú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_promptr/   ,   s†   € ô
 —‘×$Ñ$¨Ñ/ò Ü×ÑÐÒ?¤2§:¡:§>¡>°,Ó#?ð ð
Ù�w "Ð%¤h×&<Ñ&<Ð=TÐ[_Ô&`Ð%að bô ×Ñ˜i¨FÔ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Údatar3   )Úrequestsr,   ÚjsonÚ	Exceptionr   Ú	exceptionÚstrr   ÚpostÚdumpsÚencodeÚraise_for_status)r   rE   Úmetrics_urlÚresponse_jsonrC   rD   Úresponses          r   Ú_send_emailrQ   E   sô   € ãà€}˜ 5Ñ(Øà€KðØ Ÿ™Ø4¸að %ó 
ç
‰$‹&ð 	ð $×'Ñ'¨¨rÓ2ˆð Ø+Ø*Ø"Ø$ñ€Gð Üœ›“\Ø!ØØ"ØØñ€Dð �}‰}ØØÜ�Z‰Z˜Ó×$Ñ$Ó&Øð	 ó €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.rS   )rT   rS   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)rS   rT   Ú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   € Ü�z‰z˜$ÓÐ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.
                )rZ   r   ÚerrorÚtomlÚopenr\   Úloadr,   rY   Ú_verify_emailÚFileNotFoundErrorÚactivaterG   ÚresetÚtextwrapÚdedent)r^   Úauto_resolverh   ÚfrD   s        r   rj   zCredentials.loadŽ   s  € à�?‰?Ð&Ü�M‰MÐKÔLØãð	Ü�d—o‘oÓ&ð 3¨!Ø—y‘y “|×'Ñ'¨	Ó2�÷3àˆ|Ü"Ð"Ü+¨D¯H©H°WÓ,=Ó>ˆD�O÷	3ð 3ûô
 !ò 	ÙØ—‘°LÐ0@�ÔAÙÜØIóð ô ò 	ÙØ—
‘
”Ø—‘°LÐ0@�Ô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.)rj   rG   rY   Ú_exitrI   rZ   r   )r^   rq   Úes      r   Ú_check_activatedzCredentials._check_activated²   s^   € ð
	Ø�I‰I�lÔ#ð �?‰?Ð"¨$¯/©/×*BÒ*BÜÐ/Õ0ð +Cøô œ<Ð(ò 	Ü”#�a“&�M‰Mûð	ús   ‚A ÁA/ÁA*Á*A/c                óÂ   — t         j                  «       }d|_        	 t        j                  |j
                  «       y# t        $ r t        j                  d«       Y yw xY w)zŒReset credentials by removing file.

        This is used by `streamlit activate reset` in case a user wants
        to start over.
        Nz Error removing credentials file.)	rS   rW   rZ   r*   Úremover\   ÚOSErrorr   rH   )rV   Úcs     r   rn   zCredentials.reset¿   sO   € ô ×#Ñ#Ó%ˆØˆŒð	BÜ�I‰I�a—l‘lÕ#øÜò 	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   Úwre   zError saving email:)Úrequests.exceptionsr|   rZ   r*   ÚmakedirsÚpathÚdirnamer\   r   rh   ri   ÚdumprQ   r   rH   )r^   r|   rD   rh   rr   s        r   ÚsavezCredentials.saveÎ   sº   € å8à�?‰?Ð"Øô 	�‰”B—G‘G—O‘O D§O¡OÓ4¸tÕDð ˜Ÿ™×.Ñ.Ð/ˆãä�$—/‘/ 3Ó'ð 	,¨1Ø�I‰I�y $Ð'¨Ô+÷	,ð	5Ü˜Ÿ™×-Ñ-Õ.÷		,ð 	,ûð
  ò 	5Ü×ÑÐ3Ö4ð	5ús   Â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.)rj   rY   rZ   r   rt   ÚclickÚpromptr/   rk   r„   r	   r-   r   Úprint_to_clir   rg   )r^   rf   Ú	activatedrŽ   r   Útelemetry_textÚinstructions_texts          r   rm   zCredentials.activateå   sz  € ð
	Ø�I‰IŒKð �?Š?Ø�‰×'Ò'ÜÐ)Õ*äðKõð
 ˆIâÛàŸ™Ü%›Ø"$ØØ!&ð	 %ó �ô #0°Ó"6�”Ø—?‘?×+Ò+Ø—I‘I”Kð*&Ü&.×&<Ñ&<Ð=bÐnrÔ&sÐ%tð u4ô 5=×4JÑ4JÔK\Ó4]Ð3^ð _ð&�Nô ×)Ñ)¨.Ô9Ù(ð1Ü×ÑÐ2°vÀDÔIÐJð KÜ×Ñ˜# &Ô)Ð*¨!¬H×,BÑ,BÐCTÐ[_Ô,`Ð+að bð-Ð)ô
 !×-Ñ-Ð.?Ô@Ø $‘Iä—M‘MÐ"5Ô6õQ  øô! ò 	ò ð	ús   ‚E3 Å3	F Å?F )ÚreturnrS   ©r”   ÚNone©r”   rI   )F)rq   r   r”   r–   )T)rf   r   r”   r–   )r   r   r   Ú__doc__rT   r   ÚclassmethodrW   r_   rc   rj   rv   rn   r„   rm   r   r   r   rS   rS   r   sW   … Ùà%)€JÐ"Ó)àò;ó ð;ó
&ó ô"ôH1ð òBó ðBó5õ.?7r   rS   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   r1   é   z"That doesn't look like an email :(NFT)ÚstripÚlenÚcountr   rg   r   )r   s    r   rk   rk   '  sS   € ð" �K‰K‹M€Eô ˆ5ƒz�A‚~˜%Ÿ+™+ cÓ*¨aÒ/Ü�‰Ð:Ô;Ü˜4 Ó'Ð'ä�u˜dÓ#Ð#r   c                óX   — t         j                  | «       t        j                  d«       y)zExit program with error.éÿÿÿÿN)r   rg   r&   Úexit)Úmessages    r   rt   rt   C  s   € ä‡M�M�'ÔÜ‡H�HˆR…Lr   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 ra   )r*   r�   Úexistsr[   r   r   r   Ú_check_credential_file_existsr§   M  s   € Ü�7‰7�>‰>Ô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)zÝCheck 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_TEXTrS   rW   rv   r   r   r   Úcheck_credentialsr¬   Q  s^   € ô )Ô*Ü×ÑÐ+Ô,Ü× Ñ Ð!9Ô:ä×%Ñ%Ð&@ÔAä×!Ñ!Ô":Ô;ØÜ×ÑÓ×.Ñ.Õ0r   r—   )r   r   r”   r–   )r   rI   r”   r   )r¢   rI   r”   r   )r”   r   r•   )%r˜   Ú
__future__r   rF   r*   r&   ro   Útypingr   r   r   r   Úuuidr   Ú	streamlitr	   r
   r   r   r   Ústreamlit.loggerr   r   r   r   r)   r   r   r/   r«   rQ   rS   rk   rt   r[   r§   r¬   r   r   r   ú<module>r²      sŸ   ðò /å "ã Û 	Û 
Û ß 4Ó 4Ý ç AÕ AÝ 'á˜HÓ%€ˆÓ %ð
 ×Òñ ,à	#ð �5ó ô�*ô ó
8ð(Ð ó
* ÷Zr7ñ r7ój$ó8óAó7ô1r   