Coverage for src / lexigram / ui / htmx / attrs.py: 43%

28 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-08-10 04:11 +0800

1"""HTMX helpers for Lexigram Admin UI.""" 

2 

3from __future__ import annotations 

4 

5from typing import Any 

6 

7 

8def hx_get(url: str, **kwargs: Any) -> dict[str, Any]: 

9 """HTMX GET request attribute.""" 

10 return {"hx-get": url, **kwargs} 

11 

12 

13def hx_post(url: str, **kwargs: Any) -> dict[str, Any]: 

14 """HTMX POST request attribute.""" 

15 return {"hx-post": url, **kwargs} 

16 

17 

18def hx_put(url: str, **kwargs: Any) -> dict[str, Any]: 

19 """HTMX PUT request attribute.""" 

20 return {"hx-put": url, **kwargs} 

21 

22 

23def hx_delete(url: str, **kwargs: Any) -> dict[str, Any]: 

24 """HTMX DELETE request attribute.""" 

25 return {"hx-delete": url, **kwargs} 

26 

27 

28def hx_patch(url: str, **kwargs: Any) -> dict[str, Any]: 

29 """HTMX PATCH request attribute.""" 

30 return {"hx-patch": url, **kwargs} 

31 

32 

33def hx_target(target: str) -> dict[str, Any]: 

34 """HTMX target attribute.""" 

35 return {"hx-target": target} 

36 

37 

38def hx_swap(swap: str) -> dict[str, Any]: 

39 """HTMX swap attribute.""" 

40 return {"hx-swap": swap} 

41 

42 

43def hx_trigger(trigger: str) -> dict[str, Any]: 

44 """HTMX trigger attribute.""" 

45 return {"hx-trigger": trigger} 

46 

47 

48def hx_vals(vals: dict[str, Any] | str) -> dict[str, Any]: 

49 """HTMX values attribute.""" 

50 from lexigram.serialization import dumps_str 

51 

52 if isinstance(vals, dict): 

53 vals = dumps_str(vals) 

54 return {"hx-vals": vals} 

55 

56 

57def hx_headers(headers: dict[str, Any] | str) -> dict[str, Any]: 

58 """HTMX headers attribute.""" 

59 from lexigram.serialization import dumps_str 

60 

61 if isinstance(headers, dict): 

62 headers = dumps_str(headers) 

63 return {"hx-headers": headers}