Skip to main content

A package that provides a StateModel for Streamlit applications, allowing easy management of session state through class attributes.

Project description

Streamlit State Model

I love Streamlit, but working with st.session_state can be tedious. Coming from an OOP background, I cringe at managing each key in st.session_state individually, checking if it exists, and losing intellisense for names and types.

So I made streamlit-state-model which offers a base class StateModel that you can subclass to push your class' attribute I/O directly into st.session_state. This means you define what should exist in st.session_state once in the form of a normal python class, and then access those values anywhere in your Streamlit app with the expected statefulness of st.session_state.

Features

  • Persistence: Class instance storage is pushed to st.session_state so class attribute values are retained across page refreshes and switches (in multi-page apps).
  • Easy Setup: StateModel can be used with existing or new class definitions.
  • Default Values: Define the default state of st.session_state with normal class' default annotations and gain the ability to reset them all to defaults with a single function call.
  • Debugging: When debugging, you can now see the current values in st.session_state by inspecting your class' attribute values.
  • Intellisense Support: Retain normal docstrings and type intellisense that you normally lose when working with st.session_state.
  • Inline Integration: Declare your class instance inline with the rest of your code and eliminate spaghetti if checks around current state of st.session_state.
  • Docstring Access: Retrieve attribute docstrings via the docstrings dictionary within your app.

Getting Started

Install the package using pip:

pip install streamlit-state-model

Take your existing class and subclass StateModel:

import streamlit_state_model as ssm 

class Session(ssm.StateModel):
    favorite_color: str = "#252D3D"
    "The user's favorite color as a hex string."
    favorite_number: int = 0
    "The user's favorite number."

At the entry point of your app, initialize your class in "build" mode.

# streamlit_app.py
session = Session(mode="build")
st.write(session.favorite_number)  # outputs default value of 0
session.favorite_number = 1  # set to a new value 

Anywhere else in your app you can initialize in lazy (default) mode to access current values:

# pages/page_1.py
session = Session() # init in lazy mode
st.write(session.favorite_number) # outputs 1 as set in streamlit_app.py  
""

Example

Explore our demo Streamlit app in the /demo_app directory for an example of integrating StateModel into a multipage app on Streamlit Community Cloud. Check out: state-model-demo-app.

We're also working on generating API docs for StateModel since it already includes many helper functions such as:

  • dump(): Dump all class attribute values to a JSON string (often paired with st.json).
  • Widget interaction helpers: Utilize widgets with StateModel following Streamlit's recommended patterns. (See the Streamlit Documentation on Multipage Apps for details.)
  • Reset function: Reset all attribute values to their defaults.

Development

For details on contributing and the CI/CD process, please refer to the development documentation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

streamlit_state_model-0.2.5.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

streamlit_state_model-0.2.5-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file streamlit_state_model-0.2.5.tar.gz.

File metadata

  • Download URL: streamlit_state_model-0.2.5.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for streamlit_state_model-0.2.5.tar.gz
Algorithm Hash digest
SHA256 ef4fbd6a92508f4b3c00a5b19d4a6fd73393f3943dfa6367b851169a0dd56e55
MD5 0dd73bf1c99058adb5db41afbb97ff8f
BLAKE2b-256 7fd842a1e59bbdfadc3d1c458648ef149834b5a6a5f437c38a1a6a358b02194c

See more details on using hashes here.

Provenance

The following attestation bundles were made for streamlit_state_model-0.2.5.tar.gz:

Publisher: cd.yml on trenton-ftw/streamlit-state-model

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file streamlit_state_model-0.2.5-py3-none-any.whl.

File metadata

File hashes

Hashes for streamlit_state_model-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c8c7d7f9f1a3daa86d96284ec42b6b2df7103959c8e2a2a7ab8fcce6947033e0
MD5 3e4166debeb5d59b24434bdad2c0145a
BLAKE2b-256 cf84d514d02cc83e5105af67087ddce85b7d989a16e5b9a9cdd709ec1a9861ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for streamlit_state_model-0.2.5-py3-none-any.whl:

Publisher: cd.yml on trenton-ftw/streamlit-state-model

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page