diff --git a/pynecone/app.py b/pynecone/app.py index 5e67eaccb..cbec551f2 100644 --- a/pynecone/app.py +++ b/pynecone/app.py @@ -357,11 +357,14 @@ async def process( # Get the state for the session. state = app.state_manager.get_state(event.token) + formatted_params = utils.format_query_params(event.router_data) + # Pass router_data to the state of the App. state.router_data = event.router_data # also pass router_data to all substates for _, substate in state.substates.items(): substate.router_data = event.router_data + state.router_data[constants.RouteVar.QUERY] = formatted_params state.router_data[constants.RouteVar.CLIENT_TOKEN] = event.token state.router_data[constants.RouteVar.SESSION_ID] = sid state.router_data[constants.RouteVar.HEADERS] = headers diff --git a/pynecone/utils.py b/pynecone/utils.py index d6d3afe0c..030504b49 100644 --- a/pynecone/utils.py +++ b/pynecone/utils.py @@ -1101,6 +1101,19 @@ def format_event(event_spec: EventSpec) -> str: return f"E(\"{format_event_handler(event_spec.handler)}\", {wrap(args, '{')})" +def format_query_params(router_data: Dict[str, Any]) -> Dict[str, str]: + """Convert back query params name to python-friendly case. + + Args: + router_data: the router_data dict containing the query params + + Returns: + The reformatted query params + """ + params = router_data[constants.RouteVar.QUERY] + return {k.replace("-", "_"): v for k, v in params.items()} + + USED_VARIABLES = set()