Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: support static files on pyodide / py.cafe under a prefix
When a shiny app is running under a prefix (root_path in ASGI terms), the static files are not served correctly under pyodide. This is because the ASGI path includes the root_path, and the root_path should be removed. Starlette 0.33 and 0.34 however, did not set root_path correctly, and in those cases, we have to rely on route_path. Related discussions: encode/starlette#2400 encode/starlette#2361 A related fix we had in Solara: widgetti/solara#413 But this fix also did not seem to work for our situation at https://py.cafe I logged the output of the relevant entries in the scope dict, together with the starlette version: ``` starlette 0.32.0 {'path': '/strftime-min.js', 'root_path': '/_app/lib/strftime-0.9.2'} starlette 0.33.0 {'path': '/_app/lib/strftime-0.9.2/strftime-min.js', 'root_path': '', 'route_root_path': '/lib/strftime-0.9.2', 'route_path': '/strftime-min.js'} starlette 0.34.0 {'path': '/_app/lib/strftime-0.9.2/strftime-min.js', 'root_path': '', 'route_root_path': '/lib/strftime-0.9.2', 'route_path': '/strftime-min.js'} starlette 0.35.0 {'path': '/_app/lib/strftime-0.9.2/strftime-min.js', 'root_path': '/_app/lib/strftime-0.9.2'} starlette 0.36.0 {'path': '/_app/lib/strftime-0.9.2/strftime-min.js', 'root_path': '/_app/lib/strftime-0.9.2'} starlette 0.37.2 {'path': '/_app/lib/strftime-0.9.2/strftime-min.js', 'root_path': '/_app/lib/strftime-0.9.2'} ``` This was using a similar situation as on py.cafe: ```python .... routes = [ Mount('/static', app=app_static), Mount('/_app', app=app_shiny) ] app = Starlette(routes=routes) ``` Which led me to the following fix, making shiny work under pyodide in combination with a prefix with the above mentioned versions of starlette.
- Loading branch information