Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions goosebit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

from goosebit import api, db, plugins, ui, updater
from goosebit.auth import get_user_from_request, login_user, redirect_if_authenticated
from goosebit.auth.permissions import GOOSEBIT_PERMISSIONS
from goosebit.device_manager import DeviceManager
from goosebit.settings import PWD_CXT, config # type: ignore[attr-defined]
from goosebit.ui.nav import nav
Expand Down Expand Up @@ -83,6 +84,8 @@ async def lifespan(_: FastAPI) -> AsyncGenerator[None, None]:
DeviceManager.add_update_source(plugin.update_source_hook)
if plugin.config_data_hook is not None:
DeviceManager.add_config_callback(plugin.config_data_hook)
if plugin.permissions is not None and GOOSEBIT_PERMISSIONS.sub_permissions is not None:
GOOSEBIT_PERMISSIONS.sub_permissions.append(plugin.permissions)


# Custom exception handler for Tortoise ValidationError
Expand Down
2 changes: 2 additions & 0 deletions goosebit/schema/plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
YamlConfigSettingsSource,
)

from goosebit.auth.permissions import Permission
from goosebit.db import Device # type: ignore[attr-defined]
from goosebit.device_manager import HandlingType
from goosebit.schema.updates import UpdateChunk
Expand Down Expand Up @@ -40,6 +41,7 @@ class Config:
templates: Jinja2Templates | None = None
update_source_hook: Callable[[Request, Device], Awaitable[tuple[HandlingType, UpdateChunk | None]]] | None = None
config_data_hook: Callable[[Device, dict[str, Any]], Awaitable[None]] | None = None
permissions: Permission | None = None

@computed_field # type: ignore[prop-decorator]
@property
Expand Down
Loading