summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/litestar/contrib/htmx/response.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/litestar/contrib/htmx/response.py')
-rw-r--r--venv/lib/python3.11/site-packages/litestar/contrib/htmx/response.py200
1 files changed, 0 insertions, 200 deletions
diff --git a/venv/lib/python3.11/site-packages/litestar/contrib/htmx/response.py b/venv/lib/python3.11/site-packages/litestar/contrib/htmx/response.py
deleted file mode 100644
index 0a56e1f..0000000
--- a/venv/lib/python3.11/site-packages/litestar/contrib/htmx/response.py
+++ /dev/null
@@ -1,200 +0,0 @@
-from __future__ import annotations
-
-from typing import Any, Generic, TypeVar
-from urllib.parse import quote
-
-from litestar import Response
-from litestar.contrib.htmx._utils import HTMX_STOP_POLLING, get_headers
-from litestar.contrib.htmx.types import (
- EventAfterType,
- HtmxHeaderType,
- LocationType,
- PushUrlType,
- ReSwapMethod,
- TriggerEventType,
-)
-from litestar.response import Template
-from litestar.status_codes import HTTP_200_OK
-
-__all__ = (
- "ClientRedirect",
- "ClientRefresh",
- "HTMXTemplate",
- "HXLocation",
- "HXStopPolling",
- "PushUrl",
- "ReplaceUrl",
- "Reswap",
- "Retarget",
- "TriggerEvent",
-)
-
-
-# HTMX defined HTTP status code.
-# Response carrying this status code will ask client to stop Polling.
-T = TypeVar("T")
-
-
-class HXStopPolling(Response):
- """Stop HTMX client from Polling."""
-
- def __init__(self) -> None:
- """Initialize"""
- super().__init__(content=None)
- self.status_code = HTMX_STOP_POLLING
-
-
-class ClientRedirect(Response):
- """HTMX Response class to support client side redirect."""
-
- def __init__(self, redirect_to: str) -> None:
- """Set status code to 200 (required by HTMX), and pass redirect url."""
- super().__init__(content=None, headers=get_headers(hx_headers=HtmxHeaderType(redirect=redirect_to)))
- del self.headers["Location"]
-
-
-class ClientRefresh(Response):
- """Response to support HTMX client page refresh"""
-
- def __init__(self) -> None:
- """Set Status code to 200 and set headers."""
- super().__init__(content=None, headers=get_headers(hx_headers=HtmxHeaderType(refresh=True)))
-
-
-class PushUrl(Generic[T], Response[T]):
- """Response to push new url into the history stack."""
-
- def __init__(self, content: T, push_url: PushUrlType, **kwargs: Any) -> None:
- """Initialize PushUrl."""
- super().__init__(
- content=content,
- status_code=HTTP_200_OK,
- headers=get_headers(hx_headers=HtmxHeaderType(push_url=push_url)),
- **kwargs,
- )
-
-
-class ReplaceUrl(Generic[T], Response[T]):
- """Response to replace url in the Browser Location bar."""
-
- def __init__(self, content: T, replace_url: PushUrlType, **kwargs: Any) -> None:
- """Initialize ReplaceUrl."""
- super().__init__(
- content=content,
- status_code=HTTP_200_OK,
- headers=get_headers(hx_headers=HtmxHeaderType(replace_url=replace_url)),
- **kwargs,
- )
-
-
-class Reswap(Generic[T], Response[T]):
- """Response to specify how the response will be swapped."""
-
- def __init__(
- self,
- content: T,
- method: ReSwapMethod,
- **kwargs: Any,
- ) -> None:
- """Initialize Reswap."""
- super().__init__(content=content, headers=get_headers(hx_headers=HtmxHeaderType(re_swap=method)), **kwargs)
-
-
-class Retarget(Generic[T], Response[T]):
- """Response to target different element on the page."""
-
- def __init__(self, content: T, target: str, **kwargs: Any) -> None:
- """Initialize Retarget."""
- super().__init__(content=content, headers=get_headers(hx_headers=HtmxHeaderType(re_target=target)), **kwargs)
-
-
-class TriggerEvent(Generic[T], Response[T]):
- """Trigger Client side event."""
-
- def __init__(
- self,
- content: T,
- name: str,
- after: EventAfterType,
- params: dict[str, Any] | None = None,
- **kwargs: Any,
- ) -> None:
- """Initialize TriggerEvent."""
- event = TriggerEventType(name=name, params=params, after=after)
- headers = get_headers(hx_headers=HtmxHeaderType(trigger_event=event))
- super().__init__(content=content, headers=headers, **kwargs)
-
-
-class HXLocation(Response):
- """Client side redirect without full page reload."""
-
- def __init__(
- self,
- redirect_to: str,
- source: str | None = None,
- event: str | None = None,
- target: str | None = None,
- swap: ReSwapMethod | None = None,
- hx_headers: dict[str, Any] | None = None,
- values: dict[str, str] | None = None,
- **kwargs: Any,
- ) -> None:
- """Initialize HXLocation, Set status code to 200 (required by HTMX),
- and pass redirect url.
- """
- super().__init__(
- content=None,
- headers={"Location": quote(redirect_to, safe="/#%[]=:;$&()+,!?*@'~")},
- **kwargs,
- )
- spec: dict[str, Any] = get_headers(
- hx_headers=HtmxHeaderType(
- location=LocationType(
- path=str(self.headers.get("Location")),
- source=source,
- event=event,
- target=target,
- swap=swap,
- values=values,
- hx_headers=hx_headers,
- )
- )
- )
- del self.headers["Location"]
- self.headers.update(spec)
-
-
-class HTMXTemplate(Template):
- """HTMX template wrapper"""
-
- def __init__(
- self,
- push_url: PushUrlType | None = None,
- re_swap: ReSwapMethod | None = None,
- re_target: str | None = None,
- trigger_event: str | None = None,
- params: dict[str, Any] | None = None,
- after: EventAfterType | None = None,
- **kwargs: Any,
- ) -> None:
- """Create HTMXTemplate response.
-
- Args:
- push_url: Either a string value specifying a URL to push to browser history or ``False`` to prevent HTMX client from
- pushing a url to browser history.
- re_swap: Method value to instruct HTMX which swapping method to use.
- re_target: Value for 'id of target element' to apply changes to.
- trigger_event: Event name to trigger.
- params: Dictionary of parameters if any required with trigger event parameter.
- after: Changes to apply after ``receive``, ``settle`` or ``swap`` event.
- **kwargs: Additional arguments to pass to ``Template``.
- """
- super().__init__(**kwargs)
-
- event: TriggerEventType | None = None
- if trigger_event:
- event = TriggerEventType(name=str(trigger_event), params=params, after=after)
-
- self.headers.update(
- get_headers(HtmxHeaderType(push_url=push_url, re_swap=re_swap, re_target=re_target, trigger_event=event))
- )