From 08ce55e29e739eacfd5f77857c05ffe54ece105e Mon Sep 17 00:00:00 2001 From: ben Date: Mon, 26 Sep 2022 16:16:41 +0100 Subject: [PATCH] Added update --- lnbits/extensions/gerty/crud.py | 10 +- lnbits/extensions/gerty/migrations.py | 1 + lnbits/extensions/gerty/models.py | 3 +- .../gerty/templates/gerty/gerty.html | 71 ++++++++++--- .../gerty/templates/gerty/index.html | 100 +++++++++++++++--- lnbits/extensions/gerty/views.py | 6 +- lnbits/extensions/gerty/views_api.py | 17 +-- 7 files changed, 171 insertions(+), 37 deletions(-) diff --git a/lnbits/extensions/gerty/crud.py b/lnbits/extensions/gerty/crud.py index 385282ed..f56faad3 100644 --- a/lnbits/extensions/gerty/crud.py +++ b/lnbits/extensions/gerty/crud.py @@ -20,7 +20,7 @@ async def create_gerty(wallet_id: str, data: Gerty) -> Gerty: data.lnbits_wallets, data.sats_quote, data.exchange, - data.onchain_sats, + data.onchain_stats, data.ln_stats, ), ) @@ -28,7 +28,13 @@ async def create_gerty(wallet_id: str, data: Gerty) -> Gerty: gerty = await get_gerty(gerty_id) assert gerty, "Newly created gerty couldn't be retrieved" return gerty - + +async def update_gerty(gerty_id: str, **kwargs) -> Gerty: + q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()]) + await db.execute( + f"UPDATE gerty.gertys SET {q} WHERE id = ?", (*kwargs.values(), gerty_id) + ) + return await get_gerty(gerty_id) async def get_gerty(gerty_id: str) -> Optional[Gerty]: row = await db.fetchone("SELECT * FROM gerty.gertys WHERE id = ?", (gerty_id,)) diff --git a/lnbits/extensions/gerty/migrations.py b/lnbits/extensions/gerty/migrations.py index 09af3f0e..d3bba79c 100644 --- a/lnbits/extensions/gerty/migrations.py +++ b/lnbits/extensions/gerty/migrations.py @@ -9,6 +9,7 @@ async def m001_initial(db): name TEXT NOT NULL, wallet TEXT NOT NULL, lnbits_wallets TEXT, + mempool_endpoint TEXT, sats_quote BOOL, exchange TEXT, onchain_stats BOOL, diff --git a/lnbits/extensions/gerty/models.py b/lnbits/extensions/gerty/models.py index 690614ee..b8eee6b5 100644 --- a/lnbits/extensions/gerty/models.py +++ b/lnbits/extensions/gerty/models.py @@ -11,9 +11,10 @@ class Gerty(BaseModel): name: str wallet: str lnbits_wallets: str = Query(None) # Wallets to keep an eye on, {"wallet-id": "wallet-read-key, etc"} + mempool_endpoint: str = Query("https://mempool.space") # Mempool endpoint to use sats_quote: bool = Query(False) # Fetch Satoshi quotes exchange: str = Query(None) # BTC <-> Fiat exchange rate to pull ie "USD", in 0.0001 and sats - onchain_sats: bool = Query(False) # Onchain stats + onchain_stats: bool = Query(False) # Onchain stats ln_stats: bool = Query(False) # ln Sats @classmethod diff --git a/lnbits/extensions/gerty/templates/gerty/gerty.html b/lnbits/extensions/gerty/templates/gerty/gerty.html index ef4db38d..1411f7e9 100644 --- a/lnbits/extensions/gerty/templates/gerty/gerty.html +++ b/lnbits/extensions/gerty/templates/gerty/gerty.html @@ -1,19 +1,23 @@ -{% extends "public.html" %} {% block page %} -
+{% extends "public.html" %} {% block toolbar_title %} {{ gerty.name }}{% endblock %}{% block page %} +
+
{% raw %} +
+
+
+
+
+
{{gertywallet.amount}}
Wallet: {{gertywallet.name}}
+
{% endraw %} +
+
+
+
+
+ +
-
Copy LNURL - {% include "lnurlp/_lnurl.html" %}
@@ -48,7 +51,45 @@ new Vue({ el: '#vue', - mixins: [windowMixin] + mixins: [windowMixin], + data: function () { + return { + gertyName: '{{gerty.name}}', + walletColors: [ + {first: "#3f51b5", + second: "#1a237e"}, + {first: "#9c27b0", + second: "#4a148c"}, + {first: "#e91e63", + second: "#880e4f"}, + {first: "#009688", + second: "#004d40"}, + {first: "#ff9800", + second: "#e65100"}, + {first: "#2196f3", + second: "#0d47a1"}, + {first: "#4caf50", + second: "#1b5e20"} + ], + gertywallets: [{ + name:"poo", + amount:"200" + }, + { + name:"poo", + amount:"200" + }] + } + }, + methods: { + + }, + created: function () { + console.log(this.gerty) + // if(){ + + // } + } }) {% endblock %} diff --git a/lnbits/extensions/gerty/templates/gerty/index.html b/lnbits/extensions/gerty/templates/gerty/index.html index 852e054d..c55ccb9e 100644 --- a/lnbits/extensions/gerty/templates/gerty/index.html +++ b/lnbits/extensions/gerty/templates/gerty/index.html @@ -35,6 +35,7 @@ {{ col.label }} + @@ -45,17 +46,27 @@ unelevated dense size="xs" - icon="launch" + icon="sentiment_satisfied" :color="($q.dark.isActive) ? 'grey-7' : 'grey-5'" type="a" :href="props.row.gerty" target="_blank" - > + >Launch software Gerty {{ (col.name == 'tip_options' && col.value ? JSON.parse(col.value).join(", ") : col.value) }} + + + - + - + emit-value + v-model="formDialog.data.lnbits_wallets" + use-input + use-chips + multiple + hide-dropdown-icon + new-value-mode="add-unique" + label="Wallets to watch" + >Hit enter to add values Create Gerty + Update Gerty Cancel @@ -383,15 +410,17 @@ show: false, data: {sats_quote: false, onchain_stats: false, - ln_stats: false} + ln_stats: false, + lnbits_wallets:[]} } } }, methods: { closeFormDialog: function () { this.formDialog.data = {sats_quote: false, - onchain_sats: false, - ln_stats: false} + onchain_stats: false, + ln_stats: false, + lnbits_wallets:[]} }, getGertys: function () { var self = this @@ -407,14 +436,40 @@ }) }) }, + updateformDialog: function (formId) { + var gerty = _.findWhere(this.gertys, {id: formId}) + this.formDialog.data.id = gerty.id + this.formDialog.data.name = gerty.name + this.formDialog.data.wallet = gerty.wallet + this.formDialog.data.lnbits_wallets = JSON.parse(gerty.lnbits_wallets) + this.formDialog.data.exchange = gerty.exchange, + this.formDialog.data.sats_quote = Boolean(gerty.sats_quote) + this.formDialog.data.onchain_stats = Boolean(gerty.onchain_stats) + this.formDialog.data.ln_stats = Boolean(gerty.ln_stats) + this.formDialog.show = true + }, + sendFormDataGerty: function () { + var self = this + if (self.formDialog.data.id) { + this.updateGerty( + self.g.user.wallets[0].adminkey, + self.formDialog.data + ) + } else { + this.createGerty( + self.g.user.wallets[0].adminkey, + self.formDialog.data + ) + } + }, createGerty: function () { var data = { name: this.formDialog.data.name, wallet: this.formDialog.data.wallet, - lnbits_wallets: this.formDialog.data.lnbits_wallets, + lnbits_wallets: JSON.stringify(this.formDialog.data.lnbits_wallets), sats_quote: this.formDialog.data.sats_quote, exchange: this.formDialog.data.exchange, - onchain_sats: this.formDialog.data.onchain_sats, + onchain_stats: this.formDialog.data.onchain_stats, ln_stats: this.formDialog.data.ln_stats } var self = this @@ -435,6 +490,27 @@ LNbits.utils.notifyApiError(error) }) }, + updateGerty: function (wallet, data) { + var self = this + data.lnbits_wallets = JSON.stringify(this.formDialog.data.lnbits_wallets) + LNbits.api + .request( + 'PUT', + '/gerty/api/v1/gerty/' + data.id, + wallet, + data + ) + .then(function (response) { + self.gertys = _.reject(self.gertys, function (obj) { + return obj.id == data.id + }) + self.gertys.push(mapGerty(response.data)) + self.formDialog.show = false + }) + .catch(function (error) { + LNbits.utils.notifyApiError(error) + }) + }, deleteGerty: function (gertyId) { var self = this var gerty = _.findWhere(this.gertys, {id: gertyId}) diff --git a/lnbits/extensions/gerty/views.py b/lnbits/extensions/gerty/views.py index c2a87085..f749d354 100644 --- a/lnbits/extensions/gerty/views.py +++ b/lnbits/extensions/gerty/views.py @@ -12,6 +12,9 @@ from lnbits.settings import LNBITS_CUSTOM_LOGO, LNBITS_SITE_TITLE from . import gerty_ext, gerty_renderer from .crud import get_gerty +from .views_api import api_gerty_json + +import json templates = Jinja2Templates(directory="templates") @@ -28,4 +31,5 @@ async def display(request: Request, gerty_id): raise HTTPException( status_code=HTTPStatus.NOT_FOUND, detail="Gerty does not exist." ) - return lnurlp_renderer().TemplateResponse("gerty/gerty.html", ctx) \ No newline at end of file + gertyData = await api_gerty_json(gerty_id) + return gerty_renderer().TemplateResponse("gerty/gerty.html", {"request": request, "gerty": gertyData}) \ No newline at end of file diff --git a/lnbits/extensions/gerty/views_api.py b/lnbits/extensions/gerty/views_api.py index d24843b5..6ed16864 100644 --- a/lnbits/extensions/gerty/views_api.py +++ b/lnbits/extensions/gerty/views_api.py @@ -12,12 +12,12 @@ from starlette.exceptions import HTTPException from lnbits.core.crud import get_user from lnbits.core.services import create_invoice -from lnbits.core.views.api import api_payment +from lnbits.core.views.api import api_payment, api_wallet from lnbits.decorators import WalletTypeInfo, get_key_type, require_admin_key from fastapi.templating import Jinja2Templates from . import gerty_ext -from .crud import create_gerty, delete_gerty, get_gerty, get_gertys +from .crud import create_gerty, update_gerty, delete_gerty, get_gerty, get_gertys from .models import Gerty from lnbits.utils.exchange_rates import fiat_amount_as_satoshis @@ -101,8 +101,13 @@ async def api_gerty_json( ) gertyReturn = [] if gerty.lnbits_wallets != "": - gertyReturn.append(gerty.lnbitsWallets) - + for lnbits_wallet in json.loads(gerty.lnbits_wallets): + logger.debug(lnbits_wallet) + walletPrint = await api_wallet(wallet=lnbits_wallet) + gertyReturn.wallets.append(walletPrint) + #logger.debug(walletPrint) + logger.debug(gertyReturn) + if gerty.sats_quote: gertyReturn.append(await api_gerty_satoshi()) @@ -111,7 +116,7 @@ async def api_gerty_json( gertyReturn.append(await fiat_amount_as_satoshis(1, gerty.exchange)) except: pass - if gerty.onchain_sats: + if gerty.onchain_stats: async with httpx.AsyncClient() as client: r = await client.get(gerty.mempool_endpoint + "/api/v1/difficulty-adjustment") gertyReturn.append({"difficulty-adjustment": json.dumps(r)}) @@ -124,7 +129,7 @@ async def api_gerty_json( async with httpx.AsyncClient() as client: r = await client.get(gerty.mempool_endpoint + "/api/v1/lightning/statistics/latest") gertyReturn.append({"latest": json.dumps(r)}) - + logger.debug(gertyReturn) return gertyReturn