From 89fb2787e6c06e0c9b502875fc91fec6ebc82ddf Mon Sep 17 00:00:00 2001 From: calle <93376500+callebtc@users.noreply.github.com> Date: Mon, 1 May 2023 22:39:23 +0200 Subject: [PATCH] Python/relative_import (#186) * relative import all the things * make format * add __init__.py to cli/ * fix mypy errors * get rid of more mypy * mypy fix crud.py * fix another mypy error --- cashu/core/base.py | 4 +-- cashu/core/crypto.py | 4 +-- cashu/core/helpers.py | 4 +-- cashu/core/migrations.py | 3 +- cashu/lightning/fake.py | 3 +- cashu/lightning/lnbits.py | 4 +-- cashu/mint/app.py | 3 +- cashu/mint/crud.py | 50 ++++++++++----------------------- cashu/mint/ledger.py | 29 ++++++++++--------- cashu/mint/main.py | 2 +- cashu/mint/migrations.py | 4 +-- cashu/mint/router.py | 8 +++--- cashu/mint/startup.py | 14 ++++----- cashu/wallet/__init__.py | 2 +- cashu/wallet/cli/__init__.py | 0 cashu/wallet/cli/cli.py | 19 ++++++------- cashu/wallet/cli/cli_helpers.py | 10 +++---- cashu/wallet/cli/nostr.py | 19 ++++++------- cashu/wallet/crud.py | 35 +++++++++-------------- cashu/wallet/migrations.py | 2 +- cashu/wallet/wallet.py | 24 ++++++++-------- 21 files changed, 104 insertions(+), 139 deletions(-) create mode 100644 cashu/wallet/cli/__init__.py diff --git a/cashu/core/base.py b/cashu/core/base.py index f488412..fa3a08d 100644 --- a/cashu/core/base.py +++ b/cashu/core/base.py @@ -5,8 +5,8 @@ from typing import Any, Dict, List, Optional, TypedDict, Union from pydantic import BaseModel -from cashu.core.crypto import derive_keys, derive_keyset_id, derive_pubkeys -from cashu.core.secp import PrivateKey, PublicKey +from ..core.crypto import derive_keys, derive_keyset_id, derive_pubkeys +from ..core.secp import PrivateKey, PublicKey # ------- PROOFS ------- diff --git a/cashu/core/crypto.py b/cashu/core/crypto.py index dd0b8bb..bab19a2 100644 --- a/cashu/core/crypto.py +++ b/cashu/core/crypto.py @@ -2,8 +2,8 @@ import base64 import hashlib from typing import Dict, List -from cashu.core.secp import PrivateKey, PublicKey -from cashu.core.settings import settings +from ..core.secp import PrivateKey, PublicKey +from ..core.settings import settings # entropy = bytes([random.getrandbits(8) for i in range(16)]) # mnemonic = bip39.mnemonic_from_bytes(entropy) diff --git a/cashu/core/helpers.py b/cashu/core/helpers.py index d8079cf..1d586d2 100644 --- a/cashu/core/helpers.py +++ b/cashu/core/helpers.py @@ -2,8 +2,8 @@ import asyncio from functools import partial, wraps from typing import List -from cashu.core.base import Proof -from cashu.core.settings import settings +from ..core.base import Proof +from ..core.settings import settings def sum_proofs(proofs: List[Proof]): diff --git a/cashu/core/migrations.py b/cashu/core/migrations.py index 2388187..e7093d9 100644 --- a/cashu/core/migrations.py +++ b/cashu/core/migrations.py @@ -1,6 +1,6 @@ import re -from cashu.core.db import COCKROACH, POSTGRES, SQLITE, Database +from ..core.db import COCKROACH, POSTGRES, SQLITE, Database def table_with_schema(db, table: str): @@ -35,6 +35,7 @@ async def migrate_databases(db: Database, migrations_module): await set_migration_version(conn, db_name, version) async with db.connect() as conn: + exists = None if conn.type == SQLITE: exists = await conn.fetchone( f"SELECT * FROM sqlite_master WHERE type='table' AND name='{table_with_schema(db, 'dbversions')}'" diff --git a/cashu/lightning/fake.py b/cashu/lightning/fake.py index 027aec9..dfeed10 100644 --- a/cashu/lightning/fake.py +++ b/cashu/lightning/fake.py @@ -4,8 +4,7 @@ import random from datetime import datetime from typing import AsyncGenerator, Dict, Optional, Set -from cashu.core.bolt11 import Invoice, decode, encode - +from ..core.bolt11 import Invoice, decode, encode from .base import ( InvoiceResponse, PaymentResponse, diff --git a/cashu/lightning/lnbits.py b/cashu/lightning/lnbits.py index a3125b6..e295543 100644 --- a/cashu/lightning/lnbits.py +++ b/cashu/lightning/lnbits.py @@ -3,8 +3,7 @@ from typing import Dict, Optional import requests -from cashu.core.settings import settings - +from ..core.settings import settings from .base import ( InvoiceResponse, PaymentResponse, @@ -110,7 +109,6 @@ class LNbitsWallet(Wallet): async def get_invoice_status(self, checking_id: str) -> PaymentStatus: try: - r = self.s.get( url=f"{self.endpoint}/api/v1/payments/{checking_id}", headers=self.key, diff --git a/cashu/mint/app.py b/cashu/mint/app.py index 8cf1a3c..2852899 100644 --- a/cashu/mint/app.py +++ b/cashu/mint/app.py @@ -7,8 +7,7 @@ from starlette.middleware import Middleware from starlette.middleware.base import BaseHTTPMiddleware from starlette.middleware.cors import CORSMiddleware -from cashu.core.settings import settings - +from ..core.settings import settings from .router import router from .startup import start_mint_init diff --git a/cashu/mint/crud.py b/cashu/mint/crud.py index 27c1190..76368ca 100644 --- a/cashu/mint/crud.py +++ b/cashu/mint/crud.py @@ -1,9 +1,9 @@ import time from typing import Any, List, Optional -from cashu.core.base import Invoice, MintKeyset, Proof -from cashu.core.db import Connection, Database -from cashu.core.migrations import table_with_schema +from ..core.base import Invoice, MintKeyset, Proof +from ..core.db import Connection, Database +from ..core.migrations import table_with_schema class LedgerCrud: @@ -14,48 +14,37 @@ class LedgerCrud: """ async def get_keyset(*args, **kwags): - - return await get_keyset(*args, **kwags) + return await get_keyset(*args, **kwags) # type: ignore async def get_lightning_invoice(*args, **kwags): - - return await get_lightning_invoice(*args, **kwags) + return await get_lightning_invoice(*args, **kwags) # type: ignore async def get_proofs_used(*args, **kwags): - - return await get_proofs_used(*args, **kwags) + return await get_proofs_used(*args, **kwags) # type: ignore async def invalidate_proof(*args, **kwags): - - return await invalidate_proof(*args, **kwags) + return await invalidate_proof(*args, **kwags) # type: ignore async def get_proofs_pending(*args, **kwags): - - return await get_proofs_pending(*args, **kwags) + return await get_proofs_pending(*args, **kwags) # type: ignore async def set_proof_pending(*args, **kwags): - - return await set_proof_pending(*args, **kwags) + return await set_proof_pending(*args, **kwags) # type: ignore async def unset_proof_pending(*args, **kwags): - - return await unset_proof_pending(*args, **kwags) + return await unset_proof_pending(*args, **kwags) # type: ignore async def store_keyset(*args, **kwags): - - return await store_keyset(*args, **kwags) + return await store_keyset(*args, **kwags) # type: ignore async def store_lightning_invoice(*args, **kwags): - - return await store_lightning_invoice(*args, **kwags) + return await store_lightning_invoice(*args, **kwags) # type: ignore async def store_promise(*args, **kwags): - - return await store_promise(*args, **kwags) + return await store_promise(*args, **kwags) # type: ignore async def update_lightning_invoice(*args, **kwags): - - return await update_lightning_invoice(*args, **kwags) + return await update_lightning_invoice(*args, **kwags) # type: ignore async def store_promise( @@ -65,7 +54,6 @@ async def store_promise( C_: str, conn: Optional[Connection] = None, ): - await (conn or db).execute( f""" INSERT INTO {table_with_schema(db, 'promises')} @@ -84,7 +72,6 @@ async def get_proofs_used( db: Database, conn: Optional[Connection] = None, ): - rows = await (conn or db).fetchall( f""" SELECT secret from {table_with_schema(db, 'proofs_used')} @@ -98,7 +85,6 @@ async def invalidate_proof( proof: Proof, conn: Optional[Connection] = None, ): - # we add the proof and secret to the used list await (conn or db).execute( f""" @@ -118,7 +104,6 @@ async def get_proofs_pending( db: Database, conn: Optional[Connection] = None, ): - rows = await (conn or db).fetchall( f""" SELECT * from {table_with_schema(db, 'proofs_pending')} @@ -132,7 +117,6 @@ async def set_proof_pending( proof: Proof, conn: Optional[Connection] = None, ): - # we add the proof and secret to the used list await (conn or db).execute( f""" @@ -153,7 +137,6 @@ async def unset_proof_pending( db: Database, conn: Optional[Connection] = None, ): - await (conn or db).execute( f""" DELETE FROM {table_with_schema(db, 'proofs_pending')} @@ -168,7 +151,6 @@ async def store_lightning_invoice( invoice: Invoice, conn: Optional[Connection] = None, ): - await (conn or db).execute( f""" INSERT INTO {table_with_schema(db, 'invoices')} @@ -189,7 +171,6 @@ async def get_lightning_invoice( hash: str, conn: Optional[Connection] = None, ): - row = await (conn or db).fetchone( f""" SELECT * from {table_with_schema(db, 'invoices')} @@ -220,7 +201,6 @@ async def store_keyset( keyset: MintKeyset, conn: Optional[Connection] = None, ): - await (conn or db).execute( # type: ignore f""" INSERT INTO {table_with_schema(db, 'keysets')} @@ -241,7 +221,7 @@ async def store_keyset( async def get_keyset( db: Database, - id: str = None, + id: str = "", derivation_path: str = "", conn: Optional[Connection] = None, ): diff --git a/cashu/mint/ledger.py b/cashu/mint/ledger.py index b93da0e..d7b4b1a 100644 --- a/cashu/mint/ledger.py +++ b/cashu/mint/ledger.py @@ -3,10 +3,10 @@ from typing import Dict, List, Literal, Optional, Set, Union from loguru import logger -import cashu.core.b_dhke as b_dhke -import cashu.core.bolt11 as bolt11 -import cashu.core.legacy as legacy -from cashu.core.base import ( +from ..core import b_dhke as b_dhke +from ..core import bolt11 as bolt11 +from ..core import legacy as legacy +from ..core.base import ( BlindedMessage, BlindedSignature, Invoice, @@ -14,15 +14,15 @@ from cashu.core.base import ( MintKeysets, Proof, ) -from cashu.core.crypto import derive_pubkey -from cashu.core.db import Database -from cashu.core.helpers import fee_reserve, sum_proofs -from cashu.core.script import verify_script -from cashu.core.secp import PublicKey -from cashu.core.settings import settings -from cashu.core.split import amount_split -from cashu.lightning.base import Wallet -from cashu.mint.crud import LedgerCrud +from ..core.crypto import derive_pubkey +from ..core.db import Database +from ..core.helpers import fee_reserve, sum_proofs +from ..core.script import verify_script +from ..core.secp import PublicKey +from ..core.settings import settings +from ..core.split import amount_split +from ..lightning.base import Wallet +from ..mint.crud import LedgerCrud class Ledger: @@ -449,6 +449,7 @@ class Ledger: invoice_amount: int, ln_fee_msat: int, outputs: List[BlindedMessage], + keyset: Optional[MintKeyset] = None, ): """Generates a set of new promises (blinded signatures) from a set of blank outputs (outputs with no or ignored amount) by looking at the difference between the Lightning @@ -497,7 +498,7 @@ class Ledger: outputs[i].amount = return_amounts_sorted[i] if not self._verify_no_duplicate_outputs(outputs): raise Exception("duplicate promises.") - return_promises = await self._generate_promises(outputs) + return_promises = await self._generate_promises(outputs, keyset) return return_promises else: return [] diff --git a/cashu/mint/main.py b/cashu/mint/main.py index bb04e5d..a279d93 100644 --- a/cashu/mint/main.py +++ b/cashu/mint/main.py @@ -4,7 +4,7 @@ import click import uvicorn from click import Context -from cashu.core.settings import settings +from ..core.settings import settings @click.command( diff --git a/cashu/mint/migrations.py b/cashu/mint/migrations.py index 4b6b5e3..7380780 100644 --- a/cashu/mint/migrations.py +++ b/cashu/mint/migrations.py @@ -1,5 +1,5 @@ -from cashu.core.db import Database -from cashu.core.migrations import table_with_schema +from ..core.db import Database +from ..core.migrations import table_with_schema async def m000_create_migrations_table(db): diff --git a/cashu/mint/router.py b/cashu/mint/router.py index dd8ba30..3631274 100644 --- a/cashu/mint/router.py +++ b/cashu/mint/router.py @@ -3,7 +3,7 @@ from typing import Dict, List, Union from fastapi import APIRouter from secp256k1 import PublicKey -from cashu.core.base import ( +from ..core.base import ( BlindedMessage, BlindedSignature, CheckFeesRequest, @@ -21,9 +21,9 @@ from cashu.core.base import ( PostSplitRequest, PostSplitResponse, ) -from cashu.core.errors import CashuError -from cashu.core.settings import settings -from cashu.mint.startup import ledger +from ..core.errors import CashuError +from ..core.settings import settings +from ..mint.startup import ledger router: APIRouter = APIRouter() diff --git a/cashu/mint/startup.py b/cashu/mint/startup.py index 04b4c32..a79e17d 100644 --- a/cashu/mint/startup.py +++ b/cashu/mint/startup.py @@ -6,13 +6,13 @@ import importlib from loguru import logger -from cashu.core.db import Database -from cashu.core.migrations import migrate_databases -from cashu.core.settings import settings -from cashu.lightning.fake import FakeWallet # type: ignore -from cashu.lightning.lnbits import LNbitsWallet # type: ignore -from cashu.mint import migrations -from cashu.mint.ledger import Ledger +from ..core.db import Database +from ..core.migrations import migrate_databases +from ..core.settings import settings +from ..lightning.fake import FakeWallet # type: ignore +from ..lightning.lnbits import LNbitsWallet # type: ignore +from ..mint import migrations +from ..mint.ledger import Ledger logger.debug("Enviroment Settings:") for key, value in settings.dict().items(): diff --git a/cashu/wallet/__init__.py b/cashu/wallet/__init__.py index df2a29f..d1e0a16 100644 --- a/cashu/wallet/__init__.py +++ b/cashu/wallet/__init__.py @@ -4,7 +4,7 @@ sys.tracebacklimit = None # type: ignore from loguru import logger -from cashu.core.settings import settings +from ..core.settings import settings # configure logger logger.remove() diff --git a/cashu/wallet/cli/__init__.py b/cashu/wallet/cli/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cashu/wallet/cli/cli.py b/cashu/wallet/cli/cli.py index 78a29e2..688e028 100644 --- a/cashu/wallet/cli/cli.py +++ b/cashu/wallet/cli/cli.py @@ -18,21 +18,20 @@ import click from click import Context from loguru import logger -from cashu.core.base import Proof, TokenV1, TokenV2, TokenV3 -from cashu.core.helpers import sum_proofs -from cashu.core.migrations import migrate_databases -from cashu.core.settings import settings -from cashu.nostr.nostr.client.client import NostrClient -from cashu.tor.tor import TorProxy -from cashu.wallet import migrations -from cashu.wallet.crud import ( +from ...core.base import Proof, TokenV1, TokenV2, TokenV3 +from ...core.helpers import sum_proofs +from ...core.migrations import migrate_databases +from ...core.settings import settings +from ...nostr.nostr.client.client import NostrClient +from ...tor.tor import TorProxy +from ...wallet import migrations +from ...wallet.crud import ( get_keyset, get_lightning_invoices, get_reserved_proofs, get_unused_locks, ) -from cashu.wallet.wallet import Wallet as Wallet - +from ...wallet.wallet import Wallet as Wallet from .cli_helpers import ( get_mint_wallet, print_mint_balances, diff --git a/cashu/wallet/cli/cli_helpers.py b/cashu/wallet/cli/cli_helpers.py index 3413d60..f9d838a 100644 --- a/cashu/wallet/cli/cli_helpers.py +++ b/cashu/wallet/cli/cli_helpers.py @@ -6,7 +6,7 @@ import click from click import Context from loguru import logger -from cashu.core.base import ( +from ...core.base import ( Proof, TokenV1, TokenV2, @@ -15,10 +15,10 @@ from cashu.core.base import ( TokenV3Token, WalletKeyset, ) -from cashu.core.helpers import sum_proofs -from cashu.core.settings import settings -from cashu.wallet.crud import get_keyset -from cashu.wallet.wallet import Wallet as Wallet +from ...core.helpers import sum_proofs +from ...core.settings import settings +from ...wallet.crud import get_keyset +from ...wallet.wallet import Wallet as Wallet async def verify_mint(mint_wallet: Wallet, url: str): diff --git a/cashu/wallet/cli/nostr.py b/cashu/wallet/cli/nostr.py index f4d449e..eeeb38c 100644 --- a/cashu/wallet/cli/nostr.py +++ b/cashu/wallet/cli/nostr.py @@ -6,16 +6,13 @@ import click from click import Context from requests.exceptions import ConnectionError -from cashu.core.settings import settings -from cashu.nostr.nostr.client.client import NostrClient -from cashu.nostr.nostr.event import Event -from cashu.nostr.nostr.key import PublicKey -from cashu.wallet.cli.cli_helpers import get_mint_wallet -from cashu.wallet.crud import ( - get_nostr_last_check_timestamp, - set_nostr_last_check_timestamp, -) -from cashu.wallet.wallet import Wallet +from ...core.settings import settings +from ...nostr.nostr.client.client import NostrClient +from ...nostr.nostr.event import Event +from ...nostr.nostr.key import PublicKey +from ..crud import get_nostr_last_check_timestamp, set_nostr_last_check_timestamp +from ..wallet import Wallet +from .cli_helpers import get_mint_wallet async def nip5_to_pubkey(wallet: Wallet, address: str): @@ -113,7 +110,7 @@ async def receive_nostr(ctx: Context, verbose: bool): ) try: # call the receive method - from cashu.wallet.cli.cli import receive + from ...wallet.cli.cli import receive asyncio.run(receive(ctx, decrypted_content, "")) except Exception as e: diff --git a/cashu/wallet/crud.py b/cashu/wallet/crud.py index 0109838..881eaed 100644 --- a/cashu/wallet/crud.py +++ b/cashu/wallet/crud.py @@ -1,8 +1,8 @@ import time from typing import Any, List, Optional -from cashu.core.base import Invoice, KeyBase, P2SHScript, Proof, WalletKeyset -from cashu.core.db import Connection, Database +from ..core.base import Invoice, KeyBase, P2SHScript, Proof, WalletKeyset +from ..core.db import Connection, Database async def store_proof( @@ -10,7 +10,6 @@ async def store_proof( db: Database, conn: Optional[Connection] = None, ): - await (conn or db).execute( """ INSERT INTO proofs @@ -25,7 +24,6 @@ async def get_proofs( db: Database, conn: Optional[Connection] = None, ): - rows = await (conn or db).fetchall( """ SELECT * from proofs @@ -38,7 +36,6 @@ async def get_reserved_proofs( db: Database, conn: Optional[Connection] = None, ): - rows = await (conn or db).fetchall( """ SELECT * from proofs @@ -53,7 +50,6 @@ async def invalidate_proof( db: Database, conn: Optional[Connection] = None, ): - await (conn or db).execute( f""" DELETE FROM proofs @@ -75,8 +71,8 @@ async def invalidate_proof( async def update_proof_reserved( proof: Proof, reserved: bool, - send_id: str = None, - db: Database = None, + send_id: str = "", + db: Optional[Database] = None, conn: Optional[Connection] = None, ): clauses = [] @@ -104,7 +100,6 @@ async def secret_used( db: Database, conn: Optional[Connection] = None, ): - rows = await (conn or db).fetchone( """ SELECT * from proofs @@ -120,7 +115,6 @@ async def store_p2sh( db: Database, conn: Optional[Connection] = None, ): - await (conn or db).execute( """ INSERT INTO p2sh @@ -137,11 +131,10 @@ async def store_p2sh( async def get_unused_locks( - address: str = None, - db: Database = None, + address: str = "", + db: Optional[Database] = None, conn: Optional[Connection] = None, ): - clause: List[str] = [] args: List[str] = [] @@ -168,7 +161,7 @@ async def get_unused_locks( async def update_p2sh_used( p2sh: P2SHScript, used: bool, - db: Database = None, + db: Optional[Database] = None, conn: Optional[Connection] = None, ): clauses = [] @@ -184,11 +177,10 @@ async def update_p2sh_used( async def store_keyset( keyset: WalletKeyset, - mint_url: str = None, - db: Database = None, + mint_url: str = "", + db: Optional[Database] = None, conn: Optional[Connection] = None, ): - await (conn or db).execute( # type: ignore """ INSERT INTO keysets @@ -209,7 +201,7 @@ async def store_keyset( async def get_keyset( id: str = "", mint_url: str = "", - db: Database = None, + db: Optional[Database] = None, conn: Optional[Connection] = None, ): clauses = [] @@ -241,7 +233,6 @@ async def store_lightning_invoice( invoice: Invoice, conn: Optional[Connection] = None, ): - await (conn or db).execute( f""" INSERT INTO invoices @@ -262,7 +253,7 @@ async def store_lightning_invoice( async def get_lightning_invoice( db: Database, - hash: str = None, + hash: str = "", conn: Optional[Connection] = None, ): clauses = [] @@ -287,7 +278,7 @@ async def get_lightning_invoice( async def get_lightning_invoices( db: Database, - paid: bool = None, + paid: Optional[bool] = None, conn: Optional[Connection] = None, ): clauses: List[Any] = [] @@ -315,7 +306,7 @@ async def update_lightning_invoice( db: Database, hash: str, paid: bool, - time_paid: int = None, + time_paid: Optional[int] = None, conn: Optional[Connection] = None, ): clauses = [] diff --git a/cashu/wallet/migrations.py b/cashu/wallet/migrations.py index 6b124ae..5e105e6 100644 --- a/cashu/wallet/migrations.py +++ b/cashu/wallet/migrations.py @@ -1,4 +1,4 @@ -from cashu.core.db import Database +from ..core.db import Database async def m000_create_migrations_table(db): diff --git a/cashu/wallet/wallet.py b/cashu/wallet/wallet.py index 9f4999c..d3fdccf 100644 --- a/cashu/wallet/wallet.py +++ b/cashu/wallet/wallet.py @@ -10,9 +10,9 @@ from typing import Dict, List, Optional import requests from loguru import logger -import cashu.core.b_dhke as b_dhke -import cashu.core.bolt11 as bolt11 -from cashu.core.base import ( +from ..core import b_dhke as b_dhke +from ..core import bolt11 as bolt11 +from ..core.base import ( BlindedMessage, BlindedSignature, CheckFeesRequest, @@ -35,20 +35,20 @@ from cashu.core.base import ( TokenV3Token, WalletKeyset, ) -from cashu.core.bolt11 import Invoice as InvoiceBolt11 -from cashu.core.db import Database -from cashu.core.helpers import sum_proofs -from cashu.core.script import ( +from ..core.bolt11 import Invoice as InvoiceBolt11 +from ..core.db import Database +from ..core.helpers import sum_proofs +from ..core.script import ( step0_carol_checksig_redeemscrip, step0_carol_privkey, step1_carol_create_p2sh_address, step2_carol_sign_tx, ) -from cashu.core.secp import PrivateKey, PublicKey -from cashu.core.settings import settings -from cashu.core.split import amount_split -from cashu.tor.tor import TorProxy -from cashu.wallet.crud import ( +from ..core.secp import PrivateKey, PublicKey +from ..core.settings import settings +from ..core.split import amount_split +from ..tor.tor import TorProxy +from ..wallet.crud import ( get_keyset, get_proofs, invalidate_proof,