litestar-vite 0.2.1__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of litestar-vite might be problematic. Click here for more details.

Files changed (121) hide show
  1. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/PKG-INFO +1 -1
  2. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/_utils.py +1 -0
  3. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/exception_handler.py +6 -6
  4. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/middleware.py +1 -5
  5. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/request.py +5 -0
  6. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/response.py +6 -1
  7. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/pyproject.toml +1 -1
  8. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.github/CODEOWNERS +0 -0
  9. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.github/dependabot.yaml +0 -0
  10. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.github/workflows/cd.yaml +0 -0
  11. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.github/workflows/ci.yaml +0 -0
  12. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.github/workflows/docs-preview.yaml +0 -0
  13. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.github/workflows/docs.yaml +0 -0
  14. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.github/workflows/pr-title.yaml +0 -0
  15. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.github/workflows/publish.yaml +0 -0
  16. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.gitignore +0 -0
  17. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.pre-commit-config.yaml +0 -0
  18. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/.python-version +0 -0
  19. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/CONTRIBUTING.rst +0 -0
  20. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/LICENSE +0 -0
  21. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/Makefile +0 -0
  22. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/README.md +0 -0
  23. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/docs/Makefile +0 -0
  24. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/docs/conf.py +0 -0
  25. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/docs/contribution-guide.rst +0 -0
  26. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/docs/fix_missing_references.py +0 -0
  27. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/docs/index.rst +0 -0
  28. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/docs/reference/config.rst +0 -0
  29. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/docs/reference/plugin.rst +0 -0
  30. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/docs/usage/index.rst +0 -0
  31. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/docs/usage/placeholder.rst +0 -0
  32. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/__init__.py +0 -0
  33. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/app.py +0 -0
  34. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/package-lock.json +0 -0
  35. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/package.json +0 -0
  36. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/public/assets/main-l0sNRNKZ.js +0 -0
  37. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/public/assets/styles-l0sNRNKZ.js +0 -0
  38. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/public/manifest.json +0 -0
  39. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/resources/main.ts +0 -0
  40. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/resources/styles.css +0 -0
  41. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/templates/index.html.j2 +0 -0
  42. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/tsconfig.json +0 -0
  43. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/basic/vite.config.ts +0 -0
  44. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/app.py +0 -0
  45. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/package-lock.json +0 -0
  46. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/package.json +0 -0
  47. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/public/assets/main-l0sNRNKZ.js +0 -0
  48. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/public/assets/styles-l0sNRNKZ.js +0 -0
  49. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/public/manifest.json +0 -0
  50. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/resources/main.ts +0 -0
  51. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/resources/styles.css +0 -0
  52. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/templates/index.html.j2 +0 -0
  53. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/tsconfig.json +0 -0
  54. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/flash/vite.config.ts +0 -0
  55. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/app.py +0 -0
  56. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/package-lock.json +0 -0
  57. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/package.json +0 -0
  58. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/postcss.config.cjs +0 -0
  59. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/public/assets/main-BIhkjqcE.js +0 -0
  60. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/public/assets/styles-B8hX6ha2.css +0 -0
  61. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/public/manifest.json +0 -0
  62. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/resources/Layout.vue +0 -0
  63. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/resources/main.js +0 -0
  64. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/resources/pages/Dashboard.vue +0 -0
  65. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/resources/pages/Home.vue +0 -0
  66. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/resources/styles.css +0 -0
  67. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/resources/templates/index.html +0 -0
  68. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/resources/vite-env.d.ts +0 -0
  69. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/tailwind.config.cjs +0 -0
  70. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/tsconfig.json +0 -0
  71. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/examples/inertia/vite.config.ts +0 -0
  72. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/__init__.py +0 -0
  73. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/__metadata__.py +0 -0
  74. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/cli.py +0 -0
  75. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/commands.py +0 -0
  76. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/config.py +0 -0
  77. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/__init__.py +0 -0
  78. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/config.py +0 -0
  79. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/plugin.py +0 -0
  80. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/routes.py +0 -0
  81. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/inertia/types.py +0 -0
  82. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/loader.py +0 -0
  83. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/plugin.py +0 -0
  84. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/py.typed +0 -0
  85. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/template_engine.py +0 -0
  86. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/templates/__init__.py +0 -0
  87. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/templates/index.html.j2 +0 -0
  88. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/templates/main.ts.j2 +0 -0
  89. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/templates/package.json.j2 +0 -0
  90. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/templates/styles.css.j2 +0 -0
  91. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/templates/tsconfig.json.j2 +0 -0
  92. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/litestar_vite/templates/vite.config.ts.j2 +0 -0
  93. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/pdm.lock +0 -0
  94. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/__init__.py +0 -0
  95. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/conftest.py +0 -0
  96. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/templates/__init__.py +0 -0
  97. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/templates/index.html.j2 +0 -0
  98. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/__init__.py +0 -0
  99. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/app.py +0 -0
  100. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/__init__.py +0 -0
  101. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/public/.gitkeep +0 -0
  102. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/public/assets/main-l0sNRNKZ.js +0 -0
  103. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/public/assets/styles-l0sNRNKZ.js +0 -0
  104. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/public/manifest.json +0 -0
  105. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/resources/.gitkeep +0 -0
  106. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/resources/main.ts +0 -0
  107. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/resources/styles.css +0 -0
  108. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/templates/.gitkeep +0 -0
  109. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_app/web/templates/index.html +0 -0
  110. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_cli/__init__.py +0 -0
  111. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_cli/conftest.py +0 -0
  112. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_cli/test_init.py +0 -0
  113. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_commands.py +0 -0
  114. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_config.py +0 -0
  115. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_inertia/__init__.py +0 -0
  116. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_inertia/conftest.py +0 -0
  117. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_inertia/templates/index.html.j2 +0 -0
  118. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_inertia/test_inertia_request.py +0 -0
  119. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_inertia/test_inertia_response.py +0 -0
  120. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_inertia/test_routes.py +0 -0
  121. {litestar_vite-0.2.1 → litestar_vite-0.2.2}/tests/test_template_engine.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: litestar-vite
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Vite plugin for Litestar
5
5
  Project-URL: Changelog, https://cofin.github.io/litestar-vite/latest/changelog
6
6
  Project-URL: Discord, https://discord.gg/X3FJqy8d2j
@@ -15,6 +15,7 @@ class InertiaHeaders(str, Enum):
15
15
  PARTIAL_DATA = "X-Inertia-Partial-Data"
16
16
  PARTIAL_COMPONENT = "X-Inertia-Partial-Component"
17
17
  LOCATION = "X-Inertia-Location"
18
+ REFERER = "Referer"
18
19
 
19
20
 
20
21
  def get_enabled_header(enabled: bool = True) -> dict[str, Any]:
@@ -1,3 +1,4 @@
1
+ import contextlib
1
2
  import re
2
3
  from typing import TYPE_CHECKING, Any, cast
3
4
 
@@ -28,7 +29,6 @@ from litestar.status_codes import (
28
29
  HTTP_422_UNPROCESSABLE_ENTITY,
29
30
  HTTP_500_INTERNAL_SERVER_ERROR,
30
31
  )
31
- from litestar.types import Empty
32
32
 
33
33
  from litestar_vite.inertia.response import InertiaBack, InertiaRedirect, InertiaResponse, error
34
34
 
@@ -44,7 +44,7 @@ class _HTTPConflictException(HTTPException):
44
44
  status_code = HTTP_409_CONFLICT
45
45
 
46
46
 
47
- def exception_to_http_response(request: Request[UserT, AuthT, StateT], exc: Exception) -> Response[Any]:
47
+ def exception_to_http_response(request: Request[UserT, AuthT, StateT], exc: Exception) -> Response[Any]: # noqa: PLR0911
48
48
  """Handler for all exceptions subclassed from HTTPException."""
49
49
  inertia_enabled = getattr(request, "inertia_enabled", False) or getattr(request, "is_inertia", False)
50
50
  if isinstance(exc, NotFoundError):
@@ -57,7 +57,6 @@ def exception_to_http_response(request: Request[UserT, AuthT, StateT], exc: Exce
57
57
  if request.app.debug and http_exc not in (PermissionDeniedException, NotFoundError):
58
58
  return cast("Response[Any]", create_debug_response(request, exc))
59
59
  return cast("Response[Any]", create_exception_response(request, http_exc(detail=str(exc.__cause__))))
60
- has_active_session = not (not request.session or request.scope["session"] is Empty)
61
60
  is_inertia = getattr(request, "is_inertia", False)
62
61
  status_code = getattr(exc, "status_code", HTTP_500_INTERNAL_SERVER_ERROR)
63
62
  preferred_type = MediaType.HTML if inertia_enabled and not is_inertia else MediaType.JSON
@@ -67,7 +66,7 @@ def exception_to_http_response(request: Request[UserT, AuthT, StateT], exc: Exce
67
66
  inertia_plugin = cast("InertiaPlugin", request.app.plugins.get("InertiaPlugin"))
68
67
  if extras:
69
68
  content.update({"extra": extras})
70
- if has_active_session:
69
+ with contextlib.suppress(Exception):
71
70
  flash(request, detail, category="error")
72
71
  if extras and len(extras) >= 1:
73
72
  message = extras[0]
@@ -75,8 +74,9 @@ def exception_to_http_response(request: Request[UserT, AuthT, StateT], exc: Exce
75
74
  error_detail = cast("str", message.get("message", detail)) # type: ignore[union-attr] # pyright: ignore[reportUnknownMemberType,reportUnknownArgumentType]
76
75
  match = FIELD_ERR_RE.search(error_detail)
77
76
  field = match.group(1) if match else default_field
78
- if isinstance(message, dict) and has_active_session:
79
- error(request, field, error_detail)
77
+ if isinstance(message, dict):
78
+ with contextlib.suppress(Exception):
79
+ error(request, field, error_detail)
80
80
  if status_code in {HTTP_422_UNPROCESSABLE_ENTITY, HTTP_400_BAD_REQUEST} or isinstance(
81
81
  exc,
82
82
  PermissionDeniedException,
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
15
15
  StateT,
16
16
  UserT,
17
17
  )
18
- from litestar.types import ASGIApp
18
+ from litestar.types import ASGIApp, Receive, Scope, Send
19
19
 
20
20
 
21
21
  async def redirect_on_asset_version_mismatch(request: Request[UserT, AuthT, StateT]) -> InertiaRedirect | None:
@@ -32,10 +32,6 @@ async def redirect_on_asset_version_mismatch(request: Request[UserT, AuthT, Stat
32
32
  return InertiaRedirect(request, redirect_to=str(request.url))
33
33
 
34
34
 
35
- if TYPE_CHECKING:
36
- from litestar.types import Receive, Scope, Send
37
-
38
-
39
35
  class InertiaMiddleware(AbstractMiddleware):
40
36
  def __init__(self, app: ASGIApp) -> None:
41
37
  super().__init__(app)
@@ -69,6 +69,11 @@ class InertiaDetails:
69
69
  """Partial Data Reload."""
70
70
  return self._get_header_value(InertiaHeaders.PARTIAL_DATA)
71
71
 
72
+ @cached_property
73
+ def referer(self) -> str | None:
74
+ """Partial Data Reload."""
75
+ return self._get_header_value(InertiaHeaders.REFERER)
76
+
72
77
  @cached_property
73
78
  def is_partial_render(self) -> bool:
74
79
  """Is Partial Data Reload."""
@@ -34,6 +34,7 @@ if TYPE_CHECKING:
34
34
  from litestar.connection.base import AuthT, StateT, UserT
35
35
  from litestar.types import ResponseCookies, ResponseHeaders, TypeEncodersMap
36
36
 
37
+ from litestar_vite.inertia.request import InertiaRequest
37
38
  from litestar_vite.inertia.routes import Routes
38
39
 
39
40
  from .plugin import InertiaPlugin
@@ -339,8 +340,12 @@ class InertiaBack(Redirect):
339
340
  """Initialize external redirect, Set status code to 409 (required by Inertia),
340
341
  and pass redirect url.
341
342
  """
343
+ referer = request.headers.get("referer", str(request.base_url))
344
+ inertia_enabled = getattr(request, "inertia_enabled", False) or getattr(request, "is_inertia", False)
345
+ if inertia_enabled:
346
+ referer = cast("InertiaRequest[Any, Any, Any]", request).inertia.referer or referer
342
347
  super().__init__(
343
- path=request.headers.get("referrer", str(request.base_url)),
348
+ path=request.headers.get("referer", str(request.base_url)),
344
349
  status_code=HTTP_307_TEMPORARY_REDIRECT if request.method == "GET" else HTTP_303_SEE_OTHER,
345
350
  cookies=request.cookies,
346
351
  **kwargs,
@@ -26,7 +26,7 @@ license = { text = "MIT" }
26
26
  name = "litestar-vite"
27
27
  readme = "README.md"
28
28
  requires-python = ">=3.8"
29
- version = "0.2.1"
29
+ version = "0.2.2"
30
30
 
31
31
  [project.urls]
32
32
  Changelog = "https://cofin.github.io/litestar-vite/latest/changelog"
File without changes
File without changes
File without changes
File without changes
File without changes