Coverage for src/lexigram/admin/controllers/resource/meta.py: 100%
24 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
1"""Resource metadata value object."""
3from __future__ import annotations
5from dataclasses import dataclass
6from typing import Any, TypeVar
8T = TypeVar("T")
11@dataclass
12class ResourceMeta:
13 """Metadata for a resource."""
15 name: str
16 label: str
17 label_plural: str
18 icon: str | None = None
20 # URLs
21 prefix: str = ""
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"
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
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 )