From 534dfdb4e0f6d64ddfb2828cb0637c5a5e14e47d Mon Sep 17 00:00:00 2001 From: Stefan Stammberger Date: Wed, 29 Sep 2021 20:44:00 +0200 Subject: [PATCH 1/2] fix: startup of lntickets listeners --- lnbits/app.py | 4 ++++ lnbits/extensions/lnticket/__init__.py | 14 +++++++++----- lnbits/extensions/lnticket/tasks.py | 12 ++++-------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index b0289b93..a37a5443 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -96,6 +96,10 @@ def register_routes(app: FastAPI) -> None: ext_module = importlib.import_module(f"lnbits.extensions.{ext.code}") ext_route = getattr(ext_module, f"{ext.code}_ext") + if hasattr(ext_module, f"{ext.code}_start"): + ext_start_func = getattr(ext_module, f"{ext.code}_start") + ext_start_func() + if hasattr(ext_module, f"{ext.code}_static_files"): ext_statics = getattr(ext_module, f"{ext.code}_static_files") for s in ext_statics: diff --git a/lnbits/extensions/lnticket/__init__.py b/lnbits/extensions/lnticket/__init__.py index 0a872e8c..9394a1c9 100644 --- a/lnbits/extensions/lnticket/__init__.py +++ b/lnbits/extensions/lnticket/__init__.py @@ -1,7 +1,10 @@ +import asyncio + from fastapi import APIRouter from lnbits.db import Database from lnbits.helpers import template_renderer +from lnbits.tasks import catch_everything_and_restart db = Database("ext_lnticket") @@ -21,9 +24,10 @@ def lnticket_renderer(): from .views_api import * # noqa from .views import * # noqa -from .tasks import register_listeners +from .tasks import wait_for_paid_invoices + + +def lnticket_start(): + loop = asyncio.get_event_loop() + loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) -@lnticket_ext.on_event("startup") -def _do_it(): - # FIXME: isn't called yet - register_listeners() diff --git a/lnbits/extensions/lnticket/tasks.py b/lnbits/extensions/lnticket/tasks.py index d08d74c9..89e5ebf5 100644 --- a/lnbits/extensions/lnticket/tasks.py +++ b/lnbits/extensions/lnticket/tasks.py @@ -6,16 +6,12 @@ from lnbits.tasks import register_invoice_listener from .crud import get_ticket, set_ticket_paid -async def register_listeners(): - send_queue = asyncio.Queue() - recv_queue = asyncio.Queue() - register_invoice_listener(send_queue) - await wait_for_paid_invoices(recv_queue) +async def wait_for_paid_invoices(): + invoice_queue = asyncio.Queue() + register_invoice_listener(invoice_queue) - -async def wait_for_paid_invoices(invoice_paid_queue: asyncio.Queue): while True: - payment = await invoice_paid_queue.get() + payment = await invoice_queue.get() await on_invoice_paid(payment) From 87c784aa0cd34e4da91f73179f09c19d7bf3c698 Mon Sep 17 00:00:00 2001 From: Stefan Stammberger Date: Wed, 29 Sep 2021 20:57:35 +0200 Subject: [PATCH 2/2] fix: create and pay a ticket code --- lnbits/extensions/lnticket/crud.py | 10 +++------- lnbits/extensions/lnticket/views_api.py | 7 +++---- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/lnbits/extensions/lnticket/crud.py b/lnbits/extensions/lnticket/crud.py index 327fb90e..e391abb5 100644 --- a/lnbits/extensions/lnticket/crud.py +++ b/lnbits/extensions/lnticket/crud.py @@ -4,25 +4,21 @@ from typing import List, Optional, Union from lnbits.helpers import urlsafe_short_hash from . import db -from .models import CreateFormData, Tickets, Forms +from .models import CreateFormData, CreateTicketData, Tickets, Forms import httpx async def create_ticket( payment_hash: str, wallet: str, - form: str, - name: str, - email: str, - ltext: str, - sats: int, + data: CreateTicketData ) -> Tickets: await db.execute( """ INSERT INTO lnticket.ticket (id, form, email, ltext, name, wallet, sats, paid) VALUES (?, ?, ?, ?, ?, ?, ?, ?) """, - (payment_hash, form, email, ltext, name, wallet, sats, False), + (payment_hash, data.form, data.email, data.ltext, data.name, wallet, data.sats, False), ) ticket = await get_ticket(payment_hash) diff --git a/lnbits/extensions/lnticket/views_api.py b/lnbits/extensions/lnticket/views_api.py index 8ead81a3..1474518b 100644 --- a/lnbits/extensions/lnticket/views_api.py +++ b/lnbits/extensions/lnticket/views_api.py @@ -136,13 +136,12 @@ async def api_ticket_make_ticket(data: CreateTicketData, form_id): ) # return {"message": "LNTicket does not exist."}, HTTPStatus.NOT_FOUND - nwords = len(re.split(r"\s+", data["ltext"])) - sats = data["sats"] + nwords = len(re.split(r"\s+", data.ltext)) try: payment_hash, payment_request = await create_invoice( wallet_id=form.wallet, - amount=sats, + amount=data.sats, memo=f"ticket with {nwords} words on {form_id}", extra={"tag": "lnticket"}, ) @@ -154,7 +153,7 @@ async def api_ticket_make_ticket(data: CreateTicketData, form_id): # return {"message": str(e)}, HTTPStatus.INTERNAL_SERVER_ERROR ticket = await create_ticket( - payment_hash=payment_hash, wallet=form.wallet, **data + payment_hash=payment_hash, wallet=form.wallet, data=data ) if not ticket: