Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: support static files on pyodide / py.cafe under a prefix #1486

Merged

Commits on Jun 28, 2024

  1. 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.
    maartenbreddels committed Jun 28, 2024
    Configuration menu
    Copy the full SHA
    674ead1 View commit details
    Browse the repository at this point in the history