Make model score app work on Connect/Shinyapps.io #657
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
scoredata.begin()
function gets called from the top-level of app.py, that is, at module load time. When I was testing this locally and in shinylive, it was fine to useasyncio.create_task()
here, because an asyncio event loop was already started courtesy of uvicorn by the time the app module is imported. But in Connect, the app module is imported way earlier, because Connect has ASGI middleware it needs to install around it. In that case, no asyncio event loop exists and we have to do something else.I guess another way to do this would've been to use a one-shot reactive Effect at the top level. Seems like a weird pattern to promote.
Another would be to introduce start/stop callbacks on the App object. Or
app.starlette_app.add_event_handler("startup", scoredata.begin)
works already, butstarlette_app
is not a documented attribute on App.