diff --git a/lnbits/extensions/diagonalley/__init__.py b/lnbits/extensions/diagonalley/__init__.py index 720c55c8c..cab656856 100644 --- a/lnbits/extensions/diagonalley/__init__.py +++ b/lnbits/extensions/diagonalley/__init__.py @@ -1,16 +1,37 @@ -from quart import Blueprint +import asyncio + +from fastapi import APIRouter +from fastapi.staticfiles import StaticFiles + from lnbits.db import Database +from lnbits.helpers import template_renderer +from lnbits.tasks import catch_everything_and_restart db = Database("ext_diagonalley") -diagonalley_ext: Blueprint = Blueprint( - "diagonalley", __name__, static_folder="static", template_folder="templates" +diagonalley_static_files = [ + { + "path": "/diagonalley/static", + "app": StaticFiles(directory="lnbits/extensions/diagonalley/static"), + "name": "diagonalley_static", + } +] + +diagonalley_ext: APIRouter = APIRouter( + prefix="/diagonalley", tags=["diagonalley"] + # "diagonalley", __name__, static_folder="static", template_folder="templates" ) -from .views_api import * # noqa +def diagonalley_renderer(): + return template_renderer(["lnbits/extensions/diagonalley/templates"]) + + +from .tasks import wait_for_paid_invoices from .views import * # noqa +from .views_api import * # noqa -from .tasks import register_listeners -from lnbits.tasks import record_async -diagonalley_ext.record(record_async(register_listeners)) +def diagonalley_start(): + loop = asyncio.get_event_loop() + loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) + diff --git a/lnbits/extensions/diagonalley/tasks.py b/lnbits/extensions/diagonalley/tasks.py index 3fee63d99..bcbb7025a 100644 --- a/lnbits/extensions/diagonalley/tasks.py +++ b/lnbits/extensions/diagonalley/tasks.py @@ -3,8 +3,6 @@ import asyncio from lnbits.core.models import Payment from lnbits.tasks import register_invoice_listener -from .crud import get_ticket, set_ticket_paid - async def wait_for_paid_invoices(): invoice_queue = asyncio.Queue() @@ -16,6 +14,7 @@ async def wait_for_paid_invoices(): async def on_invoice_paid(payment: Payment) -> None: + """ if "lnticket" != payment.extra.get("tag"): # not a lnticket invoice return @@ -26,4 +25,5 @@ async def on_invoice_paid(payment: Payment) -> None: return await payment.set_pending(False) - await set_ticket_paid(payment.payment_hash) \ No newline at end of file + await set_ticket_paid(payment.payment_hash) + """ diff --git a/lnbits/extensions/diagonalley/views.py b/lnbits/extensions/diagonalley/views.py index 2deed72b5..ae0899ca6 100644 --- a/lnbits/extensions/diagonalley/views.py +++ b/lnbits/extensions/diagonalley/views.py @@ -1,44 +1,35 @@ -from typing import List - -from fastapi import Request, WebSocket, WebSocketDisconnect -from fastapi.params import Depends -from fastapi.templating import Jinja2Templates -from starlette.responses import HTMLResponse # type: ignore - from http import HTTPStatus -import json -from lnbits.decorators import check_user_exists, validate_uuids -from lnbits.extensions.diagonalley import diagonalley_ext -from .crud import ( - create_diagonalley_product, - get_diagonalley_product, - get_diagonalley_products, - delete_diagonalley_product, - create_diagonalley_order, - get_diagonalley_order, - get_diagonalley_orders, - update_diagonalley_product, -) +from fastapi import Request +from fastapi.params import Depends +from fastapi.templating import Jinja2Templates +from starlette.exceptions import HTTPException +from starlette.responses import HTMLResponse +from lnbits.core.models import User +from lnbits.decorators import check_user_exists # type: ignore +from lnbits.extensions.diagonalley import diagonalley_ext, diagonalley_renderer + +from .crud import get_diagonalley_products + +templates = Jinja2Templates(directory="templates") @diagonalley_ext.get("/", response_class=HTMLResponse) -@validate_uuids(["usr"], required=True) -@check_user_exists(request: Request) -async def index(): - return await render_template("diagonalley/index.html", user=g.user) +async def index(request: Request, user: User = Depends(check_user_exists)): + return diagonalley_renderer().TemplateResponse( + "diagonalley/index.html", {"request": request, "user": user.dict()} + ) - -@diagonalley_ext.get("/", response_class=HTMLResponse) +@diagonalley_ext.get("/{stall_id}", response_class=HTMLResponse) async def display(request: Request, stall_id): product = await get_diagonalley_products(stall_id) + if not product: - abort(HTTPStatus.NOT_FOUND, "Stall does not exist.") - - return await render_template( + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, detail="Stall does not exist." + ) + return diagonalley_renderer().TemplateResponse( "diagonalley/stall.html", - stall=json.dumps( - [product._asdict() for product in await get_diagonalley_products(stall_id)] - ), + {"stall": [product.dict() for product in await get_diagonalley_products(stall_id)]} ) diff --git a/lnbits/extensions/diagonalley/views_api.py b/lnbits/extensions/diagonalley/views_api.py index 165d2a0cb..43232841c 100644 --- a/lnbits/extensions/diagonalley/views_api.py +++ b/lnbits/extensions/diagonalley/views_api.py @@ -9,13 +9,7 @@ from starlette.exceptions import HTTPException from lnbits.core.crud import get_user from lnbits.core.services import create_invoice -from lnbits.decorators import ( - WalletTypeInfo, - api_check_wallet_key, - api_validate_post_request, - get_key_type, - require_admin_key, -) +from lnbits.decorators import WalletTypeInfo, get_key_type, require_admin_key from . import db, diagonalley_ext from .crud import (