o
    Zh                     @  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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% d dl&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@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZT d dlUmVZV d dlWmXZX d dlYmZZZ e	rd dl[m\Z\m]Z] d dl^m_Z_ e` ZaG dd dZbdS )    )annotationsN)Path)TYPE_CHECKINGAnyCallable)	MagicMock)parse)Runtime)MemoryCacheStorageManager)MediaFileManager)MemoryMediaFileStorage)PagesManager)ScriptCache)Secrets)TESTING_KEY)SafeSessionState)SessionState)page_icon_and_name).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)calc_md5)Iterator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dd0d1Zedd3d4Zedd6d7Zedd9d:Zedd<d=Zedd?d@ZeddBdCZeddEdFZeddHdIZeddKdLZeddNdOZeddQdRZeddTdUZeddWdXZeddZd[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dddZ+eddd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Z8ddd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floatrJ   tuple[Any, ...] | NonerK   dict[str, Any] | NonereturnNonec                C  sb   t || _|| _t }i |t< t|dd | _i | _i | _|| _	|| _
d| _t }| |_|| _d S )Nc                   S  s   d S N rU   rU   rU   ^/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/streamlit/testing/v1/app_test.py<lambda>   s    z"AppTest.__init__.<locals>.<lambda> )str_script_pathrN   r   r   r   session_statequery_paramssecretsrJ   rK   
_page_hashr"   _runner_tree)selfrL   rN   rJ   rK   r[   treerU   rU   rV   __init__   s   

zAppTest.__init__   rN   scriptrY   c                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()``.

        re   )_from_string)clsrf   rN   rU   rU   rV   from_string   s   zAppTest.from_stringrN   rJ   rK   c                C  sB   t t|d}ttj|}t|}|| tt	||||dS )Nzutf-8rj   )
rD   bytesr   TMP_DIRnametextwrapdedent
write_textrH   rY   )rh   rf   rN   rJ   rK   script_namepathaligned_scriptrU   rU   rV   rg      s   	

zAppTest._from_stringCallable[..., Any]c          	      C  sP   t |\}}td|}|dt|dr|jnd 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()``.

        rX   
__name__rf   z(*__args, **__kwargs)rj   )inspectgetsourcelinesrn   ro   joinhasattrrv   rg   )	rh   rf   rN   rJ   rK   source_lines_sourcemodulerU   rU   rV   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   re   )	r   is_file	tracebackStackSummaryextract
walk_stackfilenameparentrH   )rh   rL   rN   rr   stackfilepathrU   rU   rV   	from_file  s   
zAppTest.from_filewidget_stateWidgetStates | Nonetimeoutfloat | Nonec                 C  s"  ddl }|du r| j}ttd}ttd|_t |_|t_	t
 }t| j|dd}|j}| jr9t }| j|_||_t| j| j|| j| jd}	tdd	i |	|| j|| j| _| | j_W d   n1 sfw   Y  |	jd
 d j}
t|
| _| 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_watcherrI   zglobal.appTestTclient_state)	streamlitrN   r   r	   r   r   media_file_mgrr
   cache_storage_manager	_instancer   r   rZ   r]   r   _secretsrB   r[   rJ   rK   rC   runr\   r^   r`   r_   
event_dataquery_stringr   parse_qsdict)ra   r   r   stmock_runtimescript_cachepages_managersaved_secretsnew_secretsscript_runnerr   rU   rU   rV   _run;  sN   

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   )ra   r   rU   rU   rV   r   w  s   zAppTest.run	page_pathc                 C  sV   t | jj}|| }| std| dt| }t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   rZ   r   r   
ValueErrorrY   resolver   rD   r^   )ra   r   main_dirfull_page_pathpage_path_strr|   	page_namerU   rU   rV   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ra   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   r   6  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   rU   rU   rV   r   G  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   rU   rU   rV   r   U  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   rU   rU   rV   r   c  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   rU   rU   rV   r   q  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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   r   5  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   rU   rU   rV   r   C  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   rU   rU   rV   r   Q  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   rU   rU   rV   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   rU   rU   rV   r   m  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   rU   rU   rV   r   {  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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   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   rU   rU   rV   r    r   zAppTest.warningintc                 C  s
   t | jS rT   )lenr`   r   rU   rU   rV   __len__     
zAppTest.__len__Iterator[Node]c                 c  s    | j E d H  d S rT   r`   r   rU   rU   rV   __iter__  s   zAppTest.__iter__idxr-   c                 C  s
   | j | S rT   r	  )ra   r  rU   rU   rV   __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)ra   r  rU   rU   rV   r    s   zAppTest.getc                 C  s   t | S rT   )rA   r   rU   rU   rV   __repr__!  s   zAppTest.__repr__)
rL   rM   rN   rO   rJ   rP   rK   rQ   rR   rS   )rf   rY   rN   rO   rR   rH   )
rf   rY   rN   rO   rJ   rP   rK   rQ   rR   rH   )
rf   rt   rN   rO   rJ   rP   rK   rQ   rR   rH   )rL   rM   rN   rO   rR   rH   )NN)r   r   r   r   rR   rH   )r   r   rR   rH   )r   rY   rR   rH   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r   )rR   r  )rR   r  )rR   r  )r  r  rR   r-   )r  rY   rR   r  )rR   rY   )=rv   
__module____qualname____doc__rc   classmethodri   rg   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  rU   rU   rU   rV   rH   b   s    =1)<




rH   )c
__future__r   rw   tempfilern   r   pathlibr   typingr   r   r   unittest.mockr   urllibr   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.scriptrunner.script_cacher   streamlit.runtime.secretsr   streamlit.runtime.state.commonr   *streamlit.runtime.state.safe_session_stater   %streamlit.runtime.state.session_stater   streamlit.source_utilr   !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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   (streamlit.testing.v1.local_script_runnerrB   streamlit.testing.v1.utilrC   streamlit.utilrD   collections.abcrE   rF    streamlit.proto.WidgetStates_pb2rG   TemporaryDirectoryrl   rH   rU   rU   rU   rV   <module>   s:   0