From 048ccd6d652bf11aafe333edb3906c0220cbe52f Mon Sep 17 00:00:00 2001 From: Lee Salminen Date: Tue, 20 Dec 2022 07:15:54 -0600 Subject: [PATCH] formatting --- lnbits/extensions/nostrnip5/crud.py | 60 ++++++++++--------- lnbits/extensions/nostrnip5/migrations.py | 2 +- lnbits/extensions/nostrnip5/models.py | 6 +- lnbits/extensions/nostrnip5/tasks.py | 5 +- .../nostrnip5/templates/nostrnip5/index.html | 36 +++++++---- .../nostrnip5/templates/nostrnip5/signup.html | 57 ++++++++++-------- lnbits/extensions/nostrnip5/views.py | 4 +- lnbits/extensions/nostrnip5/views_api.py | 42 +++++++------ 8 files changed, 123 insertions(+), 89 deletions(-) diff --git a/lnbits/extensions/nostrnip5/crud.py b/lnbits/extensions/nostrnip5/crud.py index eff99074..9a8a074a 100644 --- a/lnbits/extensions/nostrnip5/crud.py +++ b/lnbits/extensions/nostrnip5/crud.py @@ -3,12 +3,7 @@ from typing import List, Optional, Union from lnbits.helpers import urlsafe_short_hash from . import db -from .models import ( - CreateDomainData, - Domain, - Address, - CreateAddressData, -) +from .models import Address, CreateAddressData, CreateDomainData, Domain async def get_domain(domain_id: str) -> Optional[Domain]: @@ -17,12 +12,14 @@ async def get_domain(domain_id: str) -> Optional[Domain]: ) return Domain.from_row(row) if row else None + async def get_domain_by_name(domain: str) -> Optional[Domain]: row = await db.fetchone( "SELECT * FROM nostrnip5.domains WHERE domain = ?", (domain,) ) return Domain.from_row(row) if row else None + async def get_domains(wallet_ids: Union[str, List[str]]) -> List[Domain]: if isinstance(wallet_ids, str): wallet_ids = [wallet_ids] @@ -34,18 +31,31 @@ async def get_domains(wallet_ids: Union[str, List[str]]) -> List[Domain]: return [Domain.from_row(row) for row in rows] + async def get_address(domain_id: str, address_id: str) -> Optional[Address]: row = await db.fetchone( - "SELECT * FROM nostrnip5.addresses WHERE domain_id = ? AND id = ?", (domain_id,address_id,) + "SELECT * FROM nostrnip5.addresses WHERE domain_id = ? AND id = ?", + ( + domain_id, + address_id, + ), ) return Address.from_row(row) if row else None -async def get_address_by_local_part(domain_id: str, local_part: str) -> Optional[Address]: + +async def get_address_by_local_part( + domain_id: str, local_part: str +) -> Optional[Address]: row = await db.fetchone( - "SELECT * FROM nostrnip5.addresses WHERE domain_id = ? AND local_part = ?", (domain_id,local_part,) + "SELECT * FROM nostrnip5.addresses WHERE domain_id = ? AND local_part = ?", + ( + domain_id, + local_part, + ), ) return Address.from_row(row) if row else None + async def get_addresses(domain_id: str) -> List[Address]: rows = await db.fetchall( f"SELECT * FROM nostrnip5.addresses WHERE domain_id = ?", (domain_id,) @@ -53,6 +63,7 @@ async def get_addresses(domain_id: str) -> List[Address]: return [Address.from_row(row) for row in rows] + async def get_all_addresses(wallet_ids: Union[str, List[str]]) -> List[Address]: if isinstance(wallet_ids, str): wallet_ids = [wallet_ids] @@ -64,12 +75,13 @@ async def get_all_addresses(wallet_ids: Union[str, List[str]]) -> List[Address]: FROM nostrnip5.addresses a JOIN nostrnip5.domains d ON d.id = a.domain_id WHERE d.wallet IN ({q}) - """, - (*wallet_ids,) + """, + (*wallet_ids,), ) return [Address.from_row(row) for row in rows] + async def activate_domain(domain_id: str, address_id: str) -> Address: await db.execute( """ @@ -88,37 +100,34 @@ async def activate_domain(domain_id: str, address_id: str) -> Address: assert address, "Newly updated address couldn't be retrieved" return address + async def delete_domain(domain_id) -> bool: await db.execute( """ DELETE FROM nostrnip5.addresses WHERE domain_id = ? """, - ( - domain_id, - ), + (domain_id,), ) await db.execute( """ DELETE FROM nostrnip5.domains WHERE id = ? """, - ( - domain_id, - ), + (domain_id,), ) return True + async def delete_address(address_id) -> bool: await db.execute( """ DELETE FROM nostrnip5.addresses WHERE id = ? """, - ( - address_id, - ), + (address_id,), ) + async def create_address_internal(domain_id: str, data: CreateAddressData) -> Address: address_id = urlsafe_short_hash() @@ -140,6 +149,7 @@ async def create_address_internal(domain_id: str, data: CreateAddressData) -> Ad assert address, "Newly created address couldn't be retrieved" return address + async def create_domain_internal(wallet_id: str, data: CreateDomainData) -> Domain: domain_id = urlsafe_short_hash() @@ -148,15 +158,9 @@ async def create_domain_internal(wallet_id: str, data: CreateDomainData) -> Doma INSERT INTO nostrnip5.domains (id, wallet, currency, amount, domain) VALUES (?, ?, ?, ?, ?) """, - ( - domain_id, - wallet_id, - data.currency, - int(data.amount * 100), - data.domain - ), + (domain_id, wallet_id, data.currency, int(data.amount * 100), data.domain), ) domain = await get_domain(domain_id) assert domain, "Newly created domain couldn't be retrieved" - return domain \ No newline at end of file + return domain diff --git a/lnbits/extensions/nostrnip5/migrations.py b/lnbits/extensions/nostrnip5/migrations.py index f1ce4ca9..8e81a1a4 100644 --- a/lnbits/extensions/nostrnip5/migrations.py +++ b/lnbits/extensions/nostrnip5/migrations.py @@ -32,4 +32,4 @@ async def m001_initial_invoices(db): FOREIGN KEY(domain_id) REFERENCES {db.references_schema}domains(id) ); """ - ) \ No newline at end of file + ) diff --git a/lnbits/extensions/nostrnip5/models.py b/lnbits/extensions/nostrnip5/models.py index 31010639..604b88b1 100644 --- a/lnbits/extensions/nostrnip5/models.py +++ b/lnbits/extensions/nostrnip5/models.py @@ -5,18 +5,21 @@ from typing import List, Optional from fastapi.param_functions import Query from pydantic import BaseModel + class CreateAddressData(BaseModel): domain_id: str local_part: str pubkey: str active: bool = False + class CreateDomainData(BaseModel): wallet: str currency: str amount: float = Query(..., ge=0.01) domain: str + class Domain(BaseModel): id: str wallet: str @@ -29,6 +32,7 @@ class Domain(BaseModel): def from_row(cls, row: Row) -> "Domain": return cls(**dict(row)) + class Address(BaseModel): id: str domain_id: str @@ -39,4 +43,4 @@ class Address(BaseModel): @classmethod def from_row(cls, row: Row) -> "Address": - return cls(**dict(row)) \ No newline at end of file + return cls(**dict(row)) diff --git a/lnbits/extensions/nostrnip5/tasks.py b/lnbits/extensions/nostrnip5/tasks.py index d27682c4..48c2aa9a 100644 --- a/lnbits/extensions/nostrnip5/tasks.py +++ b/lnbits/extensions/nostrnip5/tasks.py @@ -5,10 +5,7 @@ from lnbits.core.models import Payment from lnbits.helpers import urlsafe_short_hash from lnbits.tasks import internal_invoice_queue, register_invoice_listener -from .crud import ( - get_domain, - activate_domain, -) +from .crud import activate_domain, get_domain async def wait_for_paid_invoices(): diff --git a/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html b/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html index c40342a7..760ad944 100644 --- a/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html +++ b/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html @@ -78,7 +78,9 @@
Addresses
- Export to CSV + Export to CSV
- - +
- -

You can use this page to get NIP-5 verified on the nostr protocol under the {{ domain.domain }} domain.

-

The current price is {{ "{:0,.2f}".format(domain.amount / 100) }} {{ domain.currency }} for a lifetime account.

+

+ You can use this page to get NIP-5 verified on the nostr protocol under + the {{ domain.domain }} domain. +

+

+ The current price is + {{ "{:0,.2f}".format(domain.amount / 100) }} {{ domain.currency }} + for a lifetime account. +

After submitting payment, your address will be

@@ -43,9 +51,7 @@ block page %} type="submit" >Create Address - Cancel + Cancel
@@ -91,23 +97,23 @@ block page %} amount: '{{ domain.amount }}', qrCodeDialog: { data: { - payment_request: null, + payment_request: null }, - show: false, + show: false }, formDialog: { data: { local_part: null, - pubkey: null, - }, + pubkey: null + } }, urlDialog: { - show: false, - }, + show: false + } } }, methods: { - closeQrCodeDialog: function() { + closeQrCodeDialog: function () { this.qrCodeDialog.show = false }, createAddress: function () { @@ -118,7 +124,10 @@ block page %} var localPart = formDialog.data.local_part axios - .post('/nostrnip5/api/v1/domain/' + this.domain_id + '/address', formDialog.data) + .post( + '/nostrnip5/api/v1/domain/' + this.domain_id + '/address', + formDialog.data + ) .then(function (response) { formDialog.data = {} @@ -147,7 +156,9 @@ block page %} qrCodeDialog.show = false setTimeout(function () { - alert(`Success! Your username is now active at ${localPart}@${self.domain}. Please add this to your nostr profile accordingly.`) + alert( + `Success! Your username is now active at ${localPart}@${self.domain}. Please add this to your nostr profile accordingly.` + ) }, 500) } }) @@ -156,14 +167,10 @@ block page %} .catch(function (error) { LNbits.utils.notifyApiError(error) }) - }, + } }, - computed: { - - }, - created: function () { - - } + computed: {}, + created: function () {} }) {% endblock %} diff --git a/lnbits/extensions/nostrnip5/views.py b/lnbits/extensions/nostrnip5/views.py index 20daf2ad..3001a20f 100644 --- a/lnbits/extensions/nostrnip5/views.py +++ b/lnbits/extensions/nostrnip5/views.py @@ -11,9 +11,7 @@ from lnbits.core.models import User from lnbits.decorators import check_user_exists from . import nostrnip5_ext, nostrnip5_renderer -from .crud import ( - get_domain, -) +from .crud import get_domain templates = Jinja2Templates(directory="templates") diff --git a/lnbits/extensions/nostrnip5/views_api.py b/lnbits/extensions/nostrnip5/views_api.py index 2cfb88a4..9d46e6e9 100644 --- a/lnbits/extensions/nostrnip5/views_api.py +++ b/lnbits/extensions/nostrnip5/views_api.py @@ -1,10 +1,10 @@ from http import HTTPStatus +from typing import Optional from fastapi import Query, Request, Response from fastapi.params import Depends from loguru import logger from starlette.exceptions import HTTPException -from typing import Optional from lnbits.core.crud import get_user from lnbits.core.services import create_invoice @@ -14,18 +14,18 @@ from lnbits.utils.exchange_rates import fiat_amount_as_satoshis from . import nostrnip5_ext from .crud import ( - get_domains, - get_domain, - create_domain_internal, create_address_internal, + create_domain_internal, + delete_address, delete_domain, - get_domain_by_name, get_address_by_local_part, get_addresses, get_all_addresses, - delete_address, + get_domain, + get_domain_by_name, + get_domains, ) -from .models import CreateDomainData, CreateAddressData +from .models import CreateAddressData, CreateDomainData @nostrnip5_ext.get("/api/v1/domains", status_code=HTTPStatus.OK) @@ -38,6 +38,7 @@ async def api_domains( return [domain.dict() for domain in await get_domains(wallet_ids)] + @nostrnip5_ext.get("/api/v1/addresses", status_code=HTTPStatus.OK) async def api_addresses( all_wallets: bool = Query(None), wallet: WalletTypeInfo = Depends(get_key_type) @@ -56,7 +57,7 @@ async def api_invoice(domain_id: str, wallet: WalletTypeInfo = Depends(get_key_t raise HTTPException( status_code=HTTPStatus.NOT_FOUND, detail="Domain does not exist." ) - + return domain @@ -72,7 +73,7 @@ async def api_domain_create( ) domain = await create_domain_internal(wallet_id=wallet.wallet.id, data=data) - + return domain @@ -82,20 +83,23 @@ async def api_domain_delete( wallet: WalletTypeInfo = Depends(require_admin_key), ): await delete_domain(domain_id) - + return True + @nostrnip5_ext.delete("/api/v1/address/{address_id}", status_code=HTTPStatus.CREATED) async def api_address_delete( address_id: str, wallet: WalletTypeInfo = Depends(require_admin_key), ): await delete_address(address_id) - + return True -@nostrnip5_ext.post("/api/v1/domain/{domain_id}/address", status_code=HTTPStatus.CREATED) +@nostrnip5_ext.post( + "/api/v1/domain/{domain_id}/address", status_code=HTTPStatus.CREATED +) async def api_address_create( data: CreateAddressData, domain_id: str, @@ -127,7 +131,11 @@ async def api_address_create( wallet_id=domain.wallet, amount=price_in_sats, memo=f"Payment for domain {domain_id}", - extra={"tag": "nostrnip5", "domain_id": domain_id, "address_id": address.id,}, + extra={ + "tag": "nostrnip5", + "domain_id": domain_id, + "address_id": address.id, + }, ) except Exception as e: raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(e)) @@ -154,7 +162,9 @@ async def api_nostrnip5_check_payment(domain_id: str, payment_hash: str): @nostrnip5_ext.get("/api/v1/domain/{domain_id}/nostr.json", status_code=HTTPStatus.OK) -async def api_get_nostr_json(response: Response, domain_id: str, name: str = Query(None)): +async def api_get_nostr_json( + response: Response, domain_id: str, name: str = Query(None) +): addresses = [address.dict() for address in await get_addresses(domain_id)] output = {} @@ -170,6 +180,4 @@ async def api_get_nostr_json(response: Response, domain_id: str, name: str = Que response.headers["Access-Control-Allow-Origin"] = "*" response.headers["Access-Control-Allow-Methods"] = "GET,OPTIONS" - return { - "names": output - } \ No newline at end of file + return {"names": output}