diff --git a/__init__.py b/__init__.py index a14fe6a..0899a8e 100644 --- a/__init__.py +++ b/__init__.py @@ -2,6 +2,7 @@ from fastapi import APIRouter from starlette.staticfiles import StaticFiles +from typing import List from lnbits.db import Database from lnbits.helpers import template_renderer @@ -37,7 +38,9 @@ def market_renderer(): from .views import * # noqa: F401,F403 from .views_api import * # noqa: F401,F403 +scheduled_tasks: List[asyncio.Task] = [] def market_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/views_api.py b/views_api.py index 221d51b..dc48903 100644 --- a/views_api.py +++ b/views_api.py @@ -13,11 +13,12 @@ get_key_type, require_admin_key, require_invoice_key, + check_admin, ) from lnbits.helpers import urlsafe_short_hash from lnbits.utils.exchange_rates import currencies -from . import db, market_ext +from . import db, market_ext, scheduled_tasks from .crud import ( create_market_market, create_market_market_stalls, @@ -525,3 +526,14 @@ async def api_set_settings( user = wallet.wallet.user return await create_market_settings(user, data) + + +@market_ext.delete("/api/v1", status_code=HTTPStatus.OK, dependencies=[Depends(check_admin)]) +async def api_stop(): + for t in scheduled_tasks: + try: + t.cancel() + except Exception as ex: + logger.warning(ex) + + return {"success": True}