streamlit-nightly 1.38.1.dev20240916__py2.py3-none-any.whl → 1.38.1.dev20240917__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.
@@ -280,6 +280,56 @@ def _missing_key_error_message(key: str) -> str:
280
280
  )
281
281
 
282
282
 
283
+ @dataclass
284
+ class KeyIdMapper:
285
+ """A mapping of user-provided keys to element IDs.
286
+ It also maps element IDs to user-provided keys so that this reverse mapping
287
+ does not have to be computed ad-hoc.
288
+ All built-in dict-operations such as setting and deleting expect the key as the
289
+ argument, not the element ID.
290
+ """
291
+
292
+ _key_id_mapping: dict[str, str] = field(default_factory=dict)
293
+ _id_key_mapping: dict[str, str] = field(default_factory=dict)
294
+
295
+ def __contains__(self, key: str) -> bool:
296
+ return key in self._key_id_mapping
297
+
298
+ def __setitem__(self, key: str, widget_id: Any) -> None:
299
+ self._key_id_mapping[key] = widget_id
300
+ self._id_key_mapping[widget_id] = key
301
+
302
+ def __delitem__(self, key: str) -> None:
303
+ self.delete(key)
304
+
305
+ @property
306
+ def id_key_mapping(self) -> dict[str, str]:
307
+ return self._id_key_mapping
308
+
309
+ def set_key_id_mapping(self, key_id_mapping: dict[str, str]) -> None:
310
+ self._key_id_mapping = key_id_mapping
311
+ self._id_key_mapping = {v: k for k, v in key_id_mapping.items()}
312
+
313
+ def get_id_from_key(self, key: str, default: Any = None) -> str:
314
+ return self._key_id_mapping.get(key, default)
315
+
316
+ def get_key_from_id(self, widget_id: str) -> str:
317
+ return self._id_key_mapping[widget_id]
318
+
319
+ def update(self, other: KeyIdMapper) -> None:
320
+ self._key_id_mapping.update(other._key_id_mapping)
321
+ self._id_key_mapping.update(other._id_key_mapping)
322
+
323
+ def clear(self):
324
+ self._key_id_mapping.clear()
325
+ self._id_key_mapping.clear()
326
+
327
+ def delete(self, key: str):
328
+ widget_id = self._key_id_mapping[key]
329
+ del self._key_id_mapping[key]
330
+ del self._id_key_mapping[widget_id]
331
+
332
+
283
333
  @dataclass
284
334
  class SessionState:
285
335
  """SessionState allows users to store values that persist between app
@@ -308,10 +358,11 @@ class SessionState:
308
358
  # Widget values from the frontend, usually one changing prompted the script rerun
309
359
  _new_widget_state: WStates = field(default_factory=WStates)
310
360
 
311
- # Keys used for widgets will be eagerly converted to the matching widget id
312
- _key_id_mapping: dict[str, str] = field(default_factory=dict)
361
+ # Keys used for widgets will be eagerly converted to the matching element id
362
+ _key_id_mapper: KeyIdMapper = field(default_factory=KeyIdMapper)
313
363
 
314
- # query params are stored in session state because query params will be tied with widget state at one point.
364
+ # query params are stored in session state because query params will be tied with
365
+ # widget state at one point.
315
366
  query_params: QueryParams = field(default_factory=QueryParams)
316
367
 
317
368
  def __repr__(self):
@@ -338,13 +389,13 @@ class SessionState:
338
389
  self._old_state.clear()
339
390
  self._new_session_state.clear()
340
391
  self._new_widget_state.clear()
341
- self._key_id_mapping.clear()
392
+ self._key_id_mapper.clear()
342
393
 
343
394
  @property
344
395
  def filtered_state(self) -> dict[str, Any]:
345
396
  """The combined session and widget state, excluding keyless widgets."""
346
397
 
347
- wid_key_map = self._reverse_key_wid_map
398
+ wid_key_map = self._key_id_mapper.id_key_mapping
348
399
 
349
400
  state: dict[str, Any] = {}
350
401
 
@@ -366,12 +417,6 @@ class SessionState:
366
417
 
367
418
  return state
368
419
 
369
- @property
370
- def _reverse_key_wid_map(self) -> dict[str, str]:
371
- """Return a mapping of widget_id : widget_key."""
372
- wid_key_map = {v: k for k, v in self._key_id_mapping.items()}
373
- return wid_key_map
374
-
375
420
  def _keys(self) -> set[str]:
376
421
  """All keys active in Session State, with widget keys converted
377
422
  to widget ids when one is known. (This includes autogenerated keys
@@ -400,7 +445,7 @@ class SessionState:
400
445
  return len(self._keys())
401
446
 
402
447
  def __getitem__(self, key: str) -> Any:
403
- wid_key_map = self._reverse_key_wid_map
448
+ wid_key_map = self._key_id_mapper.id_key_mapping
404
449
  widget_id = self._get_widget_id(key)
405
450
 
406
451
  if widget_id in wid_key_map and widget_id == key:
@@ -463,7 +508,7 @@ class SessionState:
463
508
  ctx = get_script_run_ctx()
464
509
 
465
510
  if ctx is not None:
466
- widget_id = self._key_id_mapping.get(user_key, None)
511
+ widget_id = self._key_id_mapper.get_id_from_key(user_key, None)
467
512
  widget_ids = ctx.widget_ids_this_run
468
513
  form_ids = ctx.form_ids_this_run
469
514
 
@@ -487,8 +532,8 @@ class SessionState:
487
532
  if key in self._old_state:
488
533
  del self._old_state[key]
489
534
 
490
- if key in self._key_id_mapping:
491
- del self._key_id_mapping[key]
535
+ if key in self._key_id_mapper:
536
+ self._key_id_mapper.delete(key)
492
537
 
493
538
  if widget_id in self._new_widget_state:
494
539
  del self._new_widget_state[widget_id]
@@ -608,10 +653,10 @@ class SessionState:
608
653
  """Turns a value that might be a widget id or a user provided key into
609
654
  an appropriate widget id.
610
655
  """
611
- return self._key_id_mapping.get(k, k)
656
+ return self._key_id_mapper.get_id_from_key(k, k)
612
657
 
613
658
  def _set_key_widget_mapping(self, widget_id: str, user_key: str) -> None:
614
- self._key_id_mapping[user_key] = widget_id
659
+ self._key_id_mapper[user_key] = widget_id
615
660
 
616
661
  def register_widget(
617
662
  self, metadata: WidgetMetadata[T], user_key: str | None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: streamlit-nightly
3
- Version: 1.38.1.dev20240916
3
+ Version: 1.38.1.dev20240917
4
4
  Summary: A faster way to build and share data apps
5
5
  Home-page: https://streamlit.io
6
6
  Author: Snowflake Inc
@@ -341,7 +341,7 @@ streamlit/runtime/state/common.py,sha256=0yt_5A245enbYCLbWp5NO6inc5SrtISvaEyjoXz
341
341
  streamlit/runtime/state/query_params.py,sha256=kCNQI99ctEGY7B2q49D9RM1vGGlZn9b4IqTxtMM9BJs,7507
342
342
  streamlit/runtime/state/query_params_proxy.py,sha256=_DJnRsoZmIUpeNXP_9Ixa4GrU4xZ9E1t5ixDyDKJ0fM,7155
343
343
  streamlit/runtime/state/safe_session_state.py,sha256=WLFFyMtP4F19TWWBarKtSP942IepI2eeSBhifwbuFgY,5222
344
- streamlit/runtime/state/session_state.py,sha256=7cQWvmHdRVvsYhxzwPrr8mFR729NeGT-sfjRglHKE90,27298
344
+ streamlit/runtime/state/session_state.py,sha256=SMBWsSZY29jAgL3QfX4xvJr9aLCNrHHUz9AmosX7FlQ,28850
345
345
  streamlit/runtime/state/session_state_proxy.py,sha256=IWF43f6UWL4KyxNWF3aTv1sbykNI2hI5UsPF2UIfpdE,5524
346
346
  streamlit/runtime/state/widgets.py,sha256=BS7Xq0kFbu7N2tFEm5zlcDPCpDYhM09grH7Nf7DNvfg,6620
347
347
  streamlit/static/asset-manifest.json,sha256=GJGkwGxH0qjB8lbYiz4EkisFpXk5sJL12zoti1ySVEo,14497
@@ -538,9 +538,9 @@ streamlit/web/server/server_util.py,sha256=C3M971XFoEXTMufQLwHbZdtZOE30nWx-2WiXm
538
538
  streamlit/web/server/stats_request_handler.py,sha256=e144zIhzLTB1PN4CwTCxElCoWMuo9IsBEPex2exHCQ0,3641
539
539
  streamlit/web/server/upload_file_request_handler.py,sha256=ftyKpARrUjOpRcFETIXuoTyOG_mo-ToOw5NI0y_W4lE,5003
540
540
  streamlit/web/server/websocket_headers.py,sha256=uUxypj04ondEC4ocBiYCndX_N06Zwe1Mt690Vupe08Y,2232
541
- streamlit_nightly-1.38.1.dev20240916.data/scripts/streamlit.cmd,sha256=ZEYM3vBJSp-k7vwSJ3ba5NzEk9-qHdSeLvGYAAe1mMw,676
542
- streamlit_nightly-1.38.1.dev20240916.dist-info/METADATA,sha256=JY2fSBTIwXaR3b0VkG8gYVHct0gp5favQpRPgELUWS4,8512
543
- streamlit_nightly-1.38.1.dev20240916.dist-info/WHEEL,sha256=AHX6tWk3qWuce7vKLrj7lnulVHEdWoltgauo8bgCXgU,109
544
- streamlit_nightly-1.38.1.dev20240916.dist-info/entry_points.txt,sha256=uNJ4DwGNXEhOK0USwSNanjkYyR-Bk7eYQbJFDrWyOgY,53
545
- streamlit_nightly-1.38.1.dev20240916.dist-info/top_level.txt,sha256=V3FhKbm7G2LnR0s4SytavrjIPNIhvcsAGXfYHAwtQzw,10
546
- streamlit_nightly-1.38.1.dev20240916.dist-info/RECORD,,
541
+ streamlit_nightly-1.38.1.dev20240917.data/scripts/streamlit.cmd,sha256=ZEYM3vBJSp-k7vwSJ3ba5NzEk9-qHdSeLvGYAAe1mMw,676
542
+ streamlit_nightly-1.38.1.dev20240917.dist-info/METADATA,sha256=pHxJA_x2W9lCXO6NMUJ134DRYUOrekdrN77w_dTZwU4,8512
543
+ streamlit_nightly-1.38.1.dev20240917.dist-info/WHEEL,sha256=AHX6tWk3qWuce7vKLrj7lnulVHEdWoltgauo8bgCXgU,109
544
+ streamlit_nightly-1.38.1.dev20240917.dist-info/entry_points.txt,sha256=uNJ4DwGNXEhOK0USwSNanjkYyR-Bk7eYQbJFDrWyOgY,53
545
+ streamlit_nightly-1.38.1.dev20240917.dist-info/top_level.txt,sha256=V3FhKbm7G2LnR0s4SytavrjIPNIhvcsAGXfYHAwtQzw,10
546
+ streamlit_nightly-1.38.1.dev20240917.dist-info/RECORD,,