Skip to content

Conversation

@davidw-carta
Copy link
Contributor

Description

litestar-vite == 0.13.1 introduces a regression.
Running under production mode, say with gunicorn utilizing Jinja templates code such as

    {% if vite %}
      {{ vite("src/test.ts") | safe }}
    {% endif %}

Raises an exception ImproperlyConfiguredException 500 Error

full trace

[2025-04-04 16:06:15 -0700] [26044] [INFO] Application startup complete.
ERROR - 2025-04-04 16:06:16,732 - litestar - config - Uncaught exception (connection_type=http, path=/):
Traceback (most recent call last):
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/middleware/_internal/exceptions/middleware.py", line 158, in __call__
    await self.app(scope, receive, capture_response_started)
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/_asgi/asgi_router.py", line 100, in __call__
    await asgi_app(scope, receive, send)
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/routes/http.py", line 81, in handle
    response = await self._get_response_for_request(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        scope=scope, request=request, route_handler=route_handler, parameter_model=parameter_model
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/routes/http.py", line 133, in _get_response_for_request
    return await self._call_handler_function(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        scope=scope, request=request, parameter_model=parameter_model, route_handler=route_handler
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/routes/http.py", line 157, in _call_handler_function
    response: ASGIApp = await route_handler.to_response(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        app=scope["litestar_app"], data=response_data, request=request
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/handlers/http_handlers/base.py", line 584, in to_response
    return await response_handler(app=app, data=data, request=request)  # type: ignore[call-arg]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/handlers/http_handlers/_utils.py", line 152, in handler
    return response.to_asgi_response(  # type: ignore[no-any-return]
           ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        app=None,
        ^^^^^^^^^
    ...<6 lines>...
        type_encoders=type_encoders,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/response/template.py", line 149, in to_asgi_response
    body = template.render(**context).encode(self.encoding)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/jinja2/environment.py", line 1295, in render
    self.environment.handle_exception()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/jinja2/environment.py", line 942, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/Users/davidw/Dev/work/bug/my_app/app/templates/index.html", line 9, in top-level template code
    {{ vite("src/test.ts") | safe }}
    ^^^^^^^^^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar_vite/loader.py", line 61, in render_asset_tag
    ).asset_loader.render_asset_tag(path, scripts_attrs)
                   ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar_vite/loader.py", line 144, in render_asset_tag
    "".join([self.generate_asset_tags(p, scripts_attrs=scripts_attrs) for p in path]),
             ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar_vite/loader.py", line 271, in generate_asset_tags
    raise ImproperlyConfiguredException(
    ...<3 lines>...
    )
litestar.exceptions.http_exceptions.ImproperlyConfiguredException: 500: Cannot find %s in Vite manifest at %s.  Did you forget to build your assets after an update? ['src/test.ts'] public/manifest.json
ERROR - 2025-04-04 16:23:16,576 - litestar - config - Uncaught exception (connection_type=http, path=/):
Traceback (most recent call last):
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/middleware/_internal/exceptions/middleware.py", line 158, in __call__
    await self.app(scope, receive, capture_response_started)
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/_asgi/asgi_router.py", line 100, in __call__
    await asgi_app(scope, receive, send)
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/routes/http.py", line 81, in handle
    response = await self._get_response_for_request(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        scope=scope, request=request, route_handler=route_handler, parameter_model=parameter_model
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/routes/http.py", line 133, in _get_response_for_request
    return await self._call_handler_function(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        scope=scope, request=request, parameter_model=parameter_model, route_handler=route_handler
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/routes/http.py", line 157, in _call_handler_function
    response: ASGIApp = await route_handler.to_response(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        app=scope["litestar_app"], data=response_data, request=request
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/handlers/http_handlers/base.py", line 584, in to_response
    return await response_handler(app=app, data=data, request=request)  # type: ignore[call-arg]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/handlers/http_handlers/_utils.py", line 152, in handler
    return response.to_asgi_response(  # type: ignore[no-any-return]
           ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        app=None,
        ^^^^^^^^^
    ...<6 lines>...
        type_encoders=type_encoders,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar/response/template.py", line 149, in to_asgi_response
    body = template.render(**context).encode(self.encoding)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/jinja2/environment.py", line 1295, in render
    self.environment.handle_exception()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/jinja2/environment.py", line 942, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/Users/davidw/Dev/work/bug/my_app/app/templates/index.html", line 9, in top-level template code
    {{ vite("src/test.ts") | safe }}
    ^^^^^^^^^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar_vite/loader.py", line 61, in render_asset_tag
    ).asset_loader.render_asset_tag(path, scripts_attrs)
                   ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar_vite/loader.py", line 144, in render_asset_tag
    "".join([self.generate_asset_tags(p, scripts_attrs=scripts_attrs) for p in path]),
             ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/davidw/Dev/work/bug/.venv/lib/python3.13/site-packages/litestar_vite/loader.py", line 271, in generate_asset_tags
    raise ImproperlyConfiguredException(
    ...<3 lines>...
    )
litestar.exceptions.http_exceptions.ImproperlyConfiguredException: 500: Cannot find %s in Vite manifest at %s.  Did you forget to build your assets after an update? ['src/test.ts'] public/manifest.json

Let me know if you want a full reproducible examle

Closes

@davidw-carta davidw-carta changed the title bug: fix loader asset plugin initialize_loader raising error fix: loader asset plugin initialize_loader raising error Apr 4, 2025
@matthew-carta
Copy link

Seems to be introduced with the singleton base class here:
v0.13.0...v0.13.1#diff-5fac0b71b0ac3f64cbcb36eff6dfab022f2603603c13704f85ef96802fa5dee7L79-R107

@davidw-carta davidw-carta changed the title fix: loader asset plugin initialize_loader raising error fix(#80): loader asset plugin initialize_loader raising error Apr 7, 2025
@cofin
Copy link
Member

cofin commented May 5, 2025

Sorry for the long delay on this. Thanks for the PR here.

@cofin cofin merged commit 58e375f into litestar-org:main May 5, 2025
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants