streamlit-nightly 1.31.1.dev20240206__py2.py3-none-any.whl → 1.31.1.dev20240208__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/util.py CHANGED
@@ -16,14 +16,27 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
+ import asyncio
19
20
  import dataclasses
20
21
  import functools
21
22
  import hashlib
22
23
  import os
23
24
  import subprocess
24
25
  import sys
25
- from typing import Any, Dict, Iterable, List, Mapping, Set, TypeVar, Union
26
+ from typing import (
27
+ Any,
28
+ Dict,
29
+ Generic,
30
+ Iterable,
31
+ List,
32
+ Mapping,
33
+ Optional,
34
+ Set,
35
+ TypeVar,
36
+ Union,
37
+ )
26
38
 
39
+ from cachetools import TTLCache
27
40
  from typing_extensions import Final
28
41
 
29
42
  from streamlit import env_util
@@ -203,3 +216,37 @@ def extract_key_query_params(
203
216
  for item in sublist
204
217
  ]
205
218
  )
219
+
220
+
221
+ K = TypeVar("K")
222
+ V = TypeVar("V")
223
+
224
+
225
+ class TimedCleanupCache(TTLCache, Generic[K, V]):
226
+ """A TTLCache that asynchronously expires its entries."""
227
+
228
+ def __init__(self, *args, **kwargs):
229
+ super().__init__(*args, **kwargs)
230
+ self._task: Optional[asyncio.Task[Any]] = None
231
+
232
+ def __setitem__(self, key: K, value: V) -> None:
233
+ # Set an expiration task to run periodically
234
+ # Can't be created in init because that only runs once and
235
+ # the event loop might not exist yet.
236
+ if self._task is None:
237
+ try:
238
+ self._task = asyncio.create_task(expire_cache(self))
239
+ except RuntimeError:
240
+ # Just continue if the event loop isn't started yet.
241
+ pass
242
+ super().__setitem__(key, value)
243
+
244
+ def __del__(self):
245
+ if self._task is not None:
246
+ self._task.cancel()
247
+
248
+
249
+ async def expire_cache(cache: TTLCache) -> None:
250
+ while True:
251
+ await asyncio.sleep(30)
252
+ cache.expire()
@@ -32,11 +32,14 @@ How these classes work together
32
32
  listens to folder events, sees if registered paths changed, and fires
33
33
  callbacks if so.
34
34
 
35
+ This module is lazy-loaded and used only if watchdog is installed.
35
36
  """
36
37
 
38
+ from __future__ import annotations
39
+
37
40
  import os
38
41
  import threading
39
- from typing import Callable, Dict, Optional, cast
42
+ from typing import Callable, Dict, Final, cast
40
43
 
41
44
  from blinker import ANY, Signal
42
45
  from watchdog import events
@@ -47,7 +50,7 @@ from streamlit.logger import get_logger
47
50
  from streamlit.util import repr_
48
51
  from streamlit.watcher import util
49
52
 
50
- LOGGER = get_logger(__name__)
53
+ _LOGGER: Final = get_logger(__name__)
51
54
 
52
55
 
53
56
  class EventBasedPathWatcher:
@@ -58,14 +61,14 @@ class EventBasedPathWatcher:
58
61
  """Close the _MultiPathWatcher singleton."""
59
62
  path_watcher = _MultiPathWatcher.get_singleton()
60
63
  path_watcher.close()
61
- LOGGER.debug("Watcher closed")
64
+ _LOGGER.debug("Watcher closed")
62
65
 
63
66
  def __init__(
64
67
  self,
65
68
  path: str,
66
69
  on_changed: Callable[[str], None],
67
70
  *, # keyword-only arguments:
68
- glob_pattern: Optional[str] = None,
71
+ glob_pattern: str | None = None,
69
72
  allow_nonexistent: bool = False,
70
73
  ) -> None:
71
74
  """Constructor for EventBasedPathWatchers.
@@ -76,7 +79,7 @@ class EventBasedPathWatcher:
76
79
  The path to watch.
77
80
  on_changed : Callable[[str], None]
78
81
  Callback to call when the path changes.
79
- glob_pattern : Optional[str]
82
+ glob_pattern : str or None
80
83
  A glob pattern to filter the files in a directory that should be
81
84
  watched. Only relevant when creating an EventBasedPathWatcher on a
82
85
  directory.
@@ -95,7 +98,7 @@ class EventBasedPathWatcher:
95
98
  glob_pattern=glob_pattern,
96
99
  allow_nonexistent=allow_nonexistent,
97
100
  )
98
- LOGGER.debug("Watcher created for %s", self._path)
101
+ _LOGGER.debug("Watcher created for %s", self._path)
99
102
 
100
103
  def __repr__(self) -> str:
101
104
  return repr_(self)
@@ -109,7 +112,7 @@ class EventBasedPathWatcher:
109
112
  class _MultiPathWatcher(object):
110
113
  """Watches multiple paths."""
111
114
 
112
- _singleton: Optional["_MultiPathWatcher"] = None
115
+ _singleton: "_MultiPathWatcher" | None = None
113
116
 
114
117
  @classmethod
115
118
  def get_singleton(cls) -> "_MultiPathWatcher":
@@ -118,7 +121,7 @@ class _MultiPathWatcher(object):
118
121
  Instantiates one if necessary.
119
122
  """
120
123
  if cls._singleton is None:
121
- LOGGER.debug("No singleton. Registering one.")
124
+ _LOGGER.debug("No singleton. Registering one.")
122
125
  _MultiPathWatcher()
123
126
 
124
127
  return cast("_MultiPathWatcher", _MultiPathWatcher._singleton)
@@ -154,7 +157,7 @@ class _MultiPathWatcher(object):
154
157
  path: str,
155
158
  callback: Callable[[str], None],
156
159
  *, # keyword-only arguments:
157
- glob_pattern: Optional[str] = None,
160
+ glob_pattern: str | None = None,
158
161
  allow_nonexistent: bool = False,
159
162
  ) -> None:
160
163
  """Start watching a path."""
@@ -186,7 +189,7 @@ class _MultiPathWatcher(object):
186
189
  folder_handler = self._folder_handlers.get(folder_path)
187
190
 
188
191
  if folder_handler is None:
189
- LOGGER.debug(
192
+ _LOGGER.debug(
190
193
  "Cannot stop watching path, because it is already not being "
191
194
  "watched. %s",
192
195
  folder_path,
@@ -204,12 +207,12 @@ class _MultiPathWatcher(object):
204
207
  """Close this _MultiPathWatcher object forever."""
205
208
  if len(self._folder_handlers) != 0:
206
209
  self._folder_handlers = {}
207
- LOGGER.debug(
210
+ _LOGGER.debug(
208
211
  "Stopping observer thread even though there is a non-zero "
209
212
  "number of event observers!"
210
213
  )
211
214
  else:
212
- LOGGER.debug("Stopping observer thread")
215
+ _LOGGER.debug("Stopping observer thread")
213
216
 
214
217
  self._observer.stop()
215
218
  self._observer.join(timeout=5)
@@ -223,7 +226,7 @@ class WatchedPath(object):
223
226
  md5: str,
224
227
  modification_time: float,
225
228
  *, # keyword-only arguments:
226
- glob_pattern: Optional[str] = None,
229
+ glob_pattern: str | None = None,
227
230
  allow_nonexistent: bool = False,
228
231
  ):
229
232
  self.md5 = md5
@@ -254,7 +257,7 @@ class _FolderEventHandler(events.FileSystemEventHandler):
254
257
  super(_FolderEventHandler, self).__init__()
255
258
  self._watched_paths: Dict[str, WatchedPath] = {}
256
259
  self._lock = threading.Lock() # for watched_paths mutations
257
- self.watch: Optional[ObservedWatch] = None
260
+ self.watch: ObservedWatch | None = None
258
261
 
259
262
  def __repr__(self) -> str:
260
263
  return repr_(self)
@@ -264,7 +267,7 @@ class _FolderEventHandler(events.FileSystemEventHandler):
264
267
  path: str,
265
268
  callback: Callable[[str], None],
266
269
  *, # keyword-only arguments:
267
- glob_pattern: Optional[str] = None,
270
+ glob_pattern: str | None = None,
268
271
  allow_nonexistent: bool = False,
269
272
  ) -> None:
270
273
  """Add a path to this object's event filter."""
@@ -320,7 +323,9 @@ class _FolderEventHandler(events.FileSystemEventHandler):
320
323
  # the desired subtype from the event_type check
321
324
  event = cast(events.FileSystemMovedEvent, event)
322
325
 
323
- LOGGER.debug("Move event: src %s; dest %s", event.src_path, event.dest_path)
326
+ _LOGGER.debug(
327
+ "Move event: src %s; dest %s", event.src_path, event.dest_path
328
+ )
324
329
  changed_path = event.dest_path
325
330
  # On OSX with VI, on save, the file is deleted, the swap file is
326
331
  # modified and then the original file is created hence why we
@@ -328,14 +333,14 @@ class _FolderEventHandler(events.FileSystemEventHandler):
328
333
  elif event.event_type == events.EVENT_TYPE_CREATED:
329
334
  changed_path = event.src_path
330
335
  else:
331
- LOGGER.debug("Don't care about event type %s", event.event_type)
336
+ _LOGGER.debug("Don't care about event type %s", event.event_type)
332
337
  return
333
338
 
334
339
  changed_path = os.path.abspath(changed_path)
335
340
 
336
341
  changed_path_info = self._watched_paths.get(changed_path, None)
337
342
  if changed_path_info is None:
338
- LOGGER.debug(
343
+ _LOGGER.debug(
339
344
  "Ignoring changed path %s.\nWatched_paths: %s",
340
345
  changed_path,
341
346
  self._watched_paths,
@@ -352,7 +357,7 @@ class _FolderEventHandler(events.FileSystemEventHandler):
352
357
  modification_time != 0.0
353
358
  and modification_time == changed_path_info.modification_time
354
359
  ):
355
- LOGGER.debug("File/dir timestamp did not change: %s", changed_path)
360
+ _LOGGER.debug("File/dir timestamp did not change: %s", changed_path)
356
361
  return
357
362
 
358
363
  changed_path_info.modification_time = modification_time
@@ -363,10 +368,10 @@ class _FolderEventHandler(events.FileSystemEventHandler):
363
368
  allow_nonexistent=changed_path_info.allow_nonexistent,
364
369
  )
365
370
  if new_md5 == changed_path_info.md5:
366
- LOGGER.debug("File/dir MD5 did not change: %s", changed_path)
371
+ _LOGGER.debug("File/dir MD5 did not change: %s", changed_path)
367
372
  return
368
373
 
369
- LOGGER.debug("File/dir MD5 changed: %s", changed_path)
374
+ _LOGGER.debug("File/dir MD5 changed: %s", changed_path)
370
375
  changed_path_info.md5 = new_md5
371
376
  changed_path_info.on_changed.send(changed_path)
372
377
 
@@ -12,9 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import Callable, Optional, Type, Union
15
+ from __future__ import annotations
16
16
 
17
- import click
17
+ from typing import Callable, Type, Union
18
18
 
19
19
  import streamlit.watcher
20
20
  from streamlit import config, env_util
@@ -23,18 +23,6 @@ from streamlit.watcher.polling_path_watcher import PollingPathWatcher
23
23
 
24
24
  LOGGER = get_logger(__name__)
25
25
 
26
- try:
27
- # Check if the watchdog module is installed.
28
- from streamlit.watcher.event_based_path_watcher import EventBasedPathWatcher
29
-
30
- watchdog_available = True
31
- except ImportError:
32
- watchdog_available = False
33
- # Stub the EventBasedPathWatcher so it can be mocked by tests
34
-
35
- class EventBasedPathWatcher: # type: ignore
36
- pass
37
-
38
26
 
39
27
  # local_sources_watcher.py caches the return value of
40
28
  # get_default_path_watcher_class(), so it needs to differentiate between the
@@ -50,7 +38,7 @@ class NoOpPathWatcher:
50
38
  _path_str: str,
51
39
  _on_changed: Callable[[str], None],
52
40
  *, # keyword-only arguments:
53
- glob_pattern: Optional[str] = None,
41
+ glob_pattern: str | None = None,
54
42
  allow_nonexistent: bool = False,
55
43
  ):
56
44
  pass
@@ -66,32 +54,46 @@ PathWatcherType = Union[
66
54
  ]
67
55
 
68
56
 
57
+ def _is_watchdog_available() -> bool:
58
+ """Check if the watchdog module is installed."""
59
+ try:
60
+ import watchdog # noqa: F401
61
+
62
+ return True
63
+ except ImportError:
64
+ return False
65
+
66
+
69
67
  def report_watchdog_availability():
70
- if not watchdog_available:
71
- if not config.get_option("global.disableWatchdogWarning") and config.get_option(
72
- "server.fileWatcherType"
73
- ) not in ["poll", "none"]:
74
- msg = "\n $ xcode-select --install" if env_util.IS_DARWIN else ""
75
-
76
- click.secho(
77
- " %s" % "For better performance, install the Watchdog module:",
78
- fg="blue",
79
- bold=True,
80
- )
81
- click.secho(
82
- """%s
68
+ if (
69
+ not config.get_option("global.disableWatchdogWarning")
70
+ and config.get_option("server.fileWatcherType") not in ["poll", "none"]
71
+ and not _is_watchdog_available()
72
+ ):
73
+ import click
74
+
75
+ msg = "\n $ xcode-select --install" if env_util.IS_DARWIN else ""
76
+
77
+ print("print message")
78
+ click.secho(
79
+ " %s" % "For better performance, install the Watchdog module:",
80
+ fg="blue",
81
+ bold=True,
82
+ )
83
+ click.secho(
84
+ """%s
83
85
  $ pip install watchdog
84
86
  """
85
- % msg
86
- )
87
+ % msg
88
+ )
87
89
 
88
90
 
89
91
  def _watch_path(
90
92
  path: str,
91
93
  on_path_changed: Callable[[str], None],
92
- watcher_type: Optional[str] = None,
94
+ watcher_type: str | None = None,
93
95
  *, # keyword-only arguments:
94
- glob_pattern: Optional[str] = None,
96
+ glob_pattern: str | None = None,
95
97
  allow_nonexistent: bool = False,
96
98
  ) -> bool:
97
99
  """Create a PathWatcher for the given path if we have a viable
@@ -139,7 +141,7 @@ def _watch_path(
139
141
  def watch_file(
140
142
  path: str,
141
143
  on_file_changed: Callable[[str], None],
142
- watcher_type: Optional[str] = None,
144
+ watcher_type: str | None = None,
143
145
  ) -> bool:
144
146
  return _watch_path(path, on_file_changed, watcher_type)
145
147
 
@@ -147,9 +149,9 @@ def watch_file(
147
149
  def watch_dir(
148
150
  path: str,
149
151
  on_dir_changed: Callable[[str], None],
150
- watcher_type: Optional[str] = None,
152
+ watcher_type: str | None = None,
151
153
  *, # keyword-only arguments:
152
- glob_pattern: Optional[str] = None,
154
+ glob_pattern: str | None = None,
153
155
  allow_nonexistent: bool = False,
154
156
  ) -> bool:
155
157
  return _watch_path(
@@ -172,13 +174,13 @@ def get_path_watcher_class(watcher_type: str) -> PathWatcherType:
172
174
  """Return the PathWatcher class that corresponds to the given watcher_type
173
175
  string. Acceptable values are 'auto', 'watchdog', 'poll' and 'none'.
174
176
  """
175
- if watcher_type == "auto":
176
- if watchdog_available:
177
- return EventBasedPathWatcher
178
- else:
179
- return PollingPathWatcher
180
- elif watcher_type == "watchdog" and watchdog_available:
177
+ if watcher_type in {"watchdog", "auto"} and _is_watchdog_available():
178
+ # Lazy-import this module to prevent unnecessary imports of the watchdog package.
179
+ from streamlit.watcher.event_based_path_watcher import EventBasedPathWatcher
180
+
181
181
  return EventBasedPathWatcher
182
+ elif watcher_type == "auto":
183
+ return PollingPathWatcher
182
184
  elif watcher_type == "poll":
183
185
  return PollingPathWatcher
184
186
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: streamlit-nightly
3
- Version: 1.31.1.dev20240206
3
+ Version: 1.31.1.dev20240208
4
4
  Summary: A faster way to build and share data apps
5
5
  Home-page: https://streamlit.io
6
6
  Author: Snowflake Inc
@@ -41,13 +41,11 @@ Requires-Dist: pandas <3,>=1.3.0
41
41
  Requires-Dist: pillow <11,>=7.1.0
42
42
  Requires-Dist: protobuf <5,>=3.20
43
43
  Requires-Dist: pyarrow >=7.0
44
- Requires-Dist: python-dateutil <3,>=2.7.3
45
44
  Requires-Dist: requests <3,>=2.27
46
45
  Requires-Dist: rich <14,>=10.14.0
47
46
  Requires-Dist: tenacity <9,>=8.1.0
48
47
  Requires-Dist: toml <2,>=0.10.1
49
48
  Requires-Dist: typing-extensions <5,>=4.3.0
50
- Requires-Dist: tzlocal <6,>=1.1
51
49
  Requires-Dist: gitpython !=3.1.19,<4,>=3.0.7
52
50
  Requires-Dist: pydeck <1,>=0.8.0b4
53
51
  Requires-Dist: tornado <7,>=6.0.3
@@ -13,7 +13,7 @@ streamlit/delta_generator.py,sha256=vyQjPO7-7_SU_hZj2UlQa2_YLVmeYzOm9O_Vo5PMq6w,
13
13
  streamlit/deprecation_util.py,sha256=biYcvN42E7QSXYLW8YSQ31fri5GbyS4Ng23ecgtiAmc,6507
14
14
  streamlit/development.py,sha256=iO-KQc62Do9uSwoa5vV2tfImqz3QPhJ1Md6DETcnHkc,813
15
15
  streamlit/echo.py,sha256=e7ajxD6vLb4fgxQU8HLSL0CoXZtOLLMhe-Kj9aCjfDI,4060
16
- streamlit/emojis.py,sha256=Yauqv2__o2NBx42L3lrUu_lmkLNanV9xHExqHZT1hZY,68467
16
+ streamlit/emojis.py,sha256=NlcPqVtDyUQmq9eLJVncvPtDQz3L1vYy3vz_vd_f1h0,73749
17
17
  streamlit/env_util.py,sha256=Qa25r9udbwOPyjl98847ON91OJF46imKkiBRT7ZU9kw,1726
18
18
  streamlit/error_util.py,sha256=RNjZiqGZuHW8AAynwKws2kEt_QhIlKlB0oM4nLVCaxE,3544
19
19
  streamlit/errors.py,sha256=wZ8UhdkiK9xnVMN0brwJ3g4u2Rknbuz1ST4Dnq4FG6U,3895
@@ -26,15 +26,15 @@ streamlit/net_util.py,sha256=O5peQJU0rq0l6HD0AzkK3Xhh197J3_S_IG8H8NUNk-Y,3269
26
26
  streamlit/platform.py,sha256=TR2l04Fumhvw7GYhK7qol8I2isJOihW0sD_77SDyAjo,1068
27
27
  streamlit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  streamlit/source_util.py,sha256=Fhh5hF2jQHa73_-7op5PIh_90wxf8lF4YVezb1W_aNE,5693
29
- streamlit/string_util.py,sha256=8620w3_Kjk024ug0iyFMV75yGiq9EFDg9Dg-gz9tfXE,4614
29
+ streamlit/string_util.py,sha256=e0B0aDWAhPk_D7PIzM3lg5yTlh7DSNgBGkPutsyCBes,4986
30
30
  streamlit/temporary_directory.py,sha256=5TIFR3vnycZcg--i8KWBFit0Sekj9n8-ELR86QWpehM,1599
31
31
  streamlit/type_util.py,sha256=4lxZamfWc5JfGX6Q2s0dGfsW6L1FMKQQU_UVPNFmFaI,43636
32
32
  streamlit/url_util.py,sha256=y8j1sPL4BXEDtKwnCdfPu_Vqi0z7rXwEt2AZuYuwAx0,3167
33
33
  streamlit/user_info.py,sha256=HRgLsioCbUP2DNhTDXDyOvWL7i2c65RwFHvF4_WO3hY,3448
34
- streamlit/util.py,sha256=OjZXmz5t_h7SOuvauezUxuQblyUsxd_BzG2-WKGzuxI,6402
34
+ streamlit/util.py,sha256=p7TFFVV6f7MgV1i7Avyv_e80VMai7Nd9ZfEHfSqK61E,7515
35
35
  streamlit/version.py,sha256=Fhz_UwW47O6ygs8GRjNYjO1r-0IRZmeViaV3Rgg9hN8,3365
36
36
  streamlit/commands/__init__.py,sha256=Vrf1yVMOcTyhUPnYvsfyeL96Vpd5z8KoSV5ZzTcTQgU,616
37
- streamlit/commands/execution_control.py,sha256=uBN-K3Ns8yUokC0NLsl9oQegJLALSV7JgSJ5f8kfGvA,5427
37
+ streamlit/commands/execution_control.py,sha256=RCYLqdqqwy3fOv4_Tk6vqKOe4jJjEh4nmI6Ecn2GpGI,5525
38
38
  streamlit/commands/experimental_query_params.py,sha256=UDBEWoAxQ0igHwfKiS9r0UV3x5X0R4I1-y6WSVE62YA,5026
39
39
  streamlit/commands/page_config.py,sha256=9EdUdL4WKaYgBIUiaRMsiUYrRzu7RlN6wFEWNwgTK30,11770
40
40
  streamlit/components/__init__.py,sha256=Vrf1yVMOcTyhUPnYvsfyeL96Vpd5z8KoSV5ZzTcTQgU,616
@@ -71,7 +71,7 @@ streamlit/elements/map.py,sha256=m56soyPS6D203PtoFE_Iy5H5h190J5YS7SMqc2ofGFE,162
71
71
  streamlit/elements/markdown.py,sha256=rSsKWigW6ojZOYN4szreSSRPb6tGQVRaqIBW-mIKLNw,9912
72
72
  streamlit/elements/media.py,sha256=qoYb0zrGTIjKwAH6vr73rQB-fDOf6ESo5QboFZfwnM0,14738
73
73
  streamlit/elements/metric.py,sha256=jKrpoIbSlKQI_Xw7Cy5ZxtJ0Bc-eKgdgDB3zBsuSJO4,9882
74
- streamlit/elements/plotly_chart.py,sha256=H2ZW64lJH60KK_uk-zS1jEQ_cIhi6z3ubzfjgmbFiGs,8810
74
+ streamlit/elements/plotly_chart.py,sha256=VFQVV4VS0T2-crKeeFQu-IM4LBTKw5e-K9d97INpess,8574
75
75
  streamlit/elements/progress.py,sha256=fIL9uzigizdhu47kVDDmwueChn8w3v8apXj9OLjaLgA,5628
76
76
  streamlit/elements/pyplot.py,sha256=udVkpFR5jNNJPKScsIlH1GEJrRYy_bCWJwVU_aMEBK8,6578
77
77
  streamlit/elements/snow.py,sha256=LScypkYNNPWEnEwElspnAuHo8OqBmwJfyAo7dcjGezc,1407
@@ -86,9 +86,9 @@ streamlit/elements/lib/column_types.py,sha256=QOOl3XTJeQYaPhMd_5xzyzYgYrGpkCvxNq
86
86
  streamlit/elements/lib/dicttools.py,sha256=FCO6mE_ftSd_DOoe-yGZo0HtsRNWxzTgMnjzHY8ZKaI,3729
87
87
  streamlit/elements/lib/mutable_status_container.py,sha256=sTggV0YT3DdvHDfOag1WG65a0TpUNf6qjbyestE5uKc,6665
88
88
  streamlit/elements/lib/pandas_styler_utils.py,sha256=PS5DUkLFvK_fncylfatPBoOdKfaXtszY9YZERnw6MXI,8029
89
- streamlit/elements/lib/streamlit_plotly_theme.py,sha256=wy6q0F_zQRxg58uQqK9PBd1ktdiiZulYy8n6hki8suk,6412
89
+ streamlit/elements/lib/streamlit_plotly_theme.py,sha256=hUFcWTOoz3EY0us7qQJ020aswFm5WdEIRJZ8bki7Vqg,8271
90
90
  streamlit/elements/widgets/__init__.py,sha256=Vrf1yVMOcTyhUPnYvsfyeL96Vpd5z8KoSV5ZzTcTQgU,616
91
- streamlit/elements/widgets/button.py,sha256=5p7LUTPBmiek4gindhSpftD8Gxj3vtVl-wCVt1KyaQk,30903
91
+ streamlit/elements/widgets/button.py,sha256=UKyXpAE4Rg5Z88BkxQp3nHyv638G7jZA5G9b67o0NWY,31005
92
92
  streamlit/elements/widgets/camera_input.py,sha256=8Sr6WclJSAdWSRjzVKYJ4KtLkXbItCeNU2yyu6U4PO0,8824
93
93
  streamlit/elements/widgets/chat.py,sha256=654A0eTymi9_y1XI8HyzDPq1K4yJkGGl6o3f6bNbEZM,13272
94
94
  streamlit/elements/widgets/checkbox.py,sha256=Qww5Qyyb80PWSa3AOVlECWDjlKinE3URwn79pHrl66c,12101
@@ -102,7 +102,7 @@ streamlit/elements/widgets/select_slider.py,sha256=cnF87WW38AoF-o7U4VFp-U_SSPXF6
102
102
  streamlit/elements/widgets/selectbox.py,sha256=jpfea7hLfXgSg8al16uATH36hCMKR2KSBQoklrfN8nI,11100
103
103
  streamlit/elements/widgets/slider.py,sha256=ZYQDGjO4BLbf8lmoYuCGfgAEVZcRIvZoJz5Woeq0UBI,26078
104
104
  streamlit/elements/widgets/text_widgets.py,sha256=Sg0ilJMVRy9fFnFwrKF7OF82w48cEJuna_VbB_d2iAg,21449
105
- streamlit/elements/widgets/time_widgets.py,sha256=N8mERtuM1yCVf54MCgsy6rNMMbNgI9In9RRVSfxBpt4,29136
105
+ streamlit/elements/widgets/time_widgets.py,sha256=pJ4MHaWgqyexg3ZWsai6s_Pcv_PaBduAKo7P8XeeWC4,29804
106
106
  streamlit/external/__init__.py,sha256=Vrf1yVMOcTyhUPnYvsfyeL96Vpd5z8KoSV5ZzTcTQgU,616
107
107
  streamlit/external/langchain/__init__.py,sha256=sAzaNf4Cje3cJikPBVvF7pj1sEdEvUfKIEY_Z6Zk8cA,814
108
108
  streamlit/external/langchain/streamlit_callback_handler.py,sha256=igBj1-BAtRSZk1W_lhEGXzA85zM5tPl1_VaXuCtjEqo,15225
@@ -267,7 +267,7 @@ streamlit/runtime/forward_msg_queue.py,sha256=VEHPHRAr8dhP80nUweq75xGpoU9ujr_Buz
267
267
  streamlit/runtime/media_file_manager.py,sha256=Mdrcq3mPJx4ZIDYISUyL744Uk54Eggi7GhTaRLDGzhA,8494
268
268
  streamlit/runtime/media_file_storage.py,sha256=XaFS4Lv-Ja74tLYq0y7QZ4zCbbTKqY0HyA8ULHUMaR4,4401
269
269
  streamlit/runtime/memory_media_file_storage.py,sha256=0uQK9WmCG4BHp4ByhUodgQTxGBMPDTt4QnIrg6AQZv8,6342
270
- streamlit/runtime/memory_session_storage.py,sha256=YMCMvc3jsqnFcYWMCgSy1uE4UAJpNpfz2YFTVbUgd9U,2923
270
+ streamlit/runtime/memory_session_storage.py,sha256=C3-deKlPZgUI4VhhuFYuqerIwfiq0EjSIzjaisdhfpo,2945
271
271
  streamlit/runtime/memory_uploaded_file_manager.py,sha256=lDrwUMeVKwfHjc47hX2ZZEAe99P8XlBHUX0m9k8eV_s,4469
272
272
  streamlit/runtime/metrics_util.py,sha256=4I1TrALnVn7Pl0a3bNQfjqL_45jsTic8nTsBf7BNjGI,14146
273
273
  streamlit/runtime/runtime.py,sha256=8OPZabSDWAKmFhA7KWPeCUB7KqHgGRV0uVexBUxpOGI,28146
@@ -281,7 +281,7 @@ streamlit/runtime/websocket_session_manager.py,sha256=ILbT86PWN-z2DyOxcAMqz-oPGD
281
281
  streamlit/runtime/caching/__init__.py,sha256=anR_SzNOFYDo_9_Y9liP5JnmTWjs3kq1kVX7maRfDNg,5012
282
282
  streamlit/runtime/caching/cache_data_api.py,sha256=LFcbq8v0aXKtLrJ26MtY-DoslUk24j8SsbcDK1Utee8,26114
283
283
  streamlit/runtime/caching/cache_errors.py,sha256=u9LQlKKgq1XOVZA83eUhlKb1xhIFV6M50gIL2odcrEs,6351
284
- streamlit/runtime/caching/cache_resource_api.py,sha256=Y405XCKmNvjAy7GmhJuSleZyagwPZmVl_qfTgPOUeyk,21206
284
+ streamlit/runtime/caching/cache_resource_api.py,sha256=I38CLKjhE7W5IItlCWs5iK4k7UEFB_yDIlzUsAUVFII,21324
285
285
  streamlit/runtime/caching/cache_type.py,sha256=r_tzxXL_BAgVYTJr57qAiCjxoSdU7DdPRVliGGcKIaU,1095
286
286
  streamlit/runtime/caching/cache_utils.py,sha256=5_lwMB1Qp4MJzIvhGPy_aKjHazpq1ebnO14GdgsiGKg,17725
287
287
  streamlit/runtime/caching/cached_message_replay.py,sha256=qxpwVc5Kvqd9sU1bKW5XQ-iDBFgzuYl9eGZG26i9ibM,18540
@@ -289,10 +289,10 @@ streamlit/runtime/caching/hashing.py,sha256=i92xuOpNJlMJfdw6wqIbU7IQX_YUGvS9Mk9f
289
289
  streamlit/runtime/caching/storage/__init__.py,sha256=b3JyzTI6Nyc3htcNZAq_f-XP3jMqnW2UNEbK3bm8bVs,965
290
290
  streamlit/runtime/caching/storage/cache_storage_protocol.py,sha256=oPJ4FVlP49lVQD647P4yQkG2C3xjZpf03vuqOi48znc,8934
291
291
  streamlit/runtime/caching/storage/dummy_cache_storage.py,sha256=IVQJs1KH3kkn0dc8YsLs3F7FX9wn2ZzTmyRgCTg7MYo,1945
292
- streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py,sha256=VT5DysXStpsZiQo2fAkx6TXY_ijoon2ki338HjEIvzI,5389
292
+ streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py,sha256=jwQAJ-mD0BTR3UE9S_hfE-E_MQ8Yi8I7TbSMeeIrrq0,5419
293
293
  streamlit/runtime/caching/storage/local_disk_cache_storage.py,sha256=Fhf4OpteVq-jtHYnvsMXW9_dssNpEwGutXW2OPOKUXc,9274
294
294
  streamlit/runtime/legacy_caching/__init__.py,sha256=ZheHazCFZe8JnS8Bil9ONsCvyLD8dlrHvZRMQTb1Lw0,879
295
- streamlit/runtime/legacy_caching/caching.py,sha256=X3dQaO-MuYQE0kn1fktqmN9CEKbFmkPRerEytU38W5Q,30630
295
+ streamlit/runtime/legacy_caching/caching.py,sha256=1rOP7CdrORU5TQ8NGPGcd_aodnxUX_dSwn3h6MZnV8s,30721
296
296
  streamlit/runtime/legacy_caching/hashing.py,sha256=l7f9tXVFnM44YxPWvvfHNIWZ6fJquuBzchpFd0hwa5o,35011
297
297
  streamlit/runtime/scriptrunner/__init__.py,sha256=QpX77DVR8S2lhf7tC_5dcYRyJ2290_NHX4j6WL-N6Bo,1159
298
298
  streamlit/runtime/scriptrunner/magic.py,sha256=qDTmwEtlctEGESmat_UFwYEYVtAODKhrMo6TFzrrbqU,8936
@@ -300,13 +300,13 @@ streamlit/runtime/scriptrunner/magic_funcs.py,sha256=28qS0WILPxvR_KA3LfrdtsDCnGH
300
300
  streamlit/runtime/scriptrunner/script_cache.py,sha256=ZpaB4T50_GYfhMc2dajSMXWCmS3kaUJ_tPHNVt_flBg,2856
301
301
  streamlit/runtime/scriptrunner/script_requests.py,sha256=jMEmYl4jBiUysznnvxcvXiT_vePtaFn0k-wNeLgB55s,7125
302
302
  streamlit/runtime/scriptrunner/script_run_context.py,sha256=jXI-krUNWvKvt3MdpluDtflpOvuepru3D51XN4vuXT8,8488
303
- streamlit/runtime/scriptrunner/script_runner.py,sha256=hsz_veNsByrGNRLmZYhBY7uVB5InQwmfXSueKtzYFng,25866
303
+ streamlit/runtime/scriptrunner/script_runner.py,sha256=rVf4gAC1V040oG2s0sdQ99sPJ2iz-XCTlqm-tlYFLog,26765
304
304
  streamlit/runtime/state/__init__.py,sha256=UpfNfPrWJ6rVdD-qc0IP_bwZ4MrcNUjyU9wEKDK-eWM,1528
305
305
  streamlit/runtime/state/common.py,sha256=7p_wX1jegw_7KYeU8-oHqxOQKK5HybSLU7b1c1_1skA,7579
306
306
  streamlit/runtime/state/query_params.py,sha256=u2nniR96bdhV0IgXxtcnox7qp4Ydv-_VhjTD4uOUPLk,5847
307
307
  streamlit/runtime/state/query_params_proxy.py,sha256=T9uWnIEG7Pq5ZzmyAp2JtYtmst-DbvPOexy7RvxsFaY,4457
308
308
  streamlit/runtime/state/safe_session_state.py,sha256=UIhqIDtpqP9sX7n3xo1o6X1ft-x6u7uHd34p8MoUAD0,5163
309
- streamlit/runtime/state/session_state.py,sha256=CgG6f_al4llJ6W9tGvSRZoT-86KIssUkGxfhBG9KblY,26146
309
+ streamlit/runtime/state/session_state.py,sha256=B2oRkA-uxFAWVlDZUhHzreTI-Kyln-W3xUgR_e-YHl4,26224
310
310
  streamlit/runtime/state/session_state_proxy.py,sha256=cQBtnC1S2awdXlKPKHPJxdQiL5bjObCjYnhyAGkep6g,5117
311
311
  streamlit/runtime/state/widgets.py,sha256=ll32bOSRCA0eGq8JKWUfhsxBHBGRN8HZo00oFlWh68o,10998
312
312
  streamlit/static/asset-manifest.json,sha256=K7AzUHCQz9SfkP2EAgNkoyUcAnwuQgrbEGv09KvvEto,14229
@@ -482,9 +482,9 @@ streamlit/vendor/ipython/modified_sys_path.py,sha256=ZqgBdpdyc_pWkieJUhKDdmW9sIQ
482
482
  streamlit/vendor/pympler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
483
483
  streamlit/vendor/pympler/asizeof.py,sha256=noLIqizkYzTkYtA4k8fyvKeiIh8fW9ipW27YP56kQ6o,87925
484
484
  streamlit/watcher/__init__.py,sha256=Tn9E295dBAPIF38TAiWdfIoCsJWXU6rgY1FlxNmLqUU,915
485
- streamlit/watcher/event_based_path_watcher.py,sha256=XfBAzaXXkiBeydVsmexnqFSlYoThyGw9Iq6kNfbQ4tc,13925
485
+ streamlit/watcher/event_based_path_watcher.py,sha256=c9xWFVbKTXP9BZVMQJwYzu1MEDNFYwvL70dWfz8DP_0,14055
486
486
  streamlit/watcher/local_sources_watcher.py,sha256=HLcCVQaqNuFYfFicltV6qOFf2nh6KB5sf7XO1KDs8qw,8169
487
- streamlit/watcher/path_watcher.py,sha256=P2M5U2uvtace7AzBJelJbKM28WKH2kizTYP_7fPRs6I,5772
487
+ streamlit/watcher/path_watcher.py,sha256=dHYxCvhtiQCerHkxBSM7TlCqh8Wx9MCwn4PLdPDQruE,5748
488
488
  streamlit/watcher/polling_path_watcher.py,sha256=de4I5qb9tVy1npLllTiW3z5Ij9QC47robSbfGXlwy8I,3769
489
489
  streamlit/watcher/util.py,sha256=cGNY2hmlk3K_i4VBQQ0yTZ49G1TE9zjNz3pBpAF4FOA,5198
490
490
  streamlit/web/__init__.py,sha256=Vrf1yVMOcTyhUPnYvsfyeL96Vpd5z8KoSV5ZzTcTQgU,616
@@ -502,9 +502,9 @@ streamlit/web/server/server_util.py,sha256=_-RaGl6LU3gebVlW1W6VTAK_6G1S7Zv9ioSW2
502
502
  streamlit/web/server/stats_request_handler.py,sha256=namo6XxyEeACPbKlA9UjnXsJX8pMgVAQDmd7l1iUQvA,3410
503
503
  streamlit/web/server/upload_file_request_handler.py,sha256=WT7SnV6O6hmaK6K2R0smAvvf6LAL-UIMj1ucm5I7514,5034
504
504
  streamlit/web/server/websocket_headers.py,sha256=wZOcWCOZWIfn_omo6ymuy_HaMKa2MMHgri9I2aOggYw,1872
505
- streamlit_nightly-1.31.1.dev20240206.data/scripts/streamlit.cmd,sha256=ZEYM3vBJSp-k7vwSJ3ba5NzEk9-qHdSeLvGYAAe1mMw,676
506
- streamlit_nightly-1.31.1.dev20240206.dist-info/METADATA,sha256=GmYAmcGj4kaH4dzoQt8p-M5IV_KzhzmPCm3dM8jwmuo,8602
507
- streamlit_nightly-1.31.1.dev20240206.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
508
- streamlit_nightly-1.31.1.dev20240206.dist-info/entry_points.txt,sha256=uNJ4DwGNXEhOK0USwSNanjkYyR-Bk7eYQbJFDrWyOgY,53
509
- streamlit_nightly-1.31.1.dev20240206.dist-info/top_level.txt,sha256=V3FhKbm7G2LnR0s4SytavrjIPNIhvcsAGXfYHAwtQzw,10
510
- streamlit_nightly-1.31.1.dev20240206.dist-info/RECORD,,
505
+ streamlit_nightly-1.31.1.dev20240208.data/scripts/streamlit.cmd,sha256=ZEYM3vBJSp-k7vwSJ3ba5NzEk9-qHdSeLvGYAAe1mMw,676
506
+ streamlit_nightly-1.31.1.dev20240208.dist-info/METADATA,sha256=MWEov8KLMJXBCwKhJjG3pvij_hDqmfMfaJFHnQGaCmI,8528
507
+ streamlit_nightly-1.31.1.dev20240208.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
508
+ streamlit_nightly-1.31.1.dev20240208.dist-info/entry_points.txt,sha256=uNJ4DwGNXEhOK0USwSNanjkYyR-Bk7eYQbJFDrWyOgY,53
509
+ streamlit_nightly-1.31.1.dev20240208.dist-info/top_level.txt,sha256=V3FhKbm7G2LnR0s4SytavrjIPNIhvcsAGXfYHAwtQzw,10
510
+ streamlit_nightly-1.31.1.dev20240208.dist-info/RECORD,,