From 6540cd9d764ca9904e34f6230ca4e0d5f8a9aa50 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 15 Feb 2023 15:45:28 +0200 Subject: [PATCH] feat: add endpoint to stop background tasks --- lnbits/extensions/lnurlp/__init__.py | 5 ++++- lnbits/extensions/lnurlp/views_api.py | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lnbits/extensions/lnurlp/__init__.py b/lnbits/extensions/lnurlp/__init__.py index f5ea0cd2..aa13bb92 100644 --- a/lnbits/extensions/lnurlp/__init__.py +++ b/lnbits/extensions/lnurlp/__init__.py @@ -1,4 +1,5 @@ import asyncio +from typing import List from fastapi import APIRouter from fastapi.staticfiles import StaticFiles @@ -16,6 +17,7 @@ lnurlp_static_files = [ "name": "lnurlp_static", } ] +scheduled_tasks: List[asyncio.Task] = [] lnurlp_ext: APIRouter = APIRouter(prefix="/lnurlp", tags=["lnurlp"]) @@ -32,4 +34,5 @@ from .views_api import * # noqa: F401,F403 def lnurlp_start(): loop = asyncio.get_event_loop() - loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) + task = loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) + scheduled_tasks.append(task) diff --git a/lnbits/extensions/lnurlp/views_api.py b/lnbits/extensions/lnurlp/views_api.py index badaaebf..b4af2949 100644 --- a/lnbits/extensions/lnurlp/views_api.py +++ b/lnbits/extensions/lnurlp/views_api.py @@ -1,4 +1,5 @@ import json +from asyncio.log import logger from http import HTTPStatus from fastapi import Depends, Query, Request @@ -6,10 +7,10 @@ from lnurl.exceptions import InvalidUrl as LnurlInvalidUrl from starlette.exceptions import HTTPException from lnbits.core.crud import get_user -from lnbits.decorators import WalletTypeInfo, get_key_type +from lnbits.decorators import WalletTypeInfo, check_admin, get_key_type from lnbits.utils.exchange_rates import currencies, get_fiat_rate_satoshis -from . import lnurlp_ext +from . import lnurlp_ext, scheduled_tasks from .crud import ( create_pay_link, delete_pay_link, @@ -166,3 +167,14 @@ async def api_check_fiat_rate(currency): rate = None return {"rate": rate} + + +@lnurlp_ext.delete("/api/v1", status_code=HTTPStatus.OK) +async def api_stop(wallet: WalletTypeInfo = Depends(check_admin)): + for t in scheduled_tasks: + try: + t.cancel() + except Exception as ex: + logger.warning(ex) + + return {"success": True}