Skip to main content

A package that makes it possible to add deeplinks in a streamlit application

Project description

Streamlit Deeplinker

Set state deep in an application with ease.

Make them navigatable through your broswer history, and shareable with other people through an URL.

Install

Install with your favorite package manager

Poetry: poetry add streamlit-deeplinker

Pip: pip install streamlit-deeplinker

And then you can start creating deeplink applications like the following:

from streamlit_deeplinker import deeplinks, set_deeplink
from pydantic import BaseModel

class StateA(BaseModel):
    name: str

async def page_a(state: StateA):
    ...

@deeplinks(
    deeplinks={
        StateA: page_a,
    }
)
def app():
    st.title("Deeplink Example")

    st.write("This is the landing page. You can navigate to other pages using the sidebar.")

    st.button("Next"):
        set_deeplink(StateA("World"))

app.start()

Motivation

Streamlit is an awesome technology to get Python applications up and running with an UI. However thier "run from top to bottom" structure can lead lead to issues when setting state deep down in the applications. Potentially making some state getting lost, or leading to a slow application.

Therefore, this package makes it possible to create dedicated pages for a given state. Leading to faster applications and less complex applications.

Usage

The streamlit_deeplinkerer works by routing the user state to differnet functions.

The state is assumed to be defined as pydantic models, as they will be encoded and decoded as url params.

[!WARNING]
Encoding data in the URL params can lead to issues for large payload, as web browsers have different max URL lengths. Therefore, try to keep the state as light weight as possible.

Each pydantic model expects an associated function which.

@deeplinks(
    deeplinks={ # type: ignore
        StateA: page_a,
        StateB: page_b,
        ...
    }
)
def initial_page():
    ...

Sidebar

You can also configure the sidebar in the deeplinks call, and then the router will make sure it is rendered for all the different deeplinks.

from streamlit.delta_generator import DeltaGenerator

def render_sidebar(sidebar: DeltaGenerator):
    sidebar.title("Hello")

@deeplinks(
    deeplinks={ # type: ignore
        StateA: page_a,
        StateB: page_b,
        ...
    },
    sidebar=render_sidebar
)
def initial_page():
    ...

Streamlit Config

Since the deeplink router do not run the initial page on deeplinks will it not be the best place to set streamlit configs. Therefore, is it possible to pass a config param to the deeplinks method.

from streamlit_deeplinker import StreamlitConfig, deeplinks

@deeplinks(
    deeplinks={ # type: ignore
        StateA: page_a,
        StateB: page_b,
        ...
    },
    config=StreamlitConfig(
        title="My awesome application",
        icon=":book:",
        layout="wide"
    )
)
def initial_page():
    ...

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_deeplinker-0.1.1.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

streamlit_deeplinker-0.1.1-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file streamlit_deeplinker-0.1.1.tar.gz.

File metadata

  • Download URL: streamlit_deeplinker-0.1.1.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.10.9 Linux/6.5.0-1017-azure

File hashes

Hashes for streamlit_deeplinker-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ad46d724bb227f25a0c369566c60abdb0ea76fe963c9b7d3f2d2bc510c8de5c4
MD5 591241b84e2acf21202595a34b8d526f
BLAKE2b-256 04b395c86d9c16f3a25a3b4195676f601f2a3b83e49f6d1efc65d79a17bc32ef

See more details on using hashes here.

File details

Details for the file streamlit_deeplinker-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for streamlit_deeplinker-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 30504b188a9657aaaeebeb8745a5bdcd5e41a372ccbc4d87c92726b90e96f670
MD5 3580a18759d50839e04e48751cd9dca8
BLAKE2b-256 37d89d02259f3397ea7ef65a6fed54f63522c9131fb47721e7f869e6e3518687

See more details on using hashes here.

Supported by

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