refactor: app usage
This commit is contained in:
@@ -16,6 +16,7 @@ from pydantic import UUID4
|
|||||||
from starlette.staticfiles import PathLike as StaticFilesPathLike
|
from starlette.staticfiles import PathLike as StaticFilesPathLike
|
||||||
from starlette.types import Scope
|
from starlette.types import Scope
|
||||||
|
|
||||||
|
from lnbits.core.db import core_app_extra
|
||||||
from lnbits.decorators import (
|
from lnbits.decorators import (
|
||||||
check_access_token,
|
check_access_token,
|
||||||
check_user_exists,
|
check_user_exists,
|
||||||
@@ -141,9 +142,7 @@ def register_wasm_extension(app: FastAPI, ext_id: str) -> WasmExtension:
|
|||||||
_register_wasm_extension_ui_routes(app, loaded)
|
_register_wasm_extension_ui_routes(app, loaded)
|
||||||
_register_wasm_extension_api_routes(app, loaded)
|
_register_wasm_extension_api_routes(app, loaded)
|
||||||
|
|
||||||
extensions = getattr(app.state, "lnbits_wasm_extensions", {})
|
core_app_extra.wasm_extension_registry.register(loaded)
|
||||||
extensions[ext_id] = loaded
|
|
||||||
app.state.lnbits_wasm_extensions = extensions
|
|
||||||
|
|
||||||
settings.activate_extension_paths(ext_id, "", [])
|
settings.activate_extension_paths(ext_id, "", [])
|
||||||
logger.info(
|
logger.info(
|
||||||
|
|||||||
@@ -10,9 +10,10 @@ from typing import Any
|
|||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
|
|
||||||
from lnbits.core.crud.extensions import get_installed_extension
|
from lnbits.core.crud.extensions import get_installed_extension
|
||||||
|
from lnbits.core.db import core_app_extra
|
||||||
|
|
||||||
from .api import ExtensionAPI, list_extension_api_methods
|
from .api import ExtensionAPI, list_extension_api_methods
|
||||||
from .loader import WasmExtension, register_wasm_extension
|
from .loader import WasmExtension
|
||||||
from .runtime import ExtensionAPIHost
|
from .runtime import ExtensionAPIHost
|
||||||
|
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ async def invoke_wasm_extension_export(
|
|||||||
context: str = "user",
|
context: str = "user",
|
||||||
owner_id: str | None = None,
|
owner_id: str | None = None,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
extension = _get_registered_extension(app, ext_id)
|
extension = _get_registered_extension(ext_id)
|
||||||
permissions = await _extension_permissions(extension)
|
permissions = await _extension_permissions(extension)
|
||||||
api = ExtensionAPI(
|
api = ExtensionAPI(
|
||||||
extension.id,
|
extension.id,
|
||||||
@@ -190,12 +191,11 @@ def _parse_wasm_export_result(extension: WasmExtension, value: Any) -> dict[str,
|
|||||||
return {"ok": True, "data": parsed}
|
return {"ok": True, "data": parsed}
|
||||||
|
|
||||||
|
|
||||||
def _get_registered_extension(app: FastAPI, ext_id: str) -> WasmExtension:
|
def _get_registered_extension(ext_id: str) -> WasmExtension:
|
||||||
extensions = getattr(app.state, "lnbits_wasm_extensions", {})
|
extension = core_app_extra.wasm_extension_registry.get(ext_id)
|
||||||
extension = extensions.get(ext_id)
|
|
||||||
if extension:
|
if extension:
|
||||||
return extension
|
return extension
|
||||||
return register_wasm_extension(app, ext_id)
|
raise RuntimeError(f"WASM extension '{ext_id}' is not registered.")
|
||||||
|
|
||||||
|
|
||||||
async def _extension_permissions(extension: WasmExtension) -> list[Any]:
|
async def _extension_permissions(extension: WasmExtension) -> list[Any]:
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from .misc import (
|
|||||||
CoreAppExtra,
|
CoreAppExtra,
|
||||||
DbVersion,
|
DbVersion,
|
||||||
SimpleStatus,
|
SimpleStatus,
|
||||||
|
WasmExtensionRegistry,
|
||||||
)
|
)
|
||||||
from .payments import (
|
from .payments import (
|
||||||
CancelInvoice,
|
CancelInvoice,
|
||||||
@@ -102,5 +103,6 @@ __all__ = [
|
|||||||
"Wallet",
|
"Wallet",
|
||||||
"WalletInfo",
|
"WalletInfo",
|
||||||
"WalletTypeInfo",
|
"WalletTypeInfo",
|
||||||
|
"WasmExtensionRegistry",
|
||||||
"WebPushSubscription",
|
"WebPushSubscription",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -22,6 +22,23 @@ class CoreAppExtra:
|
|||||||
_do_nothing_async
|
_do_nothing_async
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.wasm_extension_registry = WasmExtensionRegistry()
|
||||||
|
|
||||||
|
|
||||||
|
class WasmExtensionRegistry:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self._extensions: dict[str, Any] = {}
|
||||||
|
|
||||||
|
def register(self, extension: Any) -> None:
|
||||||
|
self._extensions[extension.id] = extension
|
||||||
|
|
||||||
|
def get(self, ext_id: str) -> Any | None:
|
||||||
|
return self._extensions.get(ext_id)
|
||||||
|
|
||||||
|
def list(self) -> list[Any]:
|
||||||
|
return list(self._extensions.values())
|
||||||
|
|
||||||
|
|
||||||
class ConversionData(BaseModel):
|
class ConversionData(BaseModel):
|
||||||
from_: str = "sat"
|
from_: str = "sat"
|
||||||
|
|||||||
@@ -112,8 +112,7 @@ async def dispatch_wasm_invoice_paid(app: FastAPI, payment: Any) -> None:
|
|||||||
if not extension_id:
|
if not extension_id:
|
||||||
return
|
return
|
||||||
|
|
||||||
extensions = getattr(app.state, "lnbits_wasm_extensions", {})
|
extension = core_app_extra.wasm_extension_registry.get(extension_id)
|
||||||
extension = extensions.get(extension_id)
|
|
||||||
if not extension:
|
if not extension:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user