diff --git a/scripts/joinmarket-qt.py b/scripts/joinmarket-qt.py index 78538f5ef..39a0e3aeb 100755 --- a/scripts/joinmarket-qt.py +++ b/scripts/joinmarket-qt.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -from typing import Optional ''' Joinmarket GUI using PyQt for doing coinjoins. @@ -23,6 +22,7 @@ import sys, datetime, os, logging import platform, json, threading, time from optparse import OptionParser +from typing import Optional, Tuple from PySide2 import QtCore @@ -1921,7 +1921,7 @@ def show_privkeys(): "Private keys exported to: " + os.path.join(jm_single().datadir, privkeys_fn) + '.json', title="Success") - def seedEntry(self): + def seedEntry(self) -> Tuple[Optional[str], Optional[str]]: d = QDialog(self) d.setModal(1) d.setWindowTitle('Recover from mnemonic phrase') @@ -2230,7 +2230,7 @@ def showSeedDialog(self): mbtype='info', title="Error") - def getPassword(self): + def getPassword(self) -> str: pd = PasswordDialog() while True: for child in pd.findChildren(QLineEdit): @@ -2255,7 +2255,7 @@ def getPassword(self): self.textpassword = str(pd.new_pw.text()) return self.textpassword.encode('utf-8') - def getWalletFileName(self): + def getWalletFileName(self) -> str: walletname, ok = QInputDialog.getText(self, 'Choose wallet name', 'Enter wallet file name:', QLineEdit.Normal, "wallet.jmdat") @@ -2267,7 +2267,7 @@ def getWalletFileName(self): self.walletname = str(walletname) return self.walletname - def displayWords(self, words, mnemonic_extension): + def displayWords(self, words: str, mnemonic_extension: str) -> None: mb = QMessageBox(self) seed_recovery_warning = [ "WRITE DOWN THIS WALLET RECOVERY SEED.", @@ -2282,13 +2282,13 @@ def displayWords(self, words, mnemonic_extension): mb.setStandardButtons(QMessageBox.Ok) ret = mb.exec_() - def promptUseMnemonicExtension(self): + def promptUseMnemonicExtension(self) -> bool: msg = "Would you like to use a two-factor mnemonic recovery phrase?\nIf you don\'t know what this is press No." reply = QMessageBox.question(self, 'Use mnemonic extension?', msg, QMessageBox.Yes, QMessageBox.No) return reply == QMessageBox.Yes - def promptInputMnemonicExtension(self): + def promptInputMnemonicExtension(self) -> Optional[str]: mnemonic_extension, ok = QInputDialog.getText(self, 'Input Mnemonic Extension', 'Enter mnemonic Extension:', diff --git a/src/jmclient/wallet_utils.py b/src/jmclient/wallet_utils.py index 2bdf277ff..0fe397fde 100644 --- a/src/jmclient/wallet_utils.py +++ b/src/jmclient/wallet_utils.py @@ -9,7 +9,7 @@ from numbers import Integral from collections import Counter, defaultdict from itertools import islice, chain -from typing import Optional, Tuple +from typing import Callable, Optional, Tuple from jmclient import (get_network, WALLET_IMPLEMENTATIONS, Storage, podle, jm_single, WalletError, BaseWallet, VolatileStorage, StoragePasswordError, is_segwit_mode, SegwitLegacyWallet, LegacyWallet, @@ -673,25 +673,25 @@ def get_addr_status(addr_path, utxos, utxos_enabled, is_new, is_internal): else: return walletview -def cli_get_wallet_passphrase_check(): +def cli_get_wallet_passphrase_check() -> Optional[str]: password = get_password("Enter new passphrase to encrypt wallet: ") password2 = get_password("Reenter new passphrase to encrypt wallet: ") if password != password2: jmprint('ERROR. Passwords did not match', "error") - return False + return None return password -def cli_get_wallet_file_name(defaultname="wallet.jmdat"): - return input('Input wallet file name (default: ' + defaultname + '): ') +def cli_get_wallet_file_name(defaultname: str = "wallet.jmdat") -> str: + return input(f'Input wallet file name (default: {defaultname}): ') -def cli_display_user_words(words, mnemonic_extension): +def cli_display_user_words(words: str, mnemonic_extension: str) -> None: text = 'Write down this wallet recovery mnemonic\n\n' + words +'\n' if mnemonic_extension: text += '\nAnd this mnemonic extension: ' + mnemonic_extension.decode( 'utf-8') + '\n' jmprint(text, "important") -def cli_user_mnemonic_entry(): +def cli_user_mnemonic_entry() -> Tuple[Optional[str], Optional[str]]: mnemonic_phrase = input("Input mnemonic recovery phrase: ") mnemonic_extension = input("Input mnemonic extension, leave blank if there isnt one: ") if len(mnemonic_extension.strip()) == 0: @@ -707,7 +707,7 @@ def cli_do_use_mnemonic_extension() -> bool: jmprint("Not using mnemonic extension", "info") return False #no mnemonic extension -def cli_get_mnemonic_extension(): +def cli_get_mnemonic_extension() -> str: jmprint("Note: This will be stored in a reversible way. Do not reuse!", "info") return input("Enter mnemonic extension: ") @@ -721,10 +721,17 @@ def cli_do_support_fidelity_bonds() -> bool: jmprint("Not supporting fidelity bonds", "info") return False -def wallet_generate_recover_bip39(method, walletspath, default_wallet_name, - display_seed_callback, enter_seed_callback, enter_wallet_password_callback, - enter_wallet_file_name_callback, enter_if_use_seed_extension, - enter_seed_extension_callback, enter_do_support_fidelity_bonds, mixdepth=DEFAULT_MIXDEPTH): +def wallet_generate_recover_bip39(method: str, + walletspath: str, + default_wallet_name: str, + display_seed_callback: Callable[[str, str], None], + enter_seed_callback: Optional[Callable[[], Tuple[Optional[str], Optional[str]]]], + enter_wallet_password_callback: Callable[[], str], + enter_wallet_file_name_callback: Callable[[], str], + enter_if_use_seed_extension: Optional[Callable[[], bool]], + enter_seed_extension_callback: Optional[Callable[[], Optional[str]]], + enter_do_support_fidelity_bonds: Callable[[], bool], + mixdepth: int = DEFAULT_MIXDEPTH) -> bool: entropy = None mnemonic_extension = None if method == "generate": @@ -734,10 +741,10 @@ def wallet_generate_recover_bip39(method, walletspath, default_wallet_name, return False elif method == 'recover': words, mnemonic_extension = enter_seed_callback() - words = words.strip() - mnemonic_extension = mnemonic_extension and mnemonic_extension.strip() + words = words and words.strip() if not words: return False + mnemonic_extension = mnemonic_extension and mnemonic_extension.strip() try: entropy = SegwitLegacyWallet.entropy_from_mnemonic(words) except WalletError: