2929from ._connection import Connection , StarletteConnection
3030from ._error import ErrorMiddleware
3131from ._shinyenv import is_pyodide
32- from ._utils import guess_mime_type , is_async_callable , sort_keys_length
32+ from ._utils import guess_mime_type , is_async_callable , sort_keys_length , wrap_async
3333from .html_dependencies import jquery_deps , require_deps , shiny_deps
3434from .http_staticfiles import FileResponse , StaticFiles
3535from .session ._session import AppSession , Inputs , Outputs , Session , session_context
@@ -104,7 +104,7 @@ def server(input: Inputs, output: Outputs, session: Session):
104104 """
105105
106106 ui : RenderedHTML | Callable [[Request ], Tag | TagList ]
107- server : Callable [[Inputs , Outputs , Session ], Awaitable [None ] | None ]
107+ server : Callable [[Inputs , Outputs , Session ], Awaitable [None ]]
108108
109109 def __init__ (
110110 self ,
@@ -123,13 +123,13 @@ def __init__(
123123 self ._exit_stack = AsyncExitStack ()
124124
125125 if server is None :
126- self .server = noop_server_fn
126+ self .server = wrap_async ( noop_server_fn )
127127 elif len (signature (server ).parameters ) == 1 :
128128 self .server = wrap_server_fn_with_output_session (
129- cast (Callable [[Inputs ], None ], server )
129+ wrap_async ( cast (Callable [[Inputs ], Awaitable [ None ] | None ] , server ) )
130130 )
131131 elif len (signature (server ).parameters ) == 3 :
132- self .server = cast (Callable [[Inputs , Outputs , Session ], None ], server )
132+ self .server = wrap_async ( cast (Callable [[Inputs , Outputs , Session ], Awaitable [ None ] | None ] , server ) )
133133 else :
134134 raise ValueError (
135135 "`server` must have 1 (Inputs) or 3 parameters (Inputs, Outputs, Session)"
@@ -522,10 +522,10 @@ def noop_server_fn(input: Inputs, output: Outputs, session: Session) -> None:
522522
523523
524524def wrap_server_fn_with_output_session (
525- server : Callable [[Inputs ], None ],
526- ) -> Callable [[Inputs , Outputs , Session ], None ]:
527- def _server (input : Inputs , output : Outputs , session : Session ):
525+ server : Callable [[Inputs ], Awaitable [ None ] ],
526+ ) -> Callable [[Inputs , Outputs , Session ], Awaitable [ None ] ]:
527+ async def _server (input : Inputs , output : Outputs , session : Session ):
528528 # Only has 1 parameter, ignore output, session
529- server (input )
529+ await server (input )
530530
531531 return _server
0 commit comments