Skip to content

[Bug]: Bookmarking with modules not working #1976

Closed
@SamEdwardes

Description

@SamEdwardes

Component

Other

Severity

P0 - Critical (crash/unusable)

Shiny Version

1.4.0

Python Version

3.13.2

Minimal Reproducible Example

from loguru import logger
from shiny import App, Inputs, Outputs, Session, module, ui
from starlette.requests import Request


# App UI **must** be a function to ensure that each user restores their own UI values.
def app_ui(request: Request):
    return ui.page_fluid(
        ui.markdown(
            "Directions: "
            "\n1. Change the radio button selection below"
            "\n2. Save the bookmark."
            "\n3. Then, refresh your browser page to see the radio button selection has been restored."
        ),
        ui.hr(),
        inputs_ui("inputs_module"),
    )


@module.ui
def inputs_ui():
    return ui.TagList(
        ui.input_radio_buttons("letter", "Choose a letter", choices=["A", "B", "C"]),
        ui.input_bookmark_button(label="Save bookmark!"),
    )


@module.server
def inputs_server(input: Inputs, output: Outputs, session: Session):
    @session.bookmark.on_bookmarked
    async def _on_bookmark(url: str):
        logger.debug("Bookmarking...")
        logger.debug(f"{url=}")
        await session.bookmark.update_query_string(url)
        updated_url = await session.bookmark.get_bookmark_url()
        logger.debug(f"{updated_url=}")
        await session.bookmark.show_bookmark_url_modal()


def server(input: Inputs, output: Outputs, session: Session):
    inputs_server("inputs_module")


app = App(app_ui, server, bookmark_store="url")

Behavior

bookmarks-dont-work.mp4

In contrast, when not using modules, it does work.

bookmark-works.mp4
from loguru import logger
from shiny import App, Inputs, Outputs, Session, ui
from starlette.requests import Request


# App UI **must** be a function to ensure that each user restores their own UI values.
def app_ui(request: Request):
    return ui.page_fluid(
        ui.markdown(
            "Directions: "
            "\n1. Change the radio button selection below"
            "\n2. Save the bookmark."
            "\n3. Then, refresh your browser page to see the radio button selection has been restored."
        ),
        ui.hr(),
        ui.input_radio_buttons("letter", "Choose a letter", choices=["A", "B", "C"]),
        ui.input_bookmark_button(label="Save bookmark!"),
    )


def server(input: Inputs, output: Outputs, session: Session):
    @session.bookmark.on_bookmarked
    async def _on_bookmark(url: str):
        logger.debug("Bookmarking...")
        logger.debug(f"{url=}")
        await session.bookmark.update_query_string(url)
        updated_url = await session.bookmark.get_bookmark_url()
        logger.debug(f"{updated_url=}")
        await session.bookmark.show_bookmark_url_modal()


app = App(app_ui, server, bookmark_store="url")

Error Messages (if any)

No error messages

Environment

anyio==4.9.0
appdirs==1.4.4
asgiref==3.8.1
click==8.1.8
h11==0.14.0
htmltools==0.6.0
idna==3.10
linkify-it-py==2.0.3
loguru==0.7.3
markdown-it-py==3.0.0
mdit-py-plugins==0.4.2
mdurl==0.1.2
narwhals==1.35.0
orjson==3.10.16
packaging==24.2
prompt-toolkit==3.0.51
python-multipart==0.0.20
questionary==2.1.0
setuptools==78.1.0
shiny==1.4.0
sniffio==1.3.1
starlette==0.46.2
typing-extensions==4.13.2
uc-micro-py==1.0.3
uvicorn==0.34.1
watchfiles==1.0.5
wcwidth==0.2.13
websockets==15.0.1

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions