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.types import Scope
|
||||
|
||||
from lnbits.core.db import core_app_extra
|
||||
from lnbits.decorators import (
|
||||
check_access_token,
|
||||
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_api_routes(app, loaded)
|
||||
|
||||
extensions = getattr(app.state, "lnbits_wasm_extensions", {})
|
||||
extensions[ext_id] = loaded
|
||||
app.state.lnbits_wasm_extensions = extensions
|
||||
core_app_extra.wasm_extension_registry.register(loaded)
|
||||
|
||||
settings.activate_extension_paths(ext_id, "", [])
|
||||
logger.info(
|
||||
|
||||
@@ -10,9 +10,10 @@ from typing import Any
|
||||
from fastapi import FastAPI
|
||||
|
||||
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 .loader import WasmExtension, register_wasm_extension
|
||||
from .loader import WasmExtension
|
||||
from .runtime import ExtensionAPIHost
|
||||
|
||||
|
||||
@@ -26,7 +27,7 @@ async def invoke_wasm_extension_export(
|
||||
context: str = "user",
|
||||
owner_id: str | None = None,
|
||||
) -> dict[str, Any]:
|
||||
extension = _get_registered_extension(app, ext_id)
|
||||
extension = _get_registered_extension(ext_id)
|
||||
permissions = await _extension_permissions(extension)
|
||||
api = ExtensionAPI(
|
||||
extension.id,
|
||||
@@ -190,12 +191,11 @@ def _parse_wasm_export_result(extension: WasmExtension, value: Any) -> dict[str,
|
||||
return {"ok": True, "data": parsed}
|
||||
|
||||
|
||||
def _get_registered_extension(app: FastAPI, ext_id: str) -> WasmExtension:
|
||||
extensions = getattr(app.state, "lnbits_wasm_extensions", {})
|
||||
extension = extensions.get(ext_id)
|
||||
def _get_registered_extension(ext_id: str) -> WasmExtension:
|
||||
extension = core_app_extra.wasm_extension_registry.get(ext_id)
|
||||
if 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]:
|
||||
|
||||
@@ -7,6 +7,7 @@ from .misc import (
|
||||
CoreAppExtra,
|
||||
DbVersion,
|
||||
SimpleStatus,
|
||||
WasmExtensionRegistry,
|
||||
)
|
||||
from .payments import (
|
||||
CancelInvoice,
|
||||
@@ -102,5 +103,6 @@ __all__ = [
|
||||
"Wallet",
|
||||
"WalletInfo",
|
||||
"WalletTypeInfo",
|
||||
"WasmExtensionRegistry",
|
||||
"WebPushSubscription",
|
||||
]
|
||||
|
||||
@@ -22,6 +22,23 @@ class CoreAppExtra:
|
||||
_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):
|
||||
from_: str = "sat"
|
||||
|
||||
Reference in New Issue
Block a user