o
    沪g                     @  s  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mZ d dl	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlm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(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZS d dlTmUZU d dlVmWZW d dlXmYZYmZZZ e
rd dl[m\Z\ d dl]m^Z^ e_ Z`G dd dZadS )    )annotationsN)Path)TYPE_CHECKINGAnyCallable)	MagicMock)parse)source_util)Runtime)MemoryCacheStorageManager)MediaFileManager)MemoryMediaFileStorage)PagesManager)Secrets)TESTING_KEY)SafeSessionState)SessionState).BlockButtonButtonGroupCaption	ChatInputChatMessageCheckboxCodeColorPickerColumn	Dataframe	DateInputDividerElementListElementTreeError	ExceptionExpanderHeaderInfoJsonLatexMarkdownMetricMultiselectNodeNumberInputRadio	SelectboxSelectSliderSliderStatus	SubheaderSuccessTabTableTextTextArea	TextInput	TimeInputTitleToastToggleWarning
WidgetListrepr_)LocalScriptRunner)patch_config_options)HASHLIB_KWARGScalc_md5)Sequence)WidgetStatesc                   @  s   e Zd ZdZdddddd	Zed
ddddZed
ddddddZed
ddddddZed
ddddZ			ddddZ
dddd d!Zdd#d$Zedd&d'Zedd(d)Zedd+d,Zedd.d/Zedd1d2Zedd4d5Zedd7d8Zedd:d;Zedd=d>Zedd@dAZeddCdDZeddFdGZeddIdJZeddLdMZeddOdPZeddRdSZeddUdVZeddXdYZedd[d\Z edd^d_Z!eddadbZ"eddddeZ#eddgdhZ$eddjdkZ%eddmdnZ&eddpdqZ'eddsdtZ(eddvdwZ)eddydzZ*edd|d}Z+edddZ,edddZ-edddZ.edddZ/edddZ0edddZ1edddZ2edddZ3edddZ4edddZ5edddZ6edddZ7dddZ8dd Z9dddZ:dddZ;dddZ<dS )AppTesta
  
    A simulated Streamlit app to check the correctness of displayed    elements and outputs.

    An instance of ``AppTest`` simulates a running Streamlit app. This class
    provides methods to set up, manipulate, and inspect the app contents via
    API instead of a browser UI. It can be used to write automated tests of an
    app in various scenarios. These can then be run using a tool like pytest.

    ``AppTest`` can be initialized by one of three class methods:

    * |st.testing.v1.AppTest.from_file|_ (recommended)
    * |st.testing.v1.AppTest.from_string|_
    * |st.testing.v1.AppTest.from_function|_

    Once initialized, Session State and widget values can be updated and the
    script can be run. Unlike an actual live-running Streamlit app, you need to
    call ``AppTest.run()`` explicitly to re-run the app after changing a widget
    value. Switching pages also requires an explicit, follow-up call to
    ``AppTest.run()``.

    ``AppTest`` enables developers to build tests on their app as-is, in the
    familiar python test format, without major refactoring or abstracting out
    logic to be tested separately from the UI. Tests can run quickly with very
    low overhead. A typical pattern is to build a suite of tests for an app
    that ensure consistent functionality as the app evolves, and run the tests
    locally and/or in a CI environment like Github Actions.

    .. note::
        ``AppTest`` only supports testing a single page of an app per
        instance. For multipage apps, each page will need to be tested
        separately. ``AppTest`` is not yet compatible with multipage apps
        using ``st.navigation`` and ``st.Page``.

    .. |st.testing.v1.AppTest.from_file| replace:: ``st.testing.v1.AppTest.from_file``
    .. _st.testing.v1.AppTest.from_file: #apptestfrom_file
    .. |st.testing.v1.AppTest.from_string| replace:: ``st.testing.v1.AppTest.from_string``
    .. _st.testing.v1.AppTest.from_string: #apptestfrom_string
    .. |st.testing.v1.AppTest.from_function| replace:: ``st.testing.v1.AppTest.from_function``
    .. _st.testing.v1.AppTest.from_function: #apptestfrom_function

    Attributes
    ----------
    secrets: dict[str, Any]
        Dictionary of secrets to be used the simulated app. Use dict-like
        syntax to set secret values for the simulated app.

    session_state: SafeSessionState
        Session State for the simulated app. SafeSessionState object supports
        read and write operations as usual for Streamlit apps.

    query_params: dict[str, Any]
        Dictionary of query parameters to be used by the simluated app. Use
        dict-like syntax to set ``query_params`` values for the simulated app.
    Nargskwargsscript_path
str | Pathdefault_timeoutfloatc                C  sb   t || _|| _t }i |t< t|dd | _i | _i | _|| _	|| _
d| _t }| |_|| _d S )Nc                   S  s   d S N rP   rP   rP   Y/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/streamlit/testing/v1/app_test.py<lambda>   s    z"AppTest.__init__.<locals>.<lambda> )str_script_pathrM   r   r   r   session_statequery_paramssecretsrI   rJ   
_page_hashr!   _runner_tree)selfrK   rM   rI   rJ   rV   treerP   rP   rQ   __init__   s   

zAppTest.__init__   rM   scriptrT   returnc                C  s   | j ||dS )a3  
        Create an instance of ``AppTest`` to simulate an app page defined        within a string.

        This is useful for testing short scripts that fit comfortably as an
        inline string in the test itself, without having to create a separate
        file for it. The script must be executable on its own and so must
        contain all necessary imports.

        Parameters
        ----------
        script: str
            The string contents of the script to be run.

        default_timeout: float
            Default time in seconds before a script run is timed out. Can be
            overridden for individual ``.run()`` calls.

        Returns
        -------
        AppTest
            A simulated Streamlit app for testing. The simulated app can be
            executed via ``.run()``.

        r`   )_from_string)clsra   rM   rP   rP   rQ   from_string   s   zAppTest.from_stringrM   rI   rJ   c          	      C  sT   t jt|dfi t}| }ttj|}t	|}|
| tt||||dS )Nzutf-8rf   )hashlibmd5bytesrC   	hexdigestr   TMP_DIRnametextwrapdedent
write_textrG   rT   )	rd   ra   rM   rI   rJ   hasherscript_namepathaligned_scriptrP   rP   rQ   rc      s   

zAppTest._from_stringCallable[..., Any]c          	      C  sB   t |\}}td|}|d|j d }| j||||dS )a  
        Create an instance of ``AppTest`` to simulate an app page defined        within a function.

        This is similar to ``AppTest.from_string()``, but more convenient to
        write with IDE assistance. The script must be executable on its own and
        so must contain all necessary imports.

        Parameters
        ----------
        script: Callable
            A function whose body will be used as a script. Must be runnable
            in isolation, so it must include any necessary imports.

        default_timeout: float
            Default time in seconds before a script run is timed out. Can be
            overridden for individual ``.run()`` calls.

        args: tuple
            An optional tuple of args to pass to the script function.

        kwargs: dict
            An optional dict of kwargs to pass to the script function.

        Returns
        -------
        AppTest
            A simulated Streamlit app for testing. The simulated app can be
            executed via ``.run()``.

        rS   
z(*__args, **__kwargs)rf   )inspectgetsourcelinesrm   rn   join__name__rc   )	rd   ra   rM   rI   rJ   source_lines_sourcemodulerP   rP   rQ   from_function   s   (zAppTest.from_functionc                C  sL   t |}| r|}ntjtd}t |d j}|j| }t||dS )a.  
        Create an instance of ``AppTest`` to simulate an app page defined        within a file.

        This option is most convenient for CI workflows and testing of
        published apps. The script must be executable on its own and so must
        contain all necessary imports.

        Parameters
        ----------
        script_path: str | Path
            Path to a script file. The path should be absolute or relative to
            the file calling ``.from_file``.

        default_timeout: float
            Default time in seconds before a script run is timed out. Can be
            overridden for individual ``.run()`` calls.

        Returns
        -------
        AppTest
            A simulated Streamlit app for testing. The simulated app can be
            executed via ``.run()``.
        N   r`   )	r   is_file	tracebackStackSummaryextract
walk_stackfilenameparentrG   )rd   rK   rM   rr   stackfilepathrP   rP   rQ   	from_file  s   
zAppTest.from_filewidget_stateWidgetStates | Nonetimeoutfloat | Nonec                 C  sx  ddl }|du r| j}ttd}ttd|_t |_|t_	t
| jdd}tj tj}dt_W d   n1 s9w   Y  |j}| jrNt }| j|_||_t| j| j|| j| jd}	tdd	i |	|| j|| j| _| | j_W d   n1 s{w   Y  |	jd
 d j}
t|
| _tj |t_W d   n1 sw   Y  | jr|jjdurt |jj| _||_dt_	| S )zRun the script, and parse the output messages for querying
        and interaction.

        Timeout is in seconds, or None to use the default timeout of the runner.
        r   N)specz/mock/mediaF)setup_watcherrH   zglobal.appTestTclient_state)!	streamlitrM   r   r
   r   r   media_file_mgrr   cache_storage_manager	_instancer   rU   r	   _pages_cache_lock_cached_pagesrX   r   _secretsrA   rV   rI   rJ   rB   runrW   rY   r[   rZ   
event_dataquery_stringr   parse_qsdict)r\   r   r   stmock_runtimepages_managersaved_cached_pagessaved_secretsnew_secretsscript_runnerr   rP   rP   rQ   _run4  sV   

zAppTest._runr   c                C  s   | j j|dS )a  Run the script from the current state.

        This is equivalent to manually rerunning the app or the rerun that
        occurs upon user interaction. ``AppTest.run()`` must be manually called
        after updating a widget value or switching pages as script reruns do
        not occur automatically as they do for live-running Streamlit apps.

        Parameters
        ----------
        timeout : float or None
            The maximum number of seconds to run the script. If ``timeout`` is
            ``None`` (default), Streamlit uses the default timeout set for the
            instance of ``AppTest``.

        Returns
        -------
        AppTest
            self

        r   )r[   r   )r\   r   rP   rP   rQ   r   t  s   zAppTest.run	page_pathc                 C  sF   t | jj}|| }| std| dt| }t|| _| S )a  Switch to another page of the app.

        This method does not automatically rerun the app. Use a follow-up call
        to ``AppTest.run()`` to obtain the elements on the selected page.

        Parameters
        ----------
        page_path: str
            Path of the page to switch to. The path must be relative to the
            main script's location (e.g. ``"pages/my_page.py"``).

        Returns
        -------
        AppTest
            self

        zUnable to find script at z:, make sure the page given is relative to the main script.)	r   rU   r   r   
ValueErrorrT   resolverD   rY   )r\   r   main_dirfull_page_pathpage_path_strrP   rP   rQ   switch_page  s   

zAppTest.switch_pager   c                 C     | j jS )aP  Sequence of elements within the main body of the app.

        Returns
        -------
        Block
            A container of elements. Block can be queried for elements in the
            same manner as ``AppTest``. For example, ``Block.checkbox`` will
            return all ``st.checkbox`` within the associated container.
        )r[   mainr\   rP   rP   rQ   r        zAppTest.mainc                 C  r   )aJ  Sequence of all elements within ``st.sidebar``.

        Returns
        -------
        Block
            A container of elements. Block can be queried for elements in the
            same manner as ``AppTest``. For example, ``Block.checkbox`` will
            return all ``st.checkbox`` within the associated container.
        )r[   sidebarr   rP   rP   rQ   r     r   zAppTest.sidebarWidgetList[Button]c                 C  r   )a  Sequence of all ``st.button`` and ``st.form_submit_button`` widgets.

        Returns
        -------
        WidgetList of Button
            Sequence of all ``st.button`` and ``st.form_submit_button``
            widgets. Individual widgets can be accessed from a WidgetList by
            index (order on the page) or key. For example, ``at.button[0]`` for
            the first widget or ``at.button(key="my_key")`` for a widget with a
            given key.
        )r[   buttonr   rP   rP   rQ   r     s   zAppTest.buttonWidgetList[ButtonGroup[Any]]c                 C  r   )a  Sequence of all ``st.feedback`` widgets.

        Returns
        -------
        WidgetList of ButtonGroup
            Sequence of all ``st.feedback`` widgets. Individual widgets can be
            accessed from a WidgetList by index (order on the page) or key. For
            example, ``at.button_group[0]`` for the first widget or
            ``at.button_group(key="my_key")`` for a widget with a given key.
        )r[   button_groupr   rP   rP   rQ   r        zAppTest.button_groupElementList[Caption]c                 C  r   )a  Sequence of all ``st.caption`` elements.

        Returns
        -------
        ElementList of Caption
            Sequence of all ``st.caption`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.caption[0]`` for the first element. Caption is an
            extension of the Element class.
        )r[   captionr   rP   rP   rQ   r     r   zAppTest.captionWidgetList[ChatInput]c                 C  r   )a  Sequence of all ``st.chat_input`` widgets.

        Returns
        -------
        WidgetList of ChatInput
            Sequence of all ``st.chat_input`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.chat_input[0]`` for the first widget or
            ``at.chat_input(key="my_key")`` for a widget with a given key.
        )r[   
chat_inputr   rP   rP   rQ   r     r   zAppTest.chat_inputSequence[ChatMessage]c                 C  r   )a  Sequence of all ``st.chat_message`` elements.

        Returns
        -------
        Sequence of ChatMessage
            Sequence of all ``st.chat_message`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.chat_message[0]`` for the first element.  ChatMessage
            is an extension of the Block class.
        )r[   chat_messager   rP   rP   rQ   r     r   zAppTest.chat_messageWidgetList[Checkbox]c                 C  r   )a  Sequence of all ``st.checkbox`` widgets.

        Returns
        -------
        WidgetList of Checkbox
            Sequence of all ``st.checkbox`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.checkbox[0]`` for the first widget or
            ``at.checkbox(key="my_key")`` for a widget with a given key.
        )r[   checkboxr   rP   rP   rQ   r     r   zAppTest.checkboxElementList[Code]c                 C  r   )au  Sequence of all ``st.code`` elements.

        Returns
        -------
        ElementList of Code
            Sequence of all ``st.code`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.code[0]`` for the first element. Code is an
            extension of the Element class.
        )r[   coder   rP   rP   rQ   r     r   zAppTest.codeWidgetList[ColorPicker]c                 C  r   )a  Sequence of all ``st.color_picker`` widgets.

        Returns
        -------
        WidgetList of ColorPicker
            Sequence of all ``st.color_picker`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.color_picker[0]`` for the first widget or
            ``at.color_picker(key="my_key")`` for a widget with a given key.
        )r[   color_pickerr   rP   rP   rQ   r   $  r   zAppTest.color_pickerSequence[Column]c                 C  r   )a  Sequence of all columns within ``st.columns`` elements.

        Each column within a single ``st.columns`` will be returned as a
        separate Column in the Sequence.

        Returns
        -------
        Sequence of Column
            Sequence of all columns within ``st.columns`` elements. Individual
            columns can be accessed from an ElementList by index (order on the
            page). For example, ``at.columns[0]`` for the first column. Column
            is an extension of the Block class.
        )r[   columnsr   rP   rP   rQ   r   2  s   zAppTest.columnsElementList[Dataframe]c                 C  r   )a  Sequence of all ``st.dataframe`` elements.

        Returns
        -------
        ElementList of Dataframe
            Sequence of all ``st.dataframe`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.dataframe[0]`` for the first element. Dataframe is an
            extension of the Element class.
        )r[   	dataframer   rP   rP   rQ   r   C  r   zAppTest.dataframeWidgetList[DateInput]c                 C  r   )a  Sequence of all ``st.date_input`` widgets.

        Returns
        -------
        WidgetList of DateInput
            Sequence of all ``st.date_input`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.date_input[0]`` for the first widget or
            ``at.date_input(key="my_key")`` for a widget with a given key.
        )r[   
date_inputr   rP   rP   rQ   r   Q  r   zAppTest.date_inputElementList[Divider]c                 C  r   )a  Sequence of all ``st.divider`` elements.

        Returns
        -------
        ElementList of Divider
            Sequence of all ``st.divider`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.divider[0]`` for the first element. Divider is an
            extension of the Element class.
        )r[   dividerr   rP   rP   rQ   r   _  r   zAppTest.dividerElementList[Error]c                 C  r   )az  Sequence of all ``st.error`` elements.

        Returns
        -------
        ElementList of Error
            Sequence of all ``st.error`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.error[0]`` for the first element. Error is an
            extension of the Element class.
        )r[   errorr   rP   rP   rQ   r   m  r   zAppTest.errorElementList[Exception]c                 C  r   )a  Sequence of all ``st.exception`` elements.

        Returns
        -------
        ElementList of Exception
            Sequence of all ``st.exception`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.exception[0]`` for the first element. Exception is an
            extension of the Element class.
        )r[   	exceptionr   rP   rP   rQ   r   {  r   zAppTest.exceptionSequence[Expander]c                 C  r   )a  Sequence of all ``st.expander`` elements.

        Returns
        -------
        Sequence of Expandable
            Sequence of all ``st.expander`` elements. Individual elements can be
            accessed from a Sequence by index (order on the page). For
            example, ``at.expander[0]`` for the first element. Expandable is an
            extension of the Block class.
        )r[   expanderr   rP   rP   rQ   r     r   zAppTest.expanderElementList[Header]c                 C  r   )a  Sequence of all ``st.header`` elements.

        Returns
        -------
        ElementList of Header
            Sequence of all ``st.header`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.header[0]`` for the first element. Header is an
            extension of the Element class.
        )r[   headerr   rP   rP   rQ   r     r   zAppTest.headerElementList[Info]c                 C  r   )au  Sequence of all ``st.info`` elements.

        Returns
        -------
        ElementList of Info
            Sequence of all ``st.info`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.info[0]`` for the first element. Info is an
            extension of the Element class.
        )r[   infor   rP   rP   rQ   r     r   zAppTest.infoElementList[Json]c                 C  r   )au  Sequence of all ``st.json`` elements.

        Returns
        -------
        ElementList of Json
            Sequence of all ``st.json`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.json[0]`` for the first element. Json is an
            extension of the Element class.
        )r[   jsonr   rP   rP   rQ   r     r   zAppTest.jsonElementList[Latex]c                 C  r   )az  Sequence of all ``st.latex`` elements.

        Returns
        -------
        ElementList of Latex
            Sequence of all ``st.latex`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.latex[0]`` for the first element. Latex is an
            extension of the Element class.
        )r[   latexr   rP   rP   rQ   r     r   zAppTest.latexElementList[Markdown]c                 C  r   )a  Sequence of all ``st.markdown`` elements.

        Returns
        -------
        ElementList of Markdown
            Sequence of all ``st.markdown`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.markdown[0]`` for the first element. Markdown is an
            extension of the Element class.
        )r[   markdownr   rP   rP   rQ   r     r   zAppTest.markdownElementList[Metric]c                 C  r   )a  Sequence of all ``st.metric`` elements.

        Returns
        -------
        ElementList of Metric
            Sequence of all ``st.metric`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.metric[0]`` for the first element. Metric is an
            extension of the Element class.
        )r[   metricr   rP   rP   rQ   r     r   zAppTest.metricWidgetList[Multiselect[Any]]c                 C  r   )a  Sequence of all ``st.multiselect`` widgets.

        Returns
        -------
        WidgetList of Multiselect
            Sequence of all ``st.multiselect`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.multiselect[0]`` for the first widget or
            ``at.multiselect(key="my_key")`` for a widget with a given key.
        )r[   multiselectr   rP   rP   rQ   r     r   zAppTest.multiselectWidgetList[NumberInput]c                 C  r   )a  Sequence of all ``st.number_input`` widgets.

        Returns
        -------
        WidgetList of NumberInput
            Sequence of all ``st.number_input`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.number_input[0]`` for the first widget or
            ``at.number_input(key="my_key")`` for a widget with a given key.
        )r[   number_inputr   rP   rP   rQ   r     r   zAppTest.number_inputWidgetList[Radio[Any]]c                 C  r   )a  Sequence of all ``st.radio`` widgets.

        Returns
        -------
        WidgetList of Radio
            Sequence of all ``st.radio`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.radio[0]`` for the first widget or
            ``at.radio(key="my_key")`` for a widget with a given key.
        )r[   radior   rP   rP   rQ   r     r   zAppTest.radioWidgetList[SelectSlider[Any]]c                 C  r   )a  Sequence of all ``st.select_slider`` widgets.

        Returns
        -------
        WidgetList of SelectSlider
            Sequence of all ``st.select_slider`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.select_slider[0]`` for the first widget or
            ``at.select_slider(key="my_key")`` for a widget with a given key.
        )r[   select_sliderr   rP   rP   rQ   r     r   zAppTest.select_sliderWidgetList[Selectbox[Any]]c                 C  r   )a  Sequence of all ``st.selectbox`` widgets.

        Returns
        -------
        WidgetList of Selectbox
            Sequence of all ``st.selectbox`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.selectbox[0]`` for the first widget or
            ``at.selectbox(key="my_key")`` for a widget with a given key.
        )r[   	selectboxr   rP   rP   rQ   r   #  r   zAppTest.selectboxWidgetList[Slider[Any]]c                 C  r   )a  Sequence of all ``st.slider`` widgets.

        Returns
        -------
        WidgetList of Slider
            Sequence of all ``st.slider`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.slider[0]`` for the first widget or
            ``at.slider(key="my_key")`` for a widget with a given key.
        )r[   sliderr   rP   rP   rQ   r   1  r   zAppTest.sliderElementList[Subheader]c                 C  r   )a  Sequence of all ``st.subheader`` elements.

        Returns
        -------
        ElementList of Subheader
            Sequence of all ``st.subheader`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.subheader[0]`` for the first element. Subheader is an
            extension of the Element class.
        )r[   	subheaderr   rP   rP   rQ   r   ?  r   zAppTest.subheaderElementList[Success]c                 C  r   )a  Sequence of all ``st.success`` elements.

        Returns
        -------
        ElementList of Success
            Sequence of all ``st.success`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.success[0]`` for the first element. Success is an
            extension of the Element class.
        )r[   successr   rP   rP   rQ   r   M  r   zAppTest.successSequence[Status]c                 C  r   )av  Sequence of all ``st.status`` elements.

        Returns
        -------
        Sequence of Status
            Sequence of all ``st.status`` elements. Individual elements can be
            accessed from a Sequence by index (order on the page). For
            example, ``at.status[0]`` for the first element. Status is an
            extension of the Block class.
        )r[   statusr   rP   rP   rQ   r   [  r   zAppTest.statusElementList[Table]c                 C  r   )az  Sequence of all ``st.table`` elements.

        Returns
        -------
        ElementList of Table
            Sequence of all ``st.table`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.table[0]`` for the first element. Table is an
            extension of the Element class.
        )r[   tabler   rP   rP   rQ   r   i  r   zAppTest.tableSequence[Tab]c                 C  r   )a  Sequence of all tabs within ``st.tabs`` elements.

        Each tab within a single ``st.tabs`` will be returned as a separate Tab
        in the Sequence. Additionally, the tab labels are forwarded to each
        Tab element as a property. For example, ``st.tabs("A","B")`` will
        yield two Tab objects, with ``Tab.label`` returning "A" and "B",
        respectively.

        Returns
        -------
        Sequence of Tab
            Sequence of all tabs within ``st.tabs`` elements. Individual
            tabs can be accessed from an ElementList by index (order on the
            page). For example, ``at.tabs[0]`` for the first tab. Tab is an
            extension of the Block class.
        )r[   tabsr   rP   rP   rQ   r   w  s   zAppTest.tabsElementList[Text]c                 C  r   )au  Sequence of all ``st.text`` elements.

        Returns
        -------
        ElementList of Text
            Sequence of all ``st.text`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.text[0]`` for the first element. Text is an
            extension of the Element class.
        )r[   textr   rP   rP   rQ   r     r   zAppTest.textWidgetList[TextArea]c                 C  r   )a  Sequence of all ``st.text_area`` widgets.

        Returns
        -------
        WidgetList of TextArea
            Sequence of all ``st.text_area`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.text_area[0]`` for the first widget or
            ``at.text_area(key="my_key")`` for a widget with a given key.
        )r[   	text_arear   rP   rP   rQ   r     r   zAppTest.text_areaWidgetList[TextInput]c                 C  r   )a  Sequence of all ``st.text_input`` widgets.

        Returns
        -------
        WidgetList of TextInput
            Sequence of all ``st.text_input`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.text_input[0]`` for the first widget or
            ``at.text_input(key="my_key")`` for a widget with a given key.
        )r[   
text_inputr   rP   rP   rQ   r     r   zAppTest.text_inputWidgetList[TimeInput]c                 C  r   )a  Sequence of all ``st.time_input`` widgets.

        Returns
        -------
        WidgetList of TimeInput
            Sequence of all ``st.time_input`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.time_input[0]`` for the first widget or
            ``at.time_input(key="my_key")`` for a widget with a given key.
        )r[   
time_inputr   rP   rP   rQ   r     r   zAppTest.time_inputElementList[Title]c                 C  r   )az  Sequence of all ``st.title`` elements.

        Returns
        -------
        ElementList of Title
            Sequence of all ``st.title`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.title[0]`` for the first element. Title is an
            extension of the Element class.
        )r[   titler   rP   rP   rQ   r     r   zAppTest.titleElementList[Toast]c                 C  r   )az  Sequence of all ``st.toast`` elements.

        Returns
        -------
        ElementList of Toast
            Sequence of all ``st.toast`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.toast[0]`` for the first element. Toast is an
            extension of the Element class.
        )r[   toastr   rP   rP   rQ   r     r   zAppTest.toastWidgetList[Toggle]c                 C  r   )a  Sequence of all ``st.toggle`` widgets.

        Returns
        -------
        WidgetList of Toggle
            Sequence of all ``st.toggle`` widgets. Individual widgets can
            be accessed from a WidgetList by index (order on the page) or key.
            For example, ``at.toggle[0]`` for the first widget or
            ``at.toggle(key="my_key")`` for a widget with a given key.
        )r[   toggler   rP   rP   rQ   r    r   zAppTest.toggleElementList[Warning]c                 C  r   )a  Sequence of all ``st.warning`` elements.

        Returns
        -------
        ElementList of Warning
            Sequence of all ``st.warning`` elements. Individual elements can be
            accessed from an ElementList by index (order on the page). For
            example, ``at.warning[0]`` for the first element. Warning is an
            extension of the Element class.
        )r[   warningr   rP   rP   rQ   r    r   zAppTest.warningintc                 C  s
   t | jS rO   )lenr[   r   rP   rP   rQ   __len__     
zAppTest.__len__c                 c  s    | j E d H  d S rO   r[   r   rP   rP   rQ   __iter__  s   zAppTest.__iter__idxr,   c                 C  s
   | j | S rO   r  )r\   r
  rP   rP   rQ   __getitem__  r  zAppTest.__getitem__element_typeSequence[Node]c                 C  s   | j |S )a  Get elements or widgets of the specified type.

        This method returns the collection of all elements or widgets of
        the specified type on the current page. Retrieve a specific element by
        using its index (order on page) or key lookup.

        Parameters
        ----------
        element_type: str
            An element attribute of ``AppTest``. For example, "button",
            "caption", or "chat_input".

        Returns
        -------
        Sequence of Elements
            Sequence of elements of the given type. Individual elements can
            be accessed from a Sequence by index (order on the page). When
            getting and ``element_type`` that is a widget, individual widgets
            can be accessed by key. For example, ``at.get("text")[0]`` for the
            first ``st.text`` element or ``at.get("slider")(key="my_key")`` for
            the ``st.slider`` widget with a given key.
        )r[   get)r\   r  rP   rP   rQ   r    s   zAppTest.getc                 C  s   t | S rO   )r@   r   rP   rP   rQ   __repr__  s   zAppTest.__repr__)rK   rL   rM   rN   )ra   rT   rM   rN   rb   rG   )ra   rt   rM   rN   rb   rG   )rK   rL   rM   rN   rb   rG   )NN)r   r   r   r   rb   rG   )r   r   rb   rG   )r   rT   rb   rG   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r   )rb   r  )rb   r  )r
  r  rb   r,   )r  rT   rb   r  )rb   rT   )=ry   
__module____qualname____doc__r^   classmethodre   rc   r~   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r  r  r  rP   rP   rP   rQ   rG   b   s    =.)@



rG   )b
__future__r   rg   rv   tempfilerm   r   pathlibr   typingr   r   r   unittest.mockr   urllibr   r   r	   streamlit.runtimer
   5streamlit.runtime.caching.storage.dummy_cache_storager   $streamlit.runtime.media_file_managerr   +streamlit.runtime.memory_media_file_storager   streamlit.runtime.pages_managerr   streamlit.runtime.secretsr   streamlit.runtime.state.commonr   *streamlit.runtime.state.safe_session_stater   %streamlit.runtime.state.session_stater   !streamlit.testing.v1.element_treer   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   (streamlit.testing.v1.local_script_runnerrA   streamlit.testing.v1.utilrB   streamlit.utilrC   rD   collections.abcrE    streamlit.proto.WidgetStates_pb2rF   TemporaryDirectoryrk   rG   rP   rP   rP   rQ   <module>   s:   0