fix: create row on event
This commit is contained in:
@@ -108,7 +108,7 @@ def extension_api_method(
|
|||||||
) -> Callable[[ExtensionAPI, _RequestModel], Awaitable[_ResponseModel]]:
|
) -> Callable[[ExtensionAPI, _RequestModel], Awaitable[_ResponseModel]]:
|
||||||
@wraps(function)
|
@wraps(function)
|
||||||
async def wrapper(self: ExtensionAPI, request: _RequestModel) -> _ResponseModel:
|
async def wrapper(self: ExtensionAPI, request: _RequestModel) -> _ResponseModel:
|
||||||
if require_auth and not self.user_id:
|
if require_auth and not self.has_authenticated_context():
|
||||||
raise PermissionError(
|
raise PermissionError(
|
||||||
f"Extension API method '{method_id}' requires authentication."
|
f"Extension API method '{method_id}' requires authentication."
|
||||||
)
|
)
|
||||||
@@ -128,20 +128,32 @@ class ExtensionAPI:
|
|||||||
permissions: Iterable[Any],
|
permissions: Iterable[Any],
|
||||||
*,
|
*,
|
||||||
user_id: str | None = None,
|
user_id: str | None = None,
|
||||||
wallet_id: str | None = None,
|
context: str = "user",
|
||||||
) -> None:
|
) -> None:
|
||||||
self.extension_id = extension_id
|
self.extension_id = extension_id
|
||||||
self.permissions, self.permission_policies = self._permission_data(permissions)
|
self.permissions, self.permission_policies = self._permission_data(permissions)
|
||||||
self.user_id = user_id
|
self.user_id = user_id
|
||||||
self.wallet_id = wallet_id
|
self.context = context
|
||||||
self._uuid = secrets.token_urlsafe(12).replace("-", "_")
|
self._uuid = secrets.token_urlsafe(12).replace("-", "_")
|
||||||
|
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
return (
|
||||||
|
"ExtensionAPI("
|
||||||
|
f"extension_id={self.extension_id!r}, "
|
||||||
|
f"context={self.context!r}, "
|
||||||
|
f"_uuid={self._uuid!r}"
|
||||||
|
")"
|
||||||
|
)
|
||||||
|
|
||||||
def require_permission(self, permission: str | None) -> None:
|
def require_permission(self, permission: str | None) -> None:
|
||||||
if permission and permission not in self.permissions:
|
if permission and permission not in self.permissions:
|
||||||
raise PermissionError(
|
raise PermissionError(
|
||||||
f"Extension '{self.extension_id}' is missing permission '{permission}'."
|
f"Extension '{self.extension_id}' is missing permission '{permission}'."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def has_authenticated_context(self) -> bool:
|
||||||
|
return bool(self.user_id) or self.context == "event"
|
||||||
|
|
||||||
@extension_api_method(
|
@extension_api_method(
|
||||||
method_id="storage.get",
|
method_id="storage.get",
|
||||||
namespace="storage",
|
namespace="storage",
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ async def invoke_wasm_extension_export(
|
|||||||
payload: Mapping[str, Any] | None = None,
|
payload: Mapping[str, Any] | None = None,
|
||||||
*,
|
*,
|
||||||
user: Any | None = None,
|
user: Any | None = None,
|
||||||
|
context: str = "user",
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
extension = _get_registered_extension(app, ext_id)
|
extension = _get_registered_extension(app, ext_id)
|
||||||
permissions = await _extension_permissions(extension)
|
permissions = await _extension_permissions(extension)
|
||||||
@@ -30,7 +31,9 @@ async def invoke_wasm_extension_export(
|
|||||||
extension.id,
|
extension.id,
|
||||||
permissions,
|
permissions,
|
||||||
user_id=_user_id(user),
|
user_id=_user_id(user),
|
||||||
|
context=context,
|
||||||
)
|
)
|
||||||
|
print("### api", api)
|
||||||
|
|
||||||
return await asyncio.to_thread(
|
return await asyncio.to_thread(
|
||||||
_invoke_wasm_extension_export_sync,
|
_invoke_wasm_extension_export_sync,
|
||||||
|
|||||||
Reference in New Issue
Block a user