Closed
Description
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