Coverage for src/lexigram/admin/controllers/resource/meta.py: 0%

24 statements  

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

1"""Resource metadata value object.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6from typing import Any, TypeVar 

7 

8T = TypeVar("T") 

9 

10 

11@dataclass 

12class ResourceMeta: 

13 """Metadata for a resource.""" 

14 

15 name: str 

16 label: str 

17 label_plural: str 

18 icon: str | None = None 

19 

20 # URLs 

21 prefix: str = "" 

22 

23 # Default settings 

24 per_page: int = 20 

25 searchable_fields: list[str] | None = None 

26 default_sort: str = "id" 

27 default_sort_order: str = "desc" 

28 

29 # Features 

30 enable_create: bool = True 

31 enable_edit: bool = True 

32 enable_delete: bool = True 

33 enable_clone: bool = True 

34 enable_bulk_actions: bool = True 

35 enable_export: bool = True 

36 

37 @classmethod 

38 def from_dict(cls, data: dict[str, Any]) -> ResourceMeta: 

39 """Create from dictionary.""" 

40 return cls( 

41 name=data.get("name", ""), 

42 label=data.get("label", ""), 

43 label_plural=data.get("label_plural", ""), 

44 icon=data.get("icon"), 

45 prefix=data.get("prefix", ""), 

46 per_page=data.get("per_page", 20), 

47 searchable_fields=data.get("searchable_fields"), 

48 default_sort=data.get("default_sort", "id"), 

49 default_sort_order=data.get("default_sort_order", "desc"), 

50 enable_create=data.get("enable_create", True), 

51 enable_edit=data.get("enable_edit", True), 

52 enable_delete=data.get("enable_delete", True), 

53 enable_clone=data.get("enable_clone", True), 

54 enable_bulk_actions=data.get("enable_bulk_actions", True), 

55 enable_export=data.get("enable_export", True), 

56 )