electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 9056865bdec2cdc3cf2a636da5a3f85117135a25
parent a7369a2bfd1f2a91fa41de486f8c08a93aa0d4ca
Author: ThomasV <thomasv1@gmx.de>
Date:   Sun, 10 Nov 2013 02:39:01 -0800

Merge pull request #386 from WyseNynja/dont_use_base_exception

replace BaseException with Exception
Diffstat:
Melectrum | 2+-
Mgui/android.py | 2+-
Mgui/gtk.py | 2+-
Mgui/qt/lite_window.py | 4++--
Mgui/qt/main_window.py | 12++++++------
Mgui/stdio.py | 2+-
Mgui/text.py | 2+-
Mlib/account.py | 2+-
Mlib/bitcoin.py | 18+++++++++---------
Mlib/blockchain.py | 8++++----
Mlib/commands.py | 12++++++------
Mlib/interface.py | 20++++++++++----------
Mlib/network.py | 2+-
Mlib/plugins.py | 4++--
Mlib/simple_config.py | 4++--
Mlib/transaction.py | 2+-
Mlib/util.py | 2+-
Mlib/wallet.py | 36++++++++++++++++++------------------
Mplugins/aliases.py | 2+-
Mplugins/qrscanner.py | 8++++----
20 files changed, 73 insertions(+), 73 deletions(-)

diff --git a/electrum b/electrum @@ -103,7 +103,7 @@ def run_command(cmd, password = None, args = []): cmd_runner.password = password try: result = func(*args[1:]) - except BaseException, e: + except Exception as e: import traceback traceback.print_exc(file=sys.stdout) sys.exit(1) diff --git a/gui/android.py b/gui/android.py @@ -458,7 +458,7 @@ def pay_to(recipient, amount, fee, label): try: tx = wallet.mktx( [(recipient, amount)], password, fee) - except BaseException, e: + except Exception as e: modal_dialog('error', e.message) droid.dialogDismiss() return diff --git a/gui/gtk.py b/gui/gtk.py @@ -807,7 +807,7 @@ class ElectrumWindow: try: tx = self.wallet.mktx( [(to_address, amount)], password, fee ) - except BaseException, e: + except Exception as e: self.show_message(str(e)) return diff --git a/gui/qt/lite_window.py b/gui/qt/lite_window.py @@ -750,7 +750,7 @@ class MiniActuator: try: tx = self.g.wallet.mktx([(dest_address, amount)], password, fee) - except BaseException as error: + except Exception as error: QMessageBox.warning(parent_window, _('Error'), str(error), _('OK')) return False @@ -778,7 +778,7 @@ class MiniActuator: with open(fileName,'w') as f: f.write(json.dumps(tx.as_dict(),indent=4) + '\n') QMessageBox.information(QWidget(), _('Unsigned transaction created'), _("Unsigned transaction was saved to file:") + " " +fileName, _('OK')) - except BaseException as e: + except Exception as e: QMessageBox.warning(QWidget(), _('Error'), _('Could not write transaction to file: %s' % e), _('OK')) return True diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py @@ -889,7 +889,7 @@ class ElectrumWindow(QMainWindow): try: tx = self.wallet.mktx_from_account( [(to_address, amount)], password, fee, self.current_account) - except BaseException, e: + except Exception as e: traceback.print_exc(file=sys.stdout) self.show_message(str(e)) return @@ -1635,7 +1635,7 @@ class ElectrumWindow(QMainWindow): if not address: return try: pk_list = self.wallet.get_private_key(address, password) - except BaseException, e: + except Exception as e: self.show_message(str(e)) return QMessageBox.information(self, _('Private key'), _('Address')+ ': ' + address + '\n\n' + _('Private key') + ': ' + '\n'.join(pk_list), _('OK')) @@ -1648,7 +1648,7 @@ class ElectrumWindow(QMainWindow): try: sig = self.wallet.sign_message(str(address.text()), message, password) signature.setText(sig) - except BaseException, e: + except Exception as e: self.show_message(str(e)) def sign_message(self, address): @@ -1840,7 +1840,7 @@ class ElectrumWindow(QMainWindow): try: tx = self.wallet.make_unsigned_transaction(outputs, None, None) - except BaseException, e: + except Exception as e: self.show_message(str(e)) return @@ -1893,7 +1893,7 @@ class ElectrumWindow(QMainWindow): export_error_label = _("Electrum was unable to produce a private key-export.") QMessageBox.critical(None, _("Unable to create csv"), export_error_label + "\n" + str(reason)) - except BaseException, e: + except Exception as e: self.show_message(str(e)) return @@ -1946,7 +1946,7 @@ class ElectrumWindow(QMainWindow): for key in text: try: addr = self.wallet.import_key(key, password) - except BaseException as e: + except Exception as e: badkeys.append(key) continue if not addr: diff --git a/gui/stdio.py b/gui/stdio.py @@ -198,7 +198,7 @@ class ElectrumGui: try: tx = self.wallet.mktx( [(self.str_recipient, amount)], password, fee) - except BaseException, e: + except Exception as e: print(str(e)) return diff --git a/gui/text.py b/gui/text.py @@ -309,7 +309,7 @@ class ElectrumGui: try: tx = self.wallet.mktx( [(self.str_recipient, amount)], password, fee) - except BaseException, e: + except Exception as e: self.show_message(str(e)) return diff --git a/lib/account.py b/lib/account.py @@ -109,7 +109,7 @@ class OldAccount(Account): master_public_key = master_private_key.get_verifying_key().to_string() if master_public_key != self.mpk: print_error('invalid password (mpk)') - raise BaseException('Invalid password') + raise Exception('Invalid password') return True def redeem_script(self, sequence): diff --git a/lib/bitcoin.py b/lib/bitcoin.py @@ -115,7 +115,7 @@ def hash_160(public_key): md = hashlib.new('ripemd160') md.update(hashlib.sha256(public_key).digest()) return md.digest() - except: + except Exception: import ripemd md = ripemd.new(hashlib.sha256(public_key).digest()) return md.digest() @@ -268,7 +268,7 @@ def is_valid(addr): if not ADDRESS_RE.match(addr): return False try: addrtype, h = bc_address_to_hash_160(addr) - except: + except Exception: return False return addr == hash_160_to_bc_address(h, addrtype) @@ -277,7 +277,7 @@ def is_valid(addr): try: from ecdsa.ecdsa import curve_secp256k1, generator_secp256k1 -except: +except Exception: print "cannot import ecdsa.curve_secp256k1. You probably need to upgrade ecdsa.\nTry: sudo pip install --upgrade ecdsa" exit() from ecdsa.curves import SECP256k1 @@ -294,7 +294,7 @@ def verify_message(address, signature, message): try: EC_KEY.verify_message(address, signature, message) return True - except BaseException as e: + except Exception as e: print_error("Verification error: {0}".format(e)) return False @@ -316,10 +316,10 @@ class EC_KEY(object): try: self.verify_message( address, sig, message) return sig - except: + except Exception: continue else: - raise BaseException("error: cannot sign message") + raise Exception("error: cannot sign message") @classmethod def verify_message(self, address, signature, message): @@ -331,11 +331,11 @@ class EC_KEY(object): order = G.order() # extract r,s from signature sig = base64.b64decode(signature) - if len(sig) != 65: raise BaseException("Wrong encoding") + if len(sig) != 65: raise Exception("Wrong encoding") r,s = util.sigdecode_string(sig[1:], order) nV = ord(sig[0]) if nV < 27 or nV >= 35: - raise BaseException("Bad encoding") + raise Exception("Bad encoding") if nV >= 31: compressed = True nV -= 4 @@ -364,7 +364,7 @@ class EC_KEY(object): # check that we get the original signing address addr = public_key_to_bc_address( encode_point(public_key, compressed) ) if address != addr: - raise BaseException("Bad signature") + raise Exception("Bad signature") ###################################### BIP32 ############################## diff --git a/lib/blockchain.py b/lib/blockchain.py @@ -119,7 +119,7 @@ class Blockchain(threading.Thread): assert prev_hash == header.get('prev_block_hash') assert bits == header.get('bits') assert eval('0x'+_hash) < target - except: + except Exception: return False prev_header = header @@ -176,7 +176,7 @@ class Blockchain(threading.Thread): assert prev_hash == header.get('prev_block_hash') assert bits == header.get('bits') assert eval('0x'+_hash) < target - except: + except Exception: # this can be caused by a reorg. print_error("verify header failed"+ repr(header)) verifier.undo_verifications() @@ -227,7 +227,7 @@ class Blockchain(threading.Thread): print_error("downloading ", self.headers_url ) urllib.urlretrieve(self.headers_url, filename) print_error("done.") - except: + except Exception: print_error( "download failed. creating file", filename ) open(filename,'wb+').close() @@ -411,7 +411,7 @@ class Blockchain(threading.Thread): index = params[0] try: self.verify_chunk(index, result) - except: + except Exception: print_error('Verify chunk failed!!') return False requested_chunks.remove(index) diff --git a/lib/commands.py b/lib/commands.py @@ -228,7 +228,7 @@ class Commands: try: addr = self.wallet.import_key(sec,self.password) out = "Keypair imported: ", addr - except BaseException as e: + except Exception as e: out = "Error: Keypair import failed: " + str(e) return out @@ -245,19 +245,19 @@ class Commands: for to_address, amount in outputs: if not is_valid(to_address): - raise BaseException("Invalid Bitcoin address", to_address) + raise Exception("Invalid Bitcoin address", to_address) if change_addr: if not is_valid(change_addr): - raise BaseException("Invalid Bitcoin address", change_addr) + raise Exception("Invalid Bitcoin address", change_addr) if domain is not None: for addr in domain: if not is_valid(addr): - raise BaseException("invalid Bitcoin address", addr) + raise Exception("invalid Bitcoin address", addr) if not self.wallet.is_mine(addr): - raise BaseException("address not in wallet", addr) + raise Exception("address not in wallet", addr) for k, v in self.wallet.labels.items(): if change_addr and v == change_addr: @@ -306,7 +306,7 @@ class Commands: tx_hash, conf, is_mine, value, fee, balance, timestamp = item try: time_str = datetime.datetime.fromtimestamp( timestamp).isoformat(' ')[:-3] - except: + except Exception: time_str = "----" label, is_default_label = self.wallet.get_label(tx_hash) diff --git a/lib/interface.py b/lib/interface.py @@ -49,7 +49,7 @@ def check_cert(host, cert): def cert_has_expired(cert_path): try: import OpenSSL - except: + except Exception: print_error("Warning: cannot import OpenSSL") return False from OpenSSL import crypto as c @@ -112,12 +112,12 @@ class Interface(threading.Thread): try: host, port, protocol = self.server.split(':') port = int(port) - except: + except Exception: self.server = None return if protocol not in 'ghst': - raise BaseException('Unknown protocol: %s'%protocol) + raise Exception('Unknown protocol: %s'%protocol) self.host = host self.port = port @@ -196,7 +196,7 @@ class Interface(threading.Thread): self.connection_msg = ('https' if self.use_ssl else 'http') + '://%s:%d'%( self.host, self.port ) try: self.poll() - except: + except Exception: print_error("http init session failed") self.is_connected = False return @@ -218,7 +218,7 @@ class Interface(threading.Thread): break except socket.error: break - except: + except Exception: traceback.print_exc(file=sys.stdout) break @@ -265,7 +265,7 @@ class Interface(threading.Thread): try: req = urllib2.Request(self.connection_msg, data_json, headers) response_stream = urllib2.urlopen(req, timeout=DEFAULT_TIMEOUT) - except: + except Exception: return for index, cookie in enumerate(cj): @@ -318,7 +318,7 @@ class Interface(threading.Thread): s = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) try: s.connect((self.host, self.port)) - except: + except Exception: # print_error("failed to connect", self.host, self.port) return @@ -346,7 +346,7 @@ class Interface(threading.Thread): try: s.connect(( self.host.encode('ascii'), int(self.port))) - except: + except Exception: print_error("failed to connect", self.host, self.port) return @@ -370,7 +370,7 @@ class Interface(threading.Thread): else: print_msg("wrong certificate", self.host) return - except: + except Exception: print_error("wrap_socket failed", self.host) traceback.print_exc(file=sys.stdout) return @@ -424,7 +424,7 @@ class Interface(threading.Thread): c = json.loads(c) self.queue_json_response(c) - except: + except Exception: traceback.print_exc(file=sys.stdout) self.is_connected = False diff --git a/lib/network.py b/lib/network.py @@ -385,7 +385,7 @@ class Network(threading.Thread): if pruning_level == '': pruning_level = '0' try: is_recent = float(version)>=float(PROTOCOL_VERSION) - except: + except Exception: is_recent = False if out and is_recent: diff --git a/lib/plugins.py b/lib/plugins.py @@ -24,7 +24,7 @@ def init_plugins(self): for name, p in zip(plugin_names, plugin_modules): try: plugins.append( p.Plugin(self, name) ) - except: + except Exception: print_msg(_("Error: cannot initialize plugin"),p) traceback.print_exc(file=sys.stdout) @@ -45,7 +45,7 @@ def run_hook(name, *args): try: f(*args) - except: + except Exception: print_error("Plugin error") traceback.print_exc(file=sys.stdout) diff --git a/lib/simple_config.py b/lib/simple_config.py @@ -103,7 +103,7 @@ a SimpleConfig instance then reads the wallet file. import ast try: out = ast.literal_eval(out) - except: + except Exception: print "type error for '%s': using default value"%key out = default @@ -154,7 +154,7 @@ a SimpleConfig instance then reads the wallet file. return try: d = ast.literal_eval( data ) #parse raw data from reading wallet file - except: + except Exception: raise IOError("Cannot read config file.") self.user_config = d diff --git a/lib/transaction.py b/lib/transaction.py @@ -298,7 +298,7 @@ def match_decoded(decoded, to_match): def get_address_from_input_script(bytes): try: decoded = [ x for x in script_GetOp(bytes) ] - except: + except Exception: # coinbase transactions raise an exception print_error("cannot find address in input script", bytes.encode('hex')) return [], [], "(None)" diff --git a/lib/util.py b/lib/util.py @@ -49,7 +49,7 @@ def user_dir(): elif 'ANDROID_DATA' in os.environ: return "/sdcard/electrum/" else: - #raise BaseException("No home directory found in environment variables.") + #raise Exception("No home directory found in environment variables.") return def appdata_dir(): diff --git a/lib/wallet.py b/lib/wallet.py @@ -55,8 +55,8 @@ def pw_decode(s, password): secret = Hash(password) try: d = DecodeAES(secret, s) - except: - raise BaseException('Invalid password') + except Exception: + raise Exception('Invalid password') return d else: return s @@ -117,7 +117,7 @@ class WalletStorage: return try: d = ast.literal_eval( data ) #parse raw data from reading wallet file - except: + except Exception: raise IOError("Cannot read wallet file.") self.data = d @@ -192,7 +192,7 @@ class Wallet: for k,v in tx_list.items(): try: tx = Transaction(v) - except: + except Exception: print_msg("Warning: Cannot deserialize transactions. skipping") continue @@ -256,11 +256,11 @@ class Wallet: seed = self.get_seed(password) try: address = address_from_private_key(sec) - except: - raise BaseException('Invalid private key') + except Exception: + raise Exception('Invalid private key') if self.is_mine(address): - raise BaseException('Address already in wallet') + raise Exception('Address already in wallet') # store the originally requested keypair into the imported keys table self.imported_keys[address] = pw_encode(sec, password ) @@ -296,7 +296,7 @@ class Wallet: import mnemonic if self.seed: - raise BaseException("a seed exists") + raise Exception("a seed exists") if not seed: self.seed = random_seed(128) @@ -314,7 +314,7 @@ class Wallet: self.seed_version = 4 self.seed = str(seed) return - except: + except Exception: pass words = seed.split() @@ -324,7 +324,7 @@ class Wallet: #try: # mnemonic.mn_decode(words) # uses_electrum_words = True - #except: + #except Exception: # uses_electrum_words = False # #if uses_electrum_words and len(words) != 13: @@ -438,7 +438,7 @@ class Wallet: elif account_type == '2of3': return "m/3'/%d & m/4'/%d & m/5'/%d"%(i,i,i) else: - raise BaseException('unknown account type') + raise Exception('unknown account type') def num_accounts(self, account_type): @@ -608,8 +608,8 @@ class Wallet: try: K, Kc = get_pubkeys_from_secret(master_k.decode('hex')) assert K.encode('hex') == master_K - except: - raise BaseException("Invalid password") + except Exception: + raise Exception("Invalid password") return master_k @@ -628,7 +628,7 @@ class Wallet: if v == address: return k, (0,0) - raise BaseException("Address not found", address) + raise Exception("Address not found", address) def get_roots(self, account): @@ -1110,7 +1110,7 @@ class Wallet: if h == ['*']: continue for tx_hash, tx_height in h: tx = self.transactions.get(tx_hash) - if tx is None: raise BaseException("Wallet not synchronized") + if tx is None: raise Exception("Wallet not synchronized") is_coinbase = tx.inputs[0].get('prevout_hash') == '0'*64 for output in tx.d.get('outputs'): if output.get('address') != addr: continue @@ -1245,7 +1245,7 @@ class Wallet: def receive_history_callback(self, addr, hist): if not self.check_new_history(addr, hist): - raise BaseException("error: received history for %s is not consistent with known transactions"%addr) + raise Exception("error: received history for %s is not consistent with known transactions"%addr) with self.lock: self.history[addr] = hist @@ -1754,12 +1754,12 @@ class WalletSynchronizer(threading.Thread): hist.append( (tx_hash, item['height']) ) if len(hist) != len(result): - raise BaseException("error: server sent history with non-unique txid", result) + raise Exception("error: server sent history with non-unique txid", result) # check that the status corresponds to what was announced rs = requested_histories.pop(addr) if self.wallet.get_status(hist) != rs: - raise BaseException("error: status mismatch: %s"%addr) + raise Exception("error: status mismatch: %s"%addr) # store received history self.wallet.receive_history_callback(addr, hist) diff --git a/plugins/aliases.py b/plugins/aliases.py @@ -52,7 +52,7 @@ class Plugin(BasePlugin): def get_alias(self, alias, interactive = False, show_message=None, question = None): try: target, signing_address, auth_name = read_alias(self, alias) - except BaseException, e: + except Exception as e: # raise exception if verify fails (verify the chain) if interactive: show_message("Alias error: " + str(e)) diff --git a/plugins/qrscanner.py b/plugins/qrscanner.py @@ -110,7 +110,7 @@ class Plugin(BasePlugin): try: tx = self.gui.main_window.wallet.mktx( [(to_address, amount)], None, fee) - except BaseException, e: + except Exception as e: self.gui.main_window.show_message(str(e)) return @@ -126,13 +126,13 @@ class Plugin(BasePlugin): input_info = [] - except BaseException, e: + except Exception as e: self.gui.main_window.show_message(str(e)) try: json_text = json.dumps(tx.as_dict()).replace(' ', '') self.show_tx_qrcode(json_text, 'Unsigned Transaction') - except BaseException, e: + except Exception as e: self.gui.main_window.show_message(str(e)) def show_tx_qrcode(self, data, title): @@ -235,7 +235,7 @@ class Plugin(BasePlugin): self.gui.main_window.wallet.signrawtransaction(tx, input_info, [], password) txtext = json.dumps(tx.as_dict()).replace(' ', '') self.show_tx_qrcode(txtext, 'Signed Transaction') - except BaseException, e: + except Exception as e: self.gui.main_window.show_message(str(e))