d98bfba506
- Add 65+ icons across 7 categories (Infrastructure, Media, Monitoring, Storage, Security, Automation, Dev & Containers, Communications) covering popular self-hosted apps: Home Assistant, Jellyfin, Plex, Grafana, Portainer, Pi-hole, Vaultwarden, Gitea, Nextcloud, Node-RED, Frigate, etc. - New nodeIcons.ts utility with ICON_REGISTRY, ICON_MAP and resolveNodeIcon() - Inline icon picker in NodeModal: collapsible panel with search + grid grouped by category; click to select, click again or Reset to revert to type default - BaseNode uses resolveNodeIcon() so custom icon renders live on canvas - Add custom_icon field to NodeData type, NodeBase/NodeUpdate schemas, Node ORM model, and database.py idempotent ALTER TABLE migration
58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class NodeBase(BaseModel):
|
|
type: str
|
|
label: str
|
|
hostname: str | None = None
|
|
ip: str | None = None
|
|
mac: str | None = None
|
|
os: str | None = None
|
|
status: str = "unknown"
|
|
check_method: str | None = None
|
|
check_target: str | None = None
|
|
services: list[Any] = []
|
|
notes: str | None = None
|
|
pos_x: float = 0
|
|
pos_y: float = 0
|
|
parent_id: str | None = None
|
|
container_mode: bool = False
|
|
custom_colors: dict[str, Any] | None = None
|
|
custom_icon: str | None = None
|
|
|
|
|
|
class NodeCreate(NodeBase):
|
|
pass
|
|
|
|
|
|
class NodeUpdate(BaseModel):
|
|
type: str | None = None
|
|
label: str | None = None
|
|
hostname: str | None = None
|
|
ip: str | None = None
|
|
mac: str | None = None
|
|
os: str | None = None
|
|
status: str | None = None
|
|
check_method: str | None = None
|
|
check_target: str | None = None
|
|
services: list[Any] | None = None
|
|
notes: str | None = None
|
|
pos_x: float | None = None
|
|
pos_y: float | None = None
|
|
container_mode: bool | None = None
|
|
custom_colors: dict[str, Any] | None = None
|
|
custom_icon: str | None = None
|
|
|
|
|
|
class NodeResponse(NodeBase):
|
|
id: str
|
|
last_seen: datetime | None = None
|
|
response_time_ms: int | None = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|