implement plugin system

This commit is contained in:
2026-03-29 22:48:29 -07:00
parent adfb3ea354
commit 961b5d08c8
7 changed files with 358 additions and 9 deletions

View File

@@ -124,18 +124,22 @@ for category, class_names in MENU_LAYOUT.items():
})
def get_menu_metadata(class_name: str) -> dict[str, Any]:
def get_menu_metadata(class_name: str, cls: type | None = None) -> dict[str, Any]:
metadata = _NODE_METADATA.get(class_name)
if metadata is not None:
return dict(metadata)
# Nodes not listed in MENU_LAYOUT (e.g. plugins) can declare their own
# menu category via a CATEGORY class attribute. Falls back to "Unsorted".
category = getattr(cls, "CATEGORY", "Unsorted") if cls else "Unsorted"
order = len(_CATEGORY_ORDER)
return {
"category": "Unsorted",
"category_order": len(_CATEGORY_ORDER),
"category": category,
"category_order": order,
"menu_order": 10_000,
"menu_categories": [{
"category": "Unsorted",
"category_order": len(_CATEGORY_ORDER),
"category": category,
"category_order": order,
"menu_order": 10_000,
}],
}