Coverage for src/lexigram/admin/actions/standard/header.py: 79%

14 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-24 23:39 +0800

1"""Header actions (create). 

2 

3Part of the ``lexigram.admin.actions.standard`` package. 

4""" 

5 

6from __future__ import annotations 

7 

8from typing import Any 

9 

10from lexigram.admin.actions.base import HeaderAction 

11from lexigram.admin.actions.exceptions import ActionError 

12from lexigram.admin.actions.types import ( 

13 ActionColor, 

14 ActionContext, 

15 ConfirmationConfig, 

16) 

17from lexigram.ui import Zones 

18from lexigram.result import Err, Ok, Result 

19class CreateAction(HeaderAction): 

20 """Create a new record.""" 

21 

22 def __init__( 

23 self, 

24 name: str = "create", 

25 label: str | None = None, 

26 ) -> None: 

27 super().__init__( 

28 name=name, 

29 label=label or "Create", 

30 icon="plus", 

31 color=ActionColor.PRIMARY, 

32 ) 

33 

34 def _get_htmx_attrs( 

35 self, url: str, record: None, ctx: ActionContext 

36 ) -> dict[str, str]: 

37 return { 

38 "hx-get": url, 

39 "hx-target": Zones.SLIDE_OVER.selector, 

40 "hx-swap": Zones.SLIDE_OVER.swap_mode.value, 

41 } 

42 

43 async def execute(self, record: None, ctx: ActionContext) -> Result[Any, Any]: 

44 return Ok({"message": "Created new record"})