dashboard/app/plugins/base.py

25 lines
755 B
Python

from collections.abc import Awaitable, Callable
from dataclasses import dataclass, field
@dataclass
class Plugin:
id: str
title: str
description: str = ""
skeleton_fn: Callable[[], Awaitable[str]] | None = field(default=None)
open_fn: Callable[[], Awaitable[None]] | None = field(default=None)
close_fn: Callable[[], Awaitable[None]] | None = field(default=None)
async def skeleton(self) -> str:
if self.skeleton_fn is None:
raise NotImplementedError
return await self.skeleton_fn()
async def open(self) -> None:
if self.open_fn is not None:
await self.open_fn()
async def close(self) -> None:
if self.close_fn is not None:
await self.close_fn()