mirror of
https://github.com/lnbits/lnbits.git
synced 2025-09-28 21:02:31 +02:00
feat: stop extension background work on uninstall
or upgrade
This commit is contained in:
@@ -2,6 +2,7 @@ import importlib
|
|||||||
import re
|
import re
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
import httpx
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from lnbits.db import Connection
|
from lnbits.db import Connection
|
||||||
@@ -42,3 +43,12 @@ async def run_migration(db: Connection, migrations_module: Any, current_version:
|
|||||||
else:
|
else:
|
||||||
async with core_db.connect() as conn:
|
async with core_db.connect() as conn:
|
||||||
await update_migration_version(conn, db_name, version)
|
await update_migration_version(conn, db_name, version)
|
||||||
|
|
||||||
|
|
||||||
|
async def stop_extension_work(ext_id: str, user: str):
|
||||||
|
"""Stop background workk for extension (like asyncio.Tasks, WebSockets, etc)"""
|
||||||
|
async with httpx.AsyncClient() as client:
|
||||||
|
try:
|
||||||
|
await client.delete(url=f"/{ext_id}/api/v1?usr={user}")
|
||||||
|
except Exception as ex:
|
||||||
|
logger.warning(ex)
|
||||||
|
@@ -29,7 +29,7 @@ from sse_starlette.sse import EventSourceResponse
|
|||||||
from starlette.responses import RedirectResponse, StreamingResponse
|
from starlette.responses import RedirectResponse, StreamingResponse
|
||||||
|
|
||||||
from lnbits import bolt11, lnurl
|
from lnbits import bolt11, lnurl
|
||||||
from lnbits.core.helpers import migrate_extension_database
|
from lnbits.core.helpers import migrate_extension_database, stop_extension_work
|
||||||
from lnbits.core.models import Payment, User, Wallet
|
from lnbits.core.models import Payment, User, Wallet
|
||||||
from lnbits.decorators import (
|
from lnbits.decorators import (
|
||||||
WalletTypeInfo,
|
WalletTypeInfo,
|
||||||
@@ -755,6 +755,8 @@ async def api_install_extension(
|
|||||||
if data.ext_id not in settings.lnbits_deactivated_extensions:
|
if data.ext_id not in settings.lnbits_deactivated_extensions:
|
||||||
settings.lnbits_deactivated_extensions += [data.ext_id]
|
settings.lnbits_deactivated_extensions += [data.ext_id]
|
||||||
|
|
||||||
|
# call stop while the old routes are still active
|
||||||
|
await stop_extension_work(data.ext_id, settings.super_user)
|
||||||
# mount routes for the new version
|
# mount routes for the new version
|
||||||
core_app_extra.register_new_ext_routes(extension)
|
core_app_extra.register_new_ext_routes(extension)
|
||||||
|
|
||||||
@@ -798,6 +800,9 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# call stop while the old routes are still active
|
||||||
|
await stop_extension_work(ext_id, settings.super_user)
|
||||||
|
|
||||||
if ext_id not in settings.lnbits_deactivated_extensions:
|
if ext_id not in settings.lnbits_deactivated_extensions:
|
||||||
settings.lnbits_deactivated_extensions += [ext_id]
|
settings.lnbits_deactivated_extensions += [ext_id]
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user