90 lines
3.2 KiB
Python
90 lines
3.2 KiB
Python
from typing import Any, Callable
|
|
from babel.support import LazyProxy
|
|
from dataclasses import dataclass, field
|
|
|
|
from .role import RoleBase
|
|
from . import EntityPermission
|
|
|
|
EntityCaptionCallable = Callable[["EntityDescriptor"], str]
|
|
EntityItemCaptionCallable = Callable[["EntityDescriptor", Any], str]
|
|
EntityFieldCaptionCallable = Callable[["EntityFieldDescriptor", Any, Any], str]
|
|
|
|
|
|
@dataclass(kw_only = True)
|
|
class _BaseEntityFieldDescriptor():
|
|
icon: str = None
|
|
caption_str: str | LazyProxy | EntityFieldCaptionCallable | None = None
|
|
caption_btn: str | LazyProxy | EntityFieldCaptionCallable | None = None
|
|
description: str | LazyProxy | EntityFieldCaptionCallable | None = None
|
|
edit_prompt: str | LazyProxy | EntityFieldCaptionCallable | None = None
|
|
caption_value_str: str | LazyProxy | EntityFieldCaptionCallable | None = None
|
|
caption_value_btn: str | LazyProxy | EntityFieldCaptionCallable | None = None
|
|
is_visible: bool = True
|
|
localizable: bool = False
|
|
bool_false_value: str | LazyProxy = "no"
|
|
bool_false_value_btn: str | LazyProxy = "no"
|
|
bool_true_value: str | LazyProxy = "yes"
|
|
bool_true_value_btn: str | LazyProxy = "yes"
|
|
default: Any = None
|
|
|
|
|
|
@dataclass(kw_only = True)
|
|
class EntityField(_BaseEntityFieldDescriptor):
|
|
name: str | None = None
|
|
sm_descriptor: Any = None
|
|
|
|
|
|
@dataclass(kw_only = True)
|
|
class Setting(_BaseEntityFieldDescriptor):
|
|
name: str | None = None
|
|
|
|
|
|
@dataclass(kw_only = True)
|
|
class EntityFieldDescriptor(_BaseEntityFieldDescriptor):
|
|
name: str
|
|
field_name: str
|
|
type_: type
|
|
entity_descriptor: "EntityDescriptor" = None
|
|
|
|
def __hash__(self):
|
|
return self.name.__hash__()
|
|
|
|
|
|
@dataclass(kw_only = True)
|
|
class _BaseEntityDescriptor:
|
|
|
|
icon: str = "📘"
|
|
caption_msg: str | LazyProxy | EntityCaptionCallable | None = None
|
|
caption_btn: str | LazyProxy | EntityCaptionCallable | None = None
|
|
description: str | LazyProxy | EntityCaptionCallable | None = None
|
|
item_caption_msg: EntityItemCaptionCallable | None = None
|
|
item_caption_btn: EntityItemCaptionCallable | None = None
|
|
show_in_entities_menu: bool = True
|
|
field_sequence: list[str] = None
|
|
permissions: dict[EntityPermission, list[RoleBase]] = field(default_factory = lambda: {
|
|
EntityPermission.LIST: [RoleBase.DEFAULT_USER, RoleBase.SUPER_USER],
|
|
EntityPermission.READ: [RoleBase.DEFAULT_USER, RoleBase.SUPER_USER],
|
|
EntityPermission.CREATE: [RoleBase.DEFAULT_USER, RoleBase.SUPER_USER],
|
|
EntityPermission.UPDATE: [RoleBase.DEFAULT_USER, RoleBase.SUPER_USER],
|
|
EntityPermission.DELETE: [RoleBase.DEFAULT_USER, RoleBase.SUPER_USER],
|
|
EntityPermission.LIST_ALL: [RoleBase.SUPER_USER],
|
|
EntityPermission.READ_ALL: [RoleBase.SUPER_USER],
|
|
EntityPermission.CREATE_ALL: [RoleBase.SUPER_USER],
|
|
EntityPermission.UPDATE_ALL: [RoleBase.SUPER_USER],
|
|
EntityPermission.DELETE_ALL: [RoleBase.SUPER_USER]
|
|
})
|
|
|
|
|
|
@dataclass(kw_only = True)
|
|
class Entity(_BaseEntityDescriptor):
|
|
|
|
name: str | None = None
|
|
|
|
|
|
@dataclass
|
|
class EntityDescriptor(_BaseEntityDescriptor):
|
|
|
|
name: str
|
|
class_name: str
|
|
type_: type
|
|
fields_descriptors: dict[str, EntityFieldDescriptor] |