From c239c4f552daae53796601959dc4f96003703ba7 Mon Sep 17 00:00:00 2001 From: ben Date: Thu, 8 Dec 2022 13:45:38 +0000 Subject: [PATCH] Endpoints working --- lnbits/extensions/gerty/__init__.py | 10 ++ lnbits/extensions/gerty/crud.py | 7 +- lnbits/extensions/gerty/helpers.py | 2 +- lnbits/extensions/gerty/migrations.py | 3 +- lnbits/extensions/gerty/models.py | 2 + lnbits/extensions/gerty/static/gerty.jpg | Bin 0 -> 29664 bytes .../gerty/templates/gerty/_api_docs.html | 97 ++--------- .../gerty/templates/gerty/index.html | 150 +++++++++++++----- 8 files changed, 147 insertions(+), 124 deletions(-) create mode 100644 lnbits/extensions/gerty/static/gerty.jpg diff --git a/lnbits/extensions/gerty/__init__.py b/lnbits/extensions/gerty/__init__.py index 03fdef12..bd353c78 100644 --- a/lnbits/extensions/gerty/__init__.py +++ b/lnbits/extensions/gerty/__init__.py @@ -9,6 +9,16 @@ from lnbits.tasks import catch_everything_and_restart db = Database("ext_gerty") + +gerty_static_files = [ + { + "path": "/gerty/static", + "app": StaticFiles(packages=[("lnbits", "extensions/gerty/static")]), + "name": "gerty_static", + } +] + + gerty_ext: APIRouter = APIRouter(prefix="/gerty", tags=["Gerty"]) diff --git a/lnbits/extensions/gerty/crud.py b/lnbits/extensions/gerty/crud.py index e4a1713a..c6516cf2 100644 --- a/lnbits/extensions/gerty/crud.py +++ b/lnbits/extensions/gerty/crud.py @@ -81,6 +81,7 @@ async def delete_gerty(gerty_id: str) -> None: async def get_mempool_info(endPoint: str, gerty) -> Optional[Mempool]: + logger.debug(endPoint) endpoints = MempoolEndpoint() url = "" for endpoint in endpoints: @@ -96,17 +97,21 @@ async def get_mempool_info(endPoint: str, gerty) -> Optional[Mempool]: if not row: async with httpx.AsyncClient() as client: response = await client.get(gerty.mempool_endpoint + url) + logger.debug(gerty.mempool_endpoint + url) + mempool_id = urlsafe_short_hash() await db.execute( """ INSERT INTO gerty.mempool ( + id, data, endpoint, time, mempool_endpoint ) - VALUES (?, ?, ?, ?) + VALUES (?, ?, ?, ?, ?) """, ( + mempool_id, json.dumps(response.json()), endPoint, int(time.time()), diff --git a/lnbits/extensions/gerty/helpers.py b/lnbits/extensions/gerty/helpers.py index 1f8c1caf..16f0c8cb 100644 --- a/lnbits/extensions/gerty/helpers.py +++ b/lnbits/extensions/gerty/helpers.py @@ -80,7 +80,7 @@ async def get_mining_dashboard(gerty): if isinstance(gerty.mempool_endpoint, str): async with httpx.AsyncClient() as client: # current hashrate - r = await get_mempool_info("get_hashrate_1w", gerty) + r = await get_mempool_info("hashrate_1w", gerty) data = r hashrateNow = data["currentHashrate"] hashrateOneWeekAgo = data["hashrates"][6]["avgHashrate"] diff --git a/lnbits/extensions/gerty/migrations.py b/lnbits/extensions/gerty/migrations.py index 830b8cfd..4a5910f4 100644 --- a/lnbits/extensions/gerty/migrations.py +++ b/lnbits/extensions/gerty/migrations.py @@ -42,7 +42,8 @@ async def m004_initial(db): await db.execute( """ CREATE TABLE gerty.mempool ( - mempool_endpoint TEXT PRIMARY KEY, + id TEXT PRIMARY KEY, + mempool_endpoint TEXT NOT NULL, endpoint TEXT NOT NULL, data TEXT NOT NULL, time TIMESTAMP diff --git a/lnbits/extensions/gerty/models.py b/lnbits/extensions/gerty/models.py index 4bb82d74..11a44e6e 100644 --- a/lnbits/extensions/gerty/models.py +++ b/lnbits/extensions/gerty/models.py @@ -10,6 +10,7 @@ class Gerty(BaseModel): name: str refresh_time: int = Query(None) utc_offset: int = Query(None) + wallet: str = Query(None) type: str lnbits_wallets: str = Query( None @@ -39,6 +40,7 @@ class MempoolEndpoint(BaseModel): class Mempool(BaseModel): + id: str = Query(None) mempool_endpoint: str = Query(None) endpoint: str = Query(None) data: str = Query(None) diff --git a/lnbits/extensions/gerty/static/gerty.jpg b/lnbits/extensions/gerty/static/gerty.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe208cdd9301375553739831eb3c6a8ab4e03825 GIT binary patch literal 29664 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 S@5o|x__M~9=l*Z~|2F{)$load literal 0 HcmV?d00001 diff --git a/lnbits/extensions/gerty/templates/gerty/_api_docs.html b/lnbits/extensions/gerty/templates/gerty/_api_docs.html index db141279..27029028 100644 --- a/lnbits/extensions/gerty/templates/gerty/_api_docs.html +++ b/lnbits/extensions/gerty/templates/gerty/_api_docs.html @@ -1,80 +1,17 @@ - - - - - - GET /gerty/api/v1/gertys -
Headers
- {"X-Api-Key": <invoice_key>}
-
Body (application/json)
-
- Returns 200 OK (application/json) -
- [<gerty_object>, ...] -
Curl example
- curl -X GET {{ request.base_url }}gerty/api/v1/gertys -H "X-Api-Key: - <invoice_key>" - -
-
-
- - - - POST /gerty/api/v1/gertys -
Headers
- {"X-Api-Key": <invoice_key>}
-
Body (application/json)
- {"name": <string>, "currency": <string*ie USD*>} -
- Returns 201 CREATED (application/json) -
- {"currency": <string>, "id": <string>, "name": - <string>, "wallet": <string>} -
Curl example
- curl -X POST {{ request.base_url }}gerty/api/v1/gertys -d '{"name": - <string>, "currency": <string>}' -H "Content-type: - application/json" -H "X-Api-Key: <admin_key>" - -
-
-
- - - - - DELETE - /gerty/api/v1/gertys/<gerty_id> -
Headers
- {"X-Api-Key": <admin_key>}
-
Returns 204 NO CONTENT
- -
Curl example
- curl -X DELETE {{ request.base_url - }}gerty/api/v1/gertys/<gerty_id> -H "X-Api-Key: - <admin_key>" - -
-
-
-
+ +

+ Gerty (your bitcoin assistant): Use the software Gerty or + hardware Gerty
+ + Created by, Black Coffee, + Ben Arc +

+ +
diff --git a/lnbits/extensions/gerty/templates/gerty/index.html b/lnbits/extensions/gerty/templates/gerty/index.html index 61a22d8a..501708bc 100644 --- a/lnbits/extensions/gerty/templates/gerty/index.html +++ b/lnbits/extensions/gerty/templates/gerty/index.html @@ -107,9 +107,21 @@
-
- {{ SITE_TITLE }} Gerty extension -
+
+
+
+ {{ SITE_TITLE }} Gerty extension +
+
+
+ +
+
@@ -309,12 +321,50 @@ >The amount of time in seconds between screen updates - -

Gerty Device Dashboards (for Gerty devices):

- - - - + +

+ Gerty Device Dashboards (for Gerty + devices): +

+ + + +
@@ -570,6 +620,8 @@ formDialog: { show: false, data: { + type: 'Mini Gerty', + exchange: 'USD', utc_offset: new Date().getTimezoneOffset(), display_preferences: { dashboard: false, @@ -597,41 +649,44 @@ } } }, - mounted() { - console.log('this.formDialog', this.formDialog.data.display_preferences) - }, methods: { - setAdvanced: function(){ - self = this - self.formDialog.data.mempool_endpoint = 'https://mempool.space' - self.formDialog.data.refresh_time = 300 - }, - setWallets: function() { - self = this - if(!self.formDialog.data.display_preferences.lnbits_wallets_balance){ - self.formDialog.data.lnbits_wallets = [] - } - }, - setOnchain: function() { - self = this - self.formDialog.data.display_preferences.onchain_difficulty_epoch_progress = self.toggleStates.onchain - self.formDialog.data.display_preferences.onchain_difficulty_retarget_date = self.toggleStates.onchain - self.formDialog.data.display_preferences.onchain_difficulty_blocks_remaining = !self.toggleStates.onchain - self.formDialog.data.display_preferences.onchain_difficulty_epoch_time_remaining = self.toggleStates.onchain - self.formDialog.data.display_preferences.onchain_block_height = self.toggleStates.onchain - }, - setMining: function() { - self = this - self.formDialog.data.display_preferences.mining_current_hash_rate = self.toggleStates.mining - self.formDialog.data.display_preferences.mining_current_difficulty = self.toggleStates.mining - }, + setAdvanced: function () { + self = this + self.formDialog.data.mempool_endpoint = 'https://mempool.space' + self.formDialog.data.refresh_time = 300 + }, + setWallets: function () { + self = this + if (!self.formDialog.data.display_preferences.lnbits_wallets_balance) { + self.formDialog.data.lnbits_wallets = [] + } + }, + setOnchain: function () { + self = this + self.formDialog.data.display_preferences.onchain_difficulty_epoch_progress = + self.toggleStates.onchain + self.formDialog.data.display_preferences.onchain_difficulty_retarget_date = + self.toggleStates.onchain + self.formDialog.data.display_preferences.onchain_difficulty_blocks_remaining = !self + .toggleStates.onchain + self.formDialog.data.display_preferences.onchain_difficulty_epoch_time_remaining = + self.toggleStates.onchain + self.formDialog.data.display_preferences.onchain_block_height = + self.toggleStates.onchain + }, + setMining: function () { + self = this + self.formDialog.data.display_preferences.mining_current_hash_rate = + self.toggleStates.mining + self.formDialog.data.display_preferences.mining_current_difficulty = + self.toggleStates.mining + }, closeFormDialog: function () { this.formDialog.data = { utc_offset: 0, lnbits_wallets: [], mempool_endpoint: 'https://mempool.space', refresh_time: 300, - type: 'Gerty', display_preferences: {} } }, @@ -651,7 +706,6 @@ }, updateformDialog: function (formId) { var gerty = _.findWhere(this.gertys, {id: formId}) - console.log('gerty.display_preferences', gerty.display_preferences) this.formDialog.data.id = gerty.id this.formDialog.data.name = gerty.name this.formDialog.data.type = gerty.type @@ -666,7 +720,6 @@ (this.formDialog.show = true) }, sendFormDataGerty: function () { - console.log(this.formDialog.data) if (this.formDialog.data.id) { this.updateGerty( this.g.user.wallets[0].adminkey, @@ -680,6 +733,14 @@ } }, createGerty: function () { + if ( + this.formDialog.data.display_preferences.dashboard || + this.formDialog.data.display_preferences.dashboard_onchain || + this.formDialog.data.display_preferences.dashboard_onchain || + this.formDialog.data.display_preferences.lightning_dashboard + ) { + this.formDialog.data.type = 'Gerty' + } var data = { name: this.formDialog.data.name, utc_offset: this.formDialog.data.utc_offset, @@ -693,7 +754,6 @@ ) } var self = this - console.log(data) LNbits.api .request( 'POST', @@ -711,6 +771,14 @@ }, updateGerty: function (wallet, data) { var self = this + if ( + this.formDialog.data.display_preferences.dashboard || + this.formDialog.data.display_preferences.dashboard_onchain || + this.formDialog.data.display_preferences.dashboard_onchain || + this.formDialog.data.display_preferences.lightning_dashboard + ) { + this.formDialog.data.type = 'Gerty' + } data.utc_offset = this.formDialog.data.utc_offset data.type = this.formDialog.data.type data.lnbits_wallets = JSON.stringify( @@ -734,8 +802,8 @@ }, deleteGerty: function (gertyId) { var self = this - var gerty = _.findWhere(this.gertys, {id: gertyId}) + var gerty = _.findWhere(self.gertys, {id: gertyId}) LNbits.utils .confirmDialog('Are you sure you want to delete this Gerty?') .onOk(function () {