streamlit-nightly 1.31.2.dev20240220__py2.py3-none-any.whl → 1.31.2.dev20240221__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- streamlit/runtime/scriptrunner/script_runner.py +5 -6
- streamlit/static/asset-manifest.json +2 -2
- streamlit/static/index.html +1 -1
- streamlit/static/static/js/main.c1c90505.js +2 -0
- streamlit/testing/v1/app_test.py +38 -11
- streamlit/testing/v1/local_script_runner.py +11 -0
- {streamlit_nightly-1.31.2.dev20240220.dist-info → streamlit_nightly-1.31.2.dev20240221.dist-info}/METADATA +1 -1
- {streamlit_nightly-1.31.2.dev20240220.dist-info → streamlit_nightly-1.31.2.dev20240221.dist-info}/RECORD +13 -13
- streamlit/static/static/js/main.c1c3de9f.js +0 -2
- /streamlit/static/static/js/{main.c1c3de9f.js.LICENSE.txt → main.c1c90505.js.LICENSE.txt} +0 -0
- {streamlit_nightly-1.31.2.dev20240220.data → streamlit_nightly-1.31.2.dev20240221.data}/scripts/streamlit.cmd +0 -0
- {streamlit_nightly-1.31.2.dev20240220.dist-info → streamlit_nightly-1.31.2.dev20240221.dist-info}/WHEEL +0 -0
- {streamlit_nightly-1.31.2.dev20240220.dist-info → streamlit_nightly-1.31.2.dev20240221.dist-info}/entry_points.txt +0 -0
- {streamlit_nightly-1.31.2.dev20240220.dist-info → streamlit_nightly-1.31.2.dev20240221.dist-info}/top_level.txt +0 -0
streamlit/testing/v1/app_test.py
CHANGED
@@ -13,7 +13,6 @@
|
|
13
13
|
# limitations under the License.
|
14
14
|
from __future__ import annotations
|
15
15
|
|
16
|
-
import ast
|
17
16
|
import hashlib
|
18
17
|
import inspect
|
19
18
|
import pathlib
|
@@ -142,12 +141,21 @@ class AppTest:
|
|
142
141
|
dict-like syntax to set ``query_params`` values for the simulated app.
|
143
142
|
"""
|
144
143
|
|
145
|
-
def __init__(
|
144
|
+
def __init__(
|
145
|
+
self,
|
146
|
+
script_path: str,
|
147
|
+
*,
|
148
|
+
default_timeout: float,
|
149
|
+
args=None,
|
150
|
+
kwargs=None,
|
151
|
+
):
|
146
152
|
self._script_path = script_path
|
147
153
|
self.default_timeout = default_timeout
|
148
154
|
self.session_state = SafeSessionState(SessionState(), lambda: None)
|
149
155
|
self.query_params: dict[str, Any] = {}
|
150
156
|
self.secrets: dict[str, Any] = {}
|
157
|
+
self.args = args
|
158
|
+
self.kwargs = kwargs
|
151
159
|
|
152
160
|
tree = ElementTree()
|
153
161
|
tree._runner = self
|
@@ -180,17 +188,30 @@ class AppTest:
|
|
180
188
|
executed via ``.run()``.
|
181
189
|
|
182
190
|
"""
|
191
|
+
return cls._from_string(script, default_timeout=default_timeout)
|
192
|
+
|
193
|
+
@classmethod
|
194
|
+
def _from_string(
|
195
|
+
cls, script: str, *, default_timeout: float = 3, args=None, kwargs=None
|
196
|
+
) -> AppTest:
|
183
197
|
hasher = hashlib.md5(bytes(script, "utf-8"), **HASHLIB_KWARGS)
|
184
198
|
script_name = hasher.hexdigest()
|
185
199
|
|
186
200
|
path = pathlib.Path(TMP_DIR.name, script_name)
|
187
201
|
aligned_script = textwrap.dedent(script)
|
188
202
|
path.write_text(aligned_script)
|
189
|
-
return AppTest(
|
203
|
+
return AppTest(
|
204
|
+
str(path), default_timeout=default_timeout, args=args, kwargs=kwargs
|
205
|
+
)
|
190
206
|
|
191
207
|
@classmethod
|
192
208
|
def from_function(
|
193
|
-
cls,
|
209
|
+
cls,
|
210
|
+
script: Callable[..., Any],
|
211
|
+
*,
|
212
|
+
default_timeout: float = 3,
|
213
|
+
args=None,
|
214
|
+
kwargs=None,
|
194
215
|
) -> AppTest:
|
195
216
|
"""
|
196
217
|
Create an instance of ``AppTest`` to simulate an app page defined\
|
@@ -210,6 +231,12 @@ class AppTest:
|
|
210
231
|
Default time in seconds before a script run is timed out. Can be
|
211
232
|
overridden for individual ``.run()`` calls.
|
212
233
|
|
234
|
+
args: tuple
|
235
|
+
An optional tuple of args to pass to the script function.
|
236
|
+
|
237
|
+
kwargs: dict
|
238
|
+
An optional dict of kwargs to pass to the script function.
|
239
|
+
|
213
240
|
Returns
|
214
241
|
-------
|
215
242
|
AppTest
|
@@ -217,14 +244,12 @@ class AppTest:
|
|
217
244
|
executed via ``.run()``.
|
218
245
|
|
219
246
|
"""
|
220
|
-
# TODO: Simplify this using `ast.unparse()` once we drop 3.8 support
|
221
247
|
source_lines, _ = inspect.getsourcelines(script)
|
222
248
|
source = textwrap.dedent("".join(source_lines))
|
223
|
-
module =
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
return cls.from_string(body, default_timeout=default_timeout)
|
249
|
+
module = source + f"\n{script.__name__}(*__args, **__kwargs)"
|
250
|
+
return cls._from_string(
|
251
|
+
module, default_timeout=default_timeout, args=args, kwargs=kwargs
|
252
|
+
)
|
228
253
|
|
229
254
|
@classmethod
|
230
255
|
def from_file(cls, script_path: str, *, default_timeout: float = 3) -> AppTest:
|
@@ -299,7 +324,9 @@ class AppTest:
|
|
299
324
|
new_secrets._secrets = self.secrets
|
300
325
|
st.secrets = new_secrets
|
301
326
|
|
302
|
-
script_runner = LocalScriptRunner(
|
327
|
+
script_runner = LocalScriptRunner(
|
328
|
+
self._script_path, self.session_state, args=self.args, kwargs=self.kwargs
|
329
|
+
)
|
303
330
|
self._tree = script_runner.run(widget_state, self.query_params, timeout)
|
304
331
|
self._tree._runner = self
|
305
332
|
# Last event is SHUTDOWN, so the corresponding data includes query string
|
@@ -15,6 +15,7 @@ from __future__ import annotations
|
|
15
15
|
|
16
16
|
import os
|
17
17
|
import time
|
18
|
+
import types
|
18
19
|
from typing import Any
|
19
20
|
from urllib import parse
|
20
21
|
|
@@ -37,6 +38,8 @@ class LocalScriptRunner(ScriptRunner):
|
|
37
38
|
self,
|
38
39
|
script_path: str,
|
39
40
|
session_state: SafeSessionState,
|
41
|
+
args=None,
|
42
|
+
kwargs=None,
|
40
43
|
):
|
41
44
|
"""Initializes the ScriptRunner for the given script_path."""
|
42
45
|
|
@@ -45,6 +48,8 @@ class LocalScriptRunner(ScriptRunner):
|
|
45
48
|
self.forward_msg_queue = ForwardMsgQueue()
|
46
49
|
self.script_path = script_path
|
47
50
|
self.session_state = session_state
|
51
|
+
self.args = args if args is not None else tuple()
|
52
|
+
self.kwargs = kwargs if kwargs is not None else dict()
|
48
53
|
|
49
54
|
super().__init__(
|
50
55
|
session_id="test session id",
|
@@ -135,6 +140,12 @@ class LocalScriptRunner(ScriptRunner):
|
|
135
140
|
# are marked as active.
|
136
141
|
runtime.get_instance().media_file_mgr.remove_orphaned_files()
|
137
142
|
|
143
|
+
def _new_module(self, name: str) -> types.ModuleType:
|
144
|
+
module = types.ModuleType(name)
|
145
|
+
module.__dict__["__args"] = self.args
|
146
|
+
module.__dict__["__kwargs"] = self.kwargs
|
147
|
+
return module
|
148
|
+
|
138
149
|
|
139
150
|
def require_widgets_deltas(runner: LocalScriptRunner, timeout: float = 3) -> None:
|
140
151
|
"""Wait for the given ScriptRunner to emit a completion event. If the timeout
|
@@ -301,7 +301,7 @@ streamlit/runtime/scriptrunner/magic_funcs.py,sha256=_npS_w-0riPNr1-dPyOSjqrwTXo
|
|
301
301
|
streamlit/runtime/scriptrunner/script_cache.py,sha256=ZpaB4T50_GYfhMc2dajSMXWCmS3kaUJ_tPHNVt_flBg,2856
|
302
302
|
streamlit/runtime/scriptrunner/script_requests.py,sha256=wxmxfScxKAw8Tl1yntpzMityA00qOAs3eb0f89tEbUM,7142
|
303
303
|
streamlit/runtime/scriptrunner/script_run_context.py,sha256=aCa_AddUZvBNYs8dth9VJil59B5DZkKq46HWh7i4jb4,8479
|
304
|
-
streamlit/runtime/scriptrunner/script_runner.py,sha256=
|
304
|
+
streamlit/runtime/scriptrunner/script_runner.py,sha256=yeON8dVhpAjdRpCK3TNV7nPw5rZ0bqxpRFUZKcKXMaQ,26812
|
305
305
|
streamlit/runtime/state/__init__.py,sha256=UpfNfPrWJ6rVdD-qc0IP_bwZ4MrcNUjyU9wEKDK-eWM,1528
|
306
306
|
streamlit/runtime/state/common.py,sha256=guvTqKgR02ysyuIvu-mpzry_LRh9oPrdxma2XekvThM,7565
|
307
307
|
streamlit/runtime/state/query_params.py,sha256=mONSZ-HpPAt1qlVIatrCI2KuHryYd_b97gg0EjtuP4s,5846
|
@@ -310,9 +310,9 @@ streamlit/runtime/state/safe_session_state.py,sha256=StGh9V-tm7MCfohgw5FFfwz8tDw
|
|
310
310
|
streamlit/runtime/state/session_state.py,sha256=IQFb-1z6za9dSpeIWfm_rtk0QpG07UfxohvcHh1yTJY,26197
|
311
311
|
streamlit/runtime/state/session_state_proxy.py,sha256=k2JJ9ZX7rMYjpzeGy0WZaBKYaWnXxrbJC5jqdnRQ3jI,5119
|
312
312
|
streamlit/runtime/state/widgets.py,sha256=dgPawgm1QC_OgH12xWWZ0I1sOvZFx8HrtRW3xwT5qPk,10975
|
313
|
-
streamlit/static/asset-manifest.json,sha256=
|
313
|
+
streamlit/static/asset-manifest.json,sha256=PTrwfhXJWBf2mrC2prXqC_Xxvtt6Qbmy0iW_cvDxWjA,14227
|
314
314
|
streamlit/static/favicon.png,sha256=if5cVgw7azxKOvV5FpGixga7JLn23rfnHcy1CdWI1-E,1019
|
315
|
-
streamlit/static/index.html,sha256=
|
315
|
+
streamlit/static/index.html,sha256=GBoagmPd2ISnAZtrffXNq88ZL7rsXw_FzcRAIOveefE,891
|
316
316
|
streamlit/static/static/css/2411.8b8f33d6.chunk.css,sha256=4m2lbj1eVFXSaGCRBHZNhqyRz-4Ce9KogjJPxIq6On8,33275
|
317
317
|
streamlit/static/static/css/43.e3b876c5.chunk.css,sha256=XExLUUHInaWJp_m8TtBWhQ88SUuxZl6Jnnw5NA6rwI4,2633
|
318
318
|
streamlit/static/static/css/6692.65519639.chunk.css,sha256=7yVN3jCqR9w3ighikXanguy3-zs13V_poJHvLT7ojUU,11095
|
@@ -379,8 +379,8 @@ streamlit/static/static/js/9330.c0dd1723.chunk.js,sha256=GhnPu6wiRJ-Lf8CAPKlEbAk
|
|
379
379
|
streamlit/static/static/js/9336.2d95d840.chunk.js,sha256=6nGdXfPdjgSauDXzdPVqijnQB2ErTgkzwfoinHGt484,13482
|
380
380
|
streamlit/static/static/js/9656.8c935274.chunk.js,sha256=3VB6NT0EQErJUX2SYLQpmNAp19sWI45AbNOQLVjcvII,22113
|
381
381
|
streamlit/static/static/js/9758.6e6d8662.chunk.js,sha256=3Gtwgkru2xQTl1mCxFjILQ_Ppb8DMKySHY5YVhm9ihY,2119
|
382
|
-
streamlit/static/static/js/main.
|
383
|
-
streamlit/static/static/js/main.
|
382
|
+
streamlit/static/static/js/main.c1c90505.js,sha256=nFXWWvJe8uy8RileI_wzZ_HTzOBDjfjofOTQEpZPnCY,4368743
|
383
|
+
streamlit/static/static/js/main.c1c90505.js.LICENSE.txt,sha256=YTeqT7R6idssTgnyi3gf0tRiq18-LiPeDOpsWcnbi34,3184
|
384
384
|
streamlit/static/static/media/KaTeX_AMS-Regular.73ea273a72f4aca30ca5.woff2,sha256=DN04fJWQoan5eUVgAi27WWVKfYbxh6oMgUla1C06cwg,28076
|
385
385
|
streamlit/static/static/media/KaTeX_AMS-Regular.853be92419a6c3766b9a.ttf,sha256=aFNIQLz90r_7bw6N60hoTdAefwTqKBMmdXevuQbeHRM,63632
|
386
386
|
streamlit/static/static/media/KaTeX_AMS-Regular.d562e886c52f12660a41.woff,sha256=MNqR6EyJP4deJSaJ-uvcWQsocRReitx_mp1NvYzgslE,33516
|
@@ -473,9 +473,9 @@ streamlit/static/static/media/logo.83ae4f2fb87e38be7cbb8a5d2beb64d2.svg,sha256=_
|
|
473
473
|
streamlit/static/static/media/rocket.b75b17d2b0a063c6cea230d1a9d77f1e.svg,sha256=6ZIRbOQuBNsdJnpfrNMq-6mYpYDN8qJGVsxkZIn8bP8,39315
|
474
474
|
streamlit/testing/__init__.py,sha256=Vrf1yVMOcTyhUPnYvsfyeL96Vpd5z8KoSV5ZzTcTQgU,616
|
475
475
|
streamlit/testing/v1/__init__.py,sha256=XGxNOq4VfmwlVj9K6vXB8dAH1YbI_8AIsvw_vbzQoNA,690
|
476
|
-
streamlit/testing/v1/app_test.py,sha256=
|
476
|
+
streamlit/testing/v1/app_test.py,sha256=CE_BcAhcdR7QaL6lI00_WrIzqxGo9HT_XySbWoKd1xM,34187
|
477
477
|
streamlit/testing/v1/element_tree.py,sha256=PxVskkUEoRQqBUO8EDe9owdm7uyePBCr36Gq_8X8OrE,57730
|
478
|
-
streamlit/testing/v1/local_script_runner.py,sha256=
|
478
|
+
streamlit/testing/v1/local_script_runner.py,sha256=oa00hdDCB0pjVwBR4XGNNxAnOW4YuQCF29lwcHsvTDM,6329
|
479
479
|
streamlit/testing/v1/util.py,sha256=IwxXIlGsVNtC1RmtmgdeBHmJYPjK0wiqNL4HMW6IJZI,1791
|
480
480
|
streamlit/vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
481
481
|
streamlit/vendor/ipython/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -503,9 +503,9 @@ streamlit/web/server/server_util.py,sha256=FptUF-CjFh78VjeTQDi3R78m7E64MDe3wcklg
|
|
503
503
|
streamlit/web/server/stats_request_handler.py,sha256=cL__KbJFIhdhf1Zt6skbLehUqT-jo56x1HARxogZDOI,3680
|
504
504
|
streamlit/web/server/upload_file_request_handler.py,sha256=YPDmKWUnaGH9d4QNcMEsY5k1YIz_q-xW1K5fmgHaDzc,4966
|
505
505
|
streamlit/web/server/websocket_headers.py,sha256=07SkWLcOxbyldl7UcBzrMKY9ZojypCQACiKoh5FcH7Y,1870
|
506
|
-
streamlit_nightly-1.31.2.
|
507
|
-
streamlit_nightly-1.31.2.
|
508
|
-
streamlit_nightly-1.31.2.
|
509
|
-
streamlit_nightly-1.31.2.
|
510
|
-
streamlit_nightly-1.31.2.
|
511
|
-
streamlit_nightly-1.31.2.
|
506
|
+
streamlit_nightly-1.31.2.dev20240221.data/scripts/streamlit.cmd,sha256=ZEYM3vBJSp-k7vwSJ3ba5NzEk9-qHdSeLvGYAAe1mMw,676
|
507
|
+
streamlit_nightly-1.31.2.dev20240221.dist-info/METADATA,sha256=kw1zdzc-CBsaRjLqIPtdVc17NqYSWiHt2CDK0Wy97Ns,8528
|
508
|
+
streamlit_nightly-1.31.2.dev20240221.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
|
509
|
+
streamlit_nightly-1.31.2.dev20240221.dist-info/entry_points.txt,sha256=uNJ4DwGNXEhOK0USwSNanjkYyR-Bk7eYQbJFDrWyOgY,53
|
510
|
+
streamlit_nightly-1.31.2.dev20240221.dist-info/top_level.txt,sha256=V3FhKbm7G2LnR0s4SytavrjIPNIhvcsAGXfYHAwtQzw,10
|
511
|
+
streamlit_nightly-1.31.2.dev20240221.dist-info/RECORD,,
|