From ee34d978d88ade84cd8713c0b100a99b871fbc26 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Thu, 4 Nov 2021 15:12:10 +0000 Subject: [PATCH 1/4] install guide fastapi --- docs/guide/installation.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/guide/installation.md b/docs/guide/installation.md index 8a2782b72..ca08ad711 100644 --- a/docs/guide/installation.md +++ b/docs/guide/installation.md @@ -16,12 +16,10 @@ python3 -m venv venv ./venv/bin/pip install -r requirements.txt cp .env.example .env mkdir data -./venv/bin/quart assets -./venv/bin/quart migrate -./venv/bin/hypercorn -k trio --bind 0.0.0.0:5000 'lnbits.app:create_app()' +./venv/bin/uvicorn lnbits.__main__:app --reload ``` -Now you can visit your LNbits at http://localhost:5000/. +Now you can visit your LNbits at http://localhost:8000/. Now modify the `.env` file with any settings you prefer and add a proper [funding source](./wallets.md) by modifying the value of `LNBITS_BACKEND_WALLET_CLASS` and providing the extra information and credentials related to the chosen funding source. From f220797a356a1e4f178e7090190f0667886e2273 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Thu, 4 Nov 2021 15:21:17 +0000 Subject: [PATCH 2/4] keep port 5000 --- docs/guide/installation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guide/installation.md b/docs/guide/installation.md index ca08ad711..728bfc32b 100644 --- a/docs/guide/installation.md +++ b/docs/guide/installation.md @@ -16,10 +16,10 @@ python3 -m venv venv ./venv/bin/pip install -r requirements.txt cp .env.example .env mkdir data -./venv/bin/uvicorn lnbits.__main__:app --reload +./venv/bin/uvicorn lnbits.__main__:app --port 5000 ``` -Now you can visit your LNbits at http://localhost:8000/. +Now you can visit your LNbits at http://localhost:5000/. Now modify the `.env` file with any settings you prefer and add a proper [funding source](./wallets.md) by modifying the value of `LNBITS_BACKEND_WALLET_CLASS` and providing the extra information and credentials related to the chosen funding source. From 1718e3d804c427c275754a5224f7fd17c5590830 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Thu, 4 Nov 2021 16:41:23 +0000 Subject: [PATCH 3/4] fix satsdice update --- lnbits/extensions/satsdice/models.py | 19 ++++++++++--------- lnbits/extensions/satsdice/views_api.py | 5 +++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lnbits/extensions/satsdice/models.py b/lnbits/extensions/satsdice/models.py index 11c8da690..f27f66aa0 100644 --- a/lnbits/extensions/satsdice/models.py +++ b/lnbits/extensions/satsdice/models.py @@ -1,15 +1,16 @@ import json -from lnurl import Lnurl, LnurlWithdrawResponse, encode as lnurl_encode # type: ignore -from urllib.parse import urlparse, urlunparse, parse_qs, urlencode, ParseResult -from lnurl.types import LnurlPayMetadata # type: ignore from sqlite3 import Row -from typing import NamedTuple, Optional, Dict +from typing import Dict, NamedTuple, Optional +from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse + import shortuuid # type: ignore -from fastapi.param_functions import Query -from pydantic.main import BaseModel -from pydantic import BaseModel -from typing import Optional from fastapi import FastAPI, Request +from fastapi.param_functions import Query +from lnurl import Lnurl, LnurlWithdrawResponse +from lnurl import encode as lnurl_encode # type: ignore +from lnurl.types import LnurlPayMetadata # type: ignore +from pydantic import BaseModel +from pydantic.main import BaseModel class satsdiceLink(BaseModel): @@ -105,7 +106,7 @@ class HashCheck(BaseModel): class CreateSatsDiceLink(BaseModel): - wallet_id: str = Query(None) + wallet: str = Query(None) title: str = Query(None) base_url: str = Query(None) min_bet: str = Query(None) diff --git a/lnbits/extensions/satsdice/views_api.py b/lnbits/extensions/satsdice/views_api.py index b935ba88d..427a5eb99 100644 --- a/lnbits/extensions/satsdice/views_api.py +++ b/lnbits/extensions/satsdice/views_api.py @@ -22,7 +22,7 @@ from .crud import ( update_satsdice_pay, update_satsdice_withdraw, ) -from .models import CreateSatsDiceLink, CreateSatsDiceWithdraws +from .models import CreateSatsDiceLink, CreateSatsDiceWithdraws, satsdiceLink ################LNURL pay @@ -92,7 +92,8 @@ async def api_link_create_or_update( detail="Come on, seriously, this isn't your satsdice!", ) - data.wallet_id = wallet.wallet.id + + data.wallet = wallet.wallet.id link = await update_satsdice_pay(link_id, **data.dict()) else: link = await create_satsdice_pay(wallet_id=wallet.wallet.id, data=data) From 54f4dfd8382ef3e7fbc9e4faddd58f9d52fd2f75 Mon Sep 17 00:00:00 2001 From: Stefan Stammberger Date: Thu, 4 Nov 2021 19:49:48 +0100 Subject: [PATCH 4/4] fix: paid_invoices_stream for C-Lightning wallet --- lnbits/wallets/clightning.py | 41 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/lnbits/wallets/clightning.py b/lnbits/wallets/clightning.py index bd2c313a4..bb9543896 100644 --- a/lnbits/wallets/clightning.py +++ b/lnbits/wallets/clightning.py @@ -5,21 +5,35 @@ except ImportError: # pragma: nocover import asyncio import random -import json - +from functools import partial, wraps from os import getenv -from typing import Optional, AsyncGenerator +from typing import AsyncGenerator, Optional from .base import ( - StatusResponse, InvoiceResponse, PaymentResponse, PaymentStatus, - Wallet, + StatusResponse, Unsupported, + Wallet, ) +def async_wrap(func): + @wraps(func) + async def run(*args, loop=None, executor=None, **kwargs): + if loop is None: + loop = asyncio.get_event_loop() + partial_func = partial(func, *args, **kwargs) + return await loop.run_in_executor(executor, partial_func) + + return run + + +def _paid_invoices_stream(ln, last_pay_index): + return ln.waitanyinvoice(last_pay_index) + + class CLightningWallet(Wallet): def __init__(self): if LightningRpc is None: # pragma: nocover @@ -115,21 +129,8 @@ class CLightningWallet(Wallet): raise KeyError("supplied an invalid checking_id") async def paid_invoices_stream(self) -> AsyncGenerator[str, None]: - reader, writer = await asyncio.open_unix_connection(self.rpc) - - i = 0 while True: - call = json.dumps( - {"method": "waitanyinvoice", "id": 0, "params": [self.last_pay_index]} - ) - writer.write(call.encode()) - await writer.drain() - - data = await reader.read() - paid = json.loads(data.decode("ascii")) - - paid = self.ln.waitanyinvoice(self.last_pay_index) + wrapped = async_wrap(_paid_invoices_stream) + paid = await wrapped(self.ln, self.last_pay_index) self.last_pay_index = paid["pay_index"] yield paid["label"] - - i += 1