From dd645f882214c4590195528821dbc9bfd690fff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Mon, 2 Jan 2023 11:18:25 +0100 Subject: [PATCH 1/2] fix events for mypy --- lnbits/extensions/events/tasks.py | 23 ++++++++++------------- lnbits/extensions/events/views.py | 3 +-- lnbits/extensions/events/views_api.py | 17 ++++++++++------- pyproject.toml | 1 - 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/lnbits/extensions/events/tasks.py b/lnbits/extensions/events/tasks.py index d29215bf2..5eae7373d 100644 --- a/lnbits/extensions/events/tasks.py +++ b/lnbits/extensions/events/tasks.py @@ -1,15 +1,6 @@ import asyncio -import json -from http import HTTPStatus -from urllib.parse import urlparse -import httpx -from fastapi import HTTPException -from loguru import logger - -from lnbits import bolt11 from lnbits.core.models import Payment -from lnbits.core.services import pay_invoice from lnbits.extensions.events.models import CreateTicket from lnbits.helpers import get_current_extension_name from lnbits.tasks import register_invoice_listener @@ -29,11 +20,17 @@ async def wait_for_paid_invoices(): async def on_invoice_paid(payment: Payment) -> None: # (avoid loops) if ( - "events" == payment.extra.get("tag") + payment.extra + and "events" == payment.extra.get("tag") and payment.extra.get("name") and payment.extra.get("email") ): - CreateTicket.name = str(payment.extra.get("name")) - CreateTicket.email = str(payment.extra.get("email")) - await api_ticket_send_ticket(payment.memo, payment.payment_hash, CreateTicket) + await api_ticket_send_ticket( + payment.memo, + payment.payment_hash, + CreateTicket( + name=str(payment.extra.get("name")), + email=str(payment.extra.get("email")), + ), + ) return diff --git a/lnbits/extensions/events/views.py b/lnbits/extensions/events/views.py index 16875e819..4ed567956 100644 --- a/lnbits/extensions/events/views.py +++ b/lnbits/extensions/events/views.py @@ -1,8 +1,7 @@ from datetime import date, datetime from http import HTTPStatus -from fastapi import Request -from fastapi.params import Depends +from fastapi import Depends, Request from fastapi.templating import Jinja2Templates from starlette.exceptions import HTTPException from starlette.responses import HTMLResponse diff --git a/lnbits/extensions/events/views_api.py b/lnbits/extensions/events/views_api.py index 668e7f779..767b16d83 100644 --- a/lnbits/extensions/events/views_api.py +++ b/lnbits/extensions/events/views_api.py @@ -1,10 +1,7 @@ from http import HTTPStatus -from fastapi.param_functions import Query -from fastapi.params import Depends -from loguru import logger +from fastapi import Depends, Query from starlette.exceptions import HTTPException -from starlette.requests import Request from lnbits.core.crud import get_user from lnbits.core.services import create_invoice @@ -38,7 +35,8 @@ async def api_events( wallet_ids = [wallet.wallet.id] if all_wallets: - wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids + user = await get_user(wallet.wallet.user) + wallet_ids = user.wallet_ids if user else [] return [event.dict() for event in await get_events(wallet_ids)] @@ -92,7 +90,8 @@ async def api_tickets( wallet_ids = [wallet.wallet.id] if all_wallets: - wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids + user = await get_user(wallet.wallet.user) + wallet_ids = user.wallet_ids if user else [] return [ticket.dict() for ticket in await get_tickets(wallet_ids)] @@ -119,6 +118,11 @@ async def api_ticket_make_ticket(event_id, name, email): @events_ext.post("/api/v1/tickets/{event_id}/{payment_hash}") async def api_ticket_send_ticket(event_id, payment_hash, data: CreateTicket): event = await get_event(event_id) + if not event: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Event could not be fetched.", + ) try: status = await api_payment(payment_hash) if status["paid"]: @@ -129,7 +133,6 @@ async def api_ticket_send_ticket(event_id, payment_hash, data: CreateTicket): name=data.name, email=data.email, ) - if not ticket: raise HTTPException( status_code=HTTPStatus.NOT_FOUND, diff --git a/pyproject.toml b/pyproject.toml index 96a066e53..237c04e21 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -92,7 +92,6 @@ exclude = """(?x)( ^lnbits/extensions/bleskomat. | ^lnbits/extensions/boltz. | ^lnbits/extensions/boltcards. - | ^lnbits/extensions/events. | ^lnbits/extensions/gerty. | ^lnbits/extensions/hivemind. | ^lnbits/extensions/invoices. From d371dac84c225d7b61ed86743124ff32f45744c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Wed, 4 Jan 2023 08:55:47 +0100 Subject: [PATCH 2/2] fixup events bugs, tickets --- lnbits/extensions/events/views_api.py | 38 ++++++++++++++------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/lnbits/extensions/events/views_api.py b/lnbits/extensions/events/views_api.py index 767b16d83..4ed3932fb 100644 --- a/lnbits/extensions/events/views_api.py +++ b/lnbits/extensions/events/views_api.py @@ -123,25 +123,27 @@ async def api_ticket_send_ticket(event_id, payment_hash, data: CreateTicket): status_code=HTTPStatus.NOT_FOUND, detail=f"Event could not be fetched.", ) - try: - status = await api_payment(payment_hash) - if status["paid"]: - ticket = await create_ticket( - payment_hash=payment_hash, - wallet=event.wallet, - event=event_id, - name=data.name, - email=data.email, - ) - if not ticket: - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail=f"Event could not be fetched.", - ) - return {"paid": True, "ticket_id": ticket.id} - except Exception: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND, detail="Not paid") + status = await api_payment(payment_hash) + if status["paid"]: + + exists = await get_ticket(payment_hash) + if exists: + return {"paid": True, "ticket_id": exists.id} + + ticket = await create_ticket( + payment_hash=payment_hash, + wallet=event.wallet, + event=event_id, + name=data.name, + email=data.email, + ) + if not ticket: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Event could not be fetched.", + ) + return {"paid": True, "ticket_id": ticket.id} return {"paid": False}