removed trailing whitespace and fixed indentation in history widget

This commit is contained in:
Tafelpoot 2014-10-21 19:05:51 +02:00
parent 49c0a3a08f
commit d9c5250a6f
35 changed files with 230 additions and 267 deletions

View File

@ -160,7 +160,7 @@ class ElectrumGui:
import installwizard import installwizard
wizard = installwizard.InstallWizard(self.config, self.network, storage) wizard = installwizard.InstallWizard(self.config, self.network, storage)
wallet = wizard.run(action) wallet = wizard.run(action)
if not wallet: if not wallet:
return return
else: else:
wallet.start_threads(self.network) wallet.start_threads(self.network)
@ -203,7 +203,7 @@ class ElectrumGui:
s.start() s.start()
self.windows.append(w) self.windows.append(w)
if url: if url:
self.set_url(url) self.set_url(url)
w.app = self.app w.app = self.app
@ -221,5 +221,3 @@ class ElectrumGui:
self.app.sendEvent(self.app.clipboard(), event) self.app.sendEvent(self.app.clipboard(), event)
w.close_wallet() w.close_wallet()

View File

@ -96,4 +96,3 @@ class BTCAmountEdit(AmountEdit):
p = pow(10, self.decimal_point()) p = pow(10, self.decimal_point())
x = amount / Decimal(p) x = amount / Decimal(p)
self.setText(str(x)) self.setText(str(x))

View File

@ -35,7 +35,7 @@ class Console(QtGui.QPlainTextEdit):
def set_json(self, b): def set_json(self, b):
self.is_json = b self.is_json = b
def run_script(self, filename): def run_script(self, filename):
with open(filename) as f: with open(filename) as f:
script = f.read() script = f.read()
@ -106,7 +106,7 @@ class Console(QtGui.QPlainTextEdit):
self.moveCursor(QtGui.QTextCursor.End) self.moveCursor(QtGui.QTextCursor.End)
self.completions_visible = True self.completions_visible = True
def hide_completions(self): def hide_completions(self):
if not self.completions_visible: if not self.completions_visible:
@ -146,7 +146,7 @@ class Console(QtGui.QPlainTextEdit):
def addToHistory(self, command): def addToHistory(self, command):
if command.find("importprivkey") > -1: if command.find("importprivkey") > -1:
return return
if command and (not self.history or self.history[-1] != command): if command and (not self.history or self.history[-1] != command):
self.history.append(command) self.history.append(command)
self.history_index = len(self.history) self.history_index = len(self.history)
@ -177,7 +177,7 @@ class Console(QtGui.QPlainTextEdit):
def register_command(self, c, func): def register_command(self, c, func):
methods = { c: func} methods = { c: func}
self.updateNamespace(methods) self.updateNamespace(methods)
def runCommand(self): def runCommand(self):
command = self.getCommand() command = self.getCommand()
@ -232,7 +232,7 @@ class Console(QtGui.QPlainTextEdit):
sys.stdout = tmp_stdout sys.stdout = tmp_stdout
self.newPrompt() self.newPrompt()
self.set_json(False) self.set_json(False)
def keyPressEvent(self, event): def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Tab: if event.key() == QtCore.Qt.Key_Tab:
@ -280,7 +280,7 @@ class Console(QtGui.QPlainTextEdit):
obj = self.namespace.get(path[0]) obj = self.namespace.get(path[0])
prefix = path[0] + '.' prefix = path[0] + '.'
ns = dir(obj) ns = dir(obj)
completions = [] completions = []
for x in ns: for x in ns:
@ -289,7 +289,7 @@ class Console(QtGui.QPlainTextEdit):
if xx.startswith(lastword): if xx.startswith(lastword):
completions.append(xx) completions.append(xx)
completions.sort() completions.sort()
if not completions: if not completions:
self.hide_completions() self.hide_completions()
elif len(completions) == 1: elif len(completions) == 1:

View File

@ -14,13 +14,12 @@ class HistoryWidget(QTreeWidget):
def append(self, address, amount, date): def append(self, address, amount, date):
if address is None: if address is None:
address = _("Unknown") address = _("Unknown")
if amount is None: if amount is None:
amount = _("Unknown") amount = _("Unknown")
if date is None: if date is None:
date = _("Unknown") date = _("Unknown")
item = QTreeWidgetItem([amount, address, date]) item = QTreeWidgetItem([amount, address, date])
if float(amount) < 0: if float(amount) < 0:
item.setForeground(0, QBrush(QColor("#BC1E1E"))) item.setForeground(0, QBrush(QColor("#BC1E1E")))
self.insertTopLevelItem(0, item) self.insertTopLevelItem(0, item)

View File

@ -97,7 +97,7 @@ class InstallWizard(QDialog):
if not self.exec_(): if not self.exec_():
return None, None return None, None
action = 'create' if b1.isChecked() else 'restore' action = 'create' if b1.isChecked() else 'restore'
wallet_type = self.wallet_types[group2.checkedId()][0] wallet_type = self.wallet_types[group2.checkedId()][0]
return action, wallet_type return action, wallet_type
@ -184,7 +184,7 @@ class InstallWizard(QDialog):
self.set_layout(vbox) self.set_layout(vbox)
if not self.exec_(): if not self.exec_():
return return
return map(lambda e: self.get_seed_text(e), entries) return map(lambda e: self.get_seed_text(e), entries)
@ -211,7 +211,7 @@ class InstallWizard(QDialog):
# skip this if config already exists # skip this if config already exists
if self.config.get('server') is not None: if self.config.get('server') is not None:
return return
grid = QGridLayout() grid = QGridLayout()
grid.setSpacing(5) grid.setSpacing(5)
@ -245,14 +245,14 @@ class InstallWizard(QDialog):
self.set_layout(vbox) self.set_layout(vbox)
if not self.exec_(): if not self.exec_():
return return
if b2.isChecked(): if b2.isChecked():
return NetworkDialog(self.network, self.config, None).do_exec() return NetworkDialog(self.network, self.config, None).do_exec()
else: else:
self.config.set_key('auto_cycle', True, True) self.config.set_key('auto_cycle', True, True)
return return
def show_message(self, msg, icon=None): def show_message(self, msg, icon=None):
vbox = QVBoxLayout() vbox = QVBoxLayout()
self.set_layout(vbox) self.set_layout(vbox)
@ -263,7 +263,7 @@ class InstallWizard(QDialog):
vbox.addWidget(QLabel(msg)) vbox.addWidget(QLabel(msg))
vbox.addStretch(1) vbox.addStretch(1)
vbox.addLayout(close_button(self, _('Next'))) vbox.addLayout(close_button(self, _('Next')))
if not self.exec_(): if not self.exec_():
return None return None
@ -302,7 +302,7 @@ class InstallWizard(QDialog):
vbox.addWidget(label) vbox.addWidget(label)
vbox.addStretch(1) vbox.addStretch(1)
vbox.addLayout(ok_cancel_buttons(self, yes_label, no_label)) vbox.addLayout(ok_cancel_buttons(self, yes_label, no_label))
if not self.exec_(): if not self.exec_():
return None return None
return True return True
@ -400,7 +400,7 @@ class InstallWizard(QDialog):
else: else:
f = run_hook('get_wizard_action', self, wallet, action) f = run_hook('get_wizard_action', self, wallet, action)
if not f: if not f:
raise BaseException('unknown wizard action', action) raise BaseException('unknown wizard action', action)
r = f(wallet, self) r = f(wallet, self)
if not r: if not r:
@ -461,7 +461,7 @@ class InstallWizard(QDialog):
elif t in ['2of2']: elif t in ['2of2']:
r = self.multi_seed_dialog(1) r = self.multi_seed_dialog(1)
if not r: if not r:
return return
text1, text2 = r text1, text2 = r
wallet = Wallet_2of2(self.storage) wallet = Wallet_2of2(self.storage)
@ -491,7 +491,7 @@ class InstallWizard(QDialog):
elif t in ['2of3']: elif t in ['2of3']:
r = self.multi_seed_dialog(2) r = self.multi_seed_dialog(2)
if not r: if not r:
return return
text1, text2, text3 = r text1, text2, text3 = r
wallet = Wallet_2of3(self.storage) wallet = Wallet_2of3(self.storage)
@ -536,5 +536,5 @@ class InstallWizard(QDialog):
# create first keys offline # create first keys offline
self.waiting_dialog(wallet.synchronize) self.waiting_dialog(wallet.synchronize)
return wallet return wallet

View File

@ -88,7 +88,7 @@ class TransactionWindow(QDialog):
label = unicode(self.label_edit.text()) label = unicode(self.label_edit.text())
self.parent.wallet.labels[self.tx_id] = label self.parent.wallet.labels[self.tx_id] = label
super(TransactionWindow, self).accept() super(TransactionWindow, self).accept()
def __init__(self, transaction_id, parent): def __init__(self, transaction_id, parent):
super(TransactionWindow, self).__init__() super(TransactionWindow, self).__init__()
@ -210,7 +210,7 @@ class MiniWindow(QDialog):
self.receiving = receiving_widget.ReceivingWidget(self) self.receiving = receiving_widget.ReceivingWidget(self)
self.receiving.setObjectName("receiving") self.receiving.setObjectName("receiving")
# Add to the right side # Add to the right side
self.receiving_box = QGroupBox(_("Select a receiving address")) self.receiving_box = QGroupBox(_("Select a receiving address"))
extra_layout = QGridLayout() extra_layout = QGridLayout()
@ -250,7 +250,7 @@ class MiniWindow(QDialog):
self.show_history(show_hist) self.show_history(show_hist)
show_hist = self.config.get("gui_show_receiving",False) show_hist = self.config.get("gui_show_receiving",False)
self.toggle_receiving_layout(show_hist) self.toggle_receiving_layout(show_hist)
self.setWindowIcon(QIcon(":icons/electrum.png")) self.setWindowIcon(QIcon(":icons/electrum.png"))
self.setWindowTitle("Electrum") self.setWindowTitle("Electrum")
self.setWindowFlags(Qt.Window|Qt.MSWindowsFixedSizeDialogHint) self.setWindowFlags(Qt.Window|Qt.MSWindowsFixedSizeDialogHint)
@ -384,7 +384,7 @@ class MiniWindow(QDialog):
self.balance_label.show_balance() self.balance_label.show_balance()
def create_quote_text(self, btc_balance): def create_quote_text(self, btc_balance):
"""Return a string copy of the amount fiat currency the """Return a string copy of the amount fiat currency the
user has in bitcoins.""" user has in bitcoins."""
from electrum.plugins import run_hook from electrum.plugins import run_hook
r = {} r = {}
@ -443,7 +443,7 @@ class MiniWindow(QDialog):
def update_completions(self, completions): def update_completions(self, completions):
self.address_completions.setStringList(completions) self.address_completions.setStringList(completions)
def update_history(self, tx_history): def update_history(self, tx_history):
@ -499,7 +499,7 @@ class BalanceLabel(QLabel):
position = event.globalPos() position = event.globalPos()
menu = self.parent.context_menu() menu = self.parent.context_menu()
menu.exec_(position) menu.exec_(position)
def set_balance_text(self, amount, unit, quote_text): def set_balance_text(self, amount, unit, quote_text):
"""Set the amount of bitcoins in the gui.""" """Set the amount of bitcoins in the gui."""
@ -560,7 +560,7 @@ class PasswordDialog(QDialog):
main_layout.addLayout(grid) main_layout.addLayout(grid)
main_layout.addLayout(ok_cancel_buttons(self)) main_layout.addLayout(ok_cancel_buttons(self))
self.setLayout(main_layout) self.setLayout(main_layout)
def run(self): def run(self):
if not self.exec_(): if not self.exec_():
@ -599,10 +599,10 @@ class ReceivePopup(QDialog):
self.show() self.show()
class MiniActuator: class MiniActuator:
"""Initialize the definitions relating to themes and """Initialize the definitions relating to themes and
sending/receiving bitcoins.""" sending/receiving bitcoins."""
def __init__(self, main_window): def __init__(self, main_window):
"""Retrieve the gui theme used in previous session.""" """Retrieve the gui theme used in previous session."""
self.g = main_window self.g = main_window
@ -624,7 +624,7 @@ class MiniActuator:
def theme_names(self): def theme_names(self):
"""Sort themes.""" """Sort themes."""
return sorted(self.themes.keys()) return sorted(self.themes.keys())
def selected_theme(self): def selected_theme(self):
"""Select theme.""" """Select theme."""
return self.theme_name return self.theme_name
@ -634,14 +634,14 @@ class MiniActuator:
self.theme_name = theme_name self.theme_name = theme_name
self.g.config.set_key('litegui_theme',theme_name) self.g.config.set_key('litegui_theme',theme_name)
self.load_theme() self.load_theme()
def set_configured_exchange(self, set_exchange): def set_configured_exchange(self, set_exchange):
use_exchange = self.g.config.get('use_exchange') use_exchange = self.g.config.get('use_exchange')
if use_exchange is not None: if use_exchange is not None:
set_exchange(use_exchange) set_exchange(use_exchange)
def set_configured_currency(self, set_quote_currency): def set_configured_currency(self, set_quote_currency):
"""Set the inital fiat currency conversion country (USD/EUR/GBP) in """Set the inital fiat currency conversion country (USD/EUR/GBP) in
the GUI to what it was set to in the wallet.""" the GUI to what it was set to in the wallet."""
currency = self.g.config.get('currency') currency = self.g.config.get('currency')
# currency can be none when Electrum is used for the first # currency can be none when Electrum is used for the first
@ -694,7 +694,7 @@ class MiniActuator:
dest_address = self.fetch_destination(address) dest_address = self.fetch_destination(address)
if dest_address is None or not is_valid(dest_address): if dest_address is None or not is_valid(dest_address):
QMessageBox.warning(parent_window, _('Error'), QMessageBox.warning(parent_window, _('Error'),
_('Invalid Bitcoin Address') + ':\n' + address, _('OK')) _('Invalid Bitcoin Address') + ':\n' + address, _('OK'))
return False return False
@ -726,7 +726,7 @@ class MiniActuator:
h = self.g.wallet.send_tx(tx) h = self.g.wallet.send_tx(tx)
self.waiting_dialog(lambda: False if self.g.wallet.tx_event.isSet() else _("Sending transaction, please wait...")) self.waiting_dialog(lambda: False if self.g.wallet.tx_event.isSet() else _("Sending transaction, please wait..."))
status, message = self.g.wallet.receive_tx(h, tx) status, message = self.g.wallet.receive_tx(h, tx)
if not status: if not status:
@ -737,7 +737,7 @@ class MiniActuator:
print "Dumped error tx to", dumpf.name print "Dumped error tx to", dumpf.name
QMessageBox.warning(parent_window, _('Error'), message, _('OK')) QMessageBox.warning(parent_window, _('Error'), message, _('OK'))
return False return False
TransactionWindow(message, self) TransactionWindow(message, self)
else: else:
filename = 'unsigned_tx_%s' % (time.mktime(time.gmtime())) filename = 'unsigned_tx_%s' % (time.mktime(time.gmtime()))
@ -760,10 +760,10 @@ class MiniActuator:
# label or alias, with address in brackets # label or alias, with address in brackets
match2 = re.match("(.*?)\s*\<([1-9A-HJ-NP-Za-km-z]{26,})\>", match2 = re.match("(.*?)\s*\<([1-9A-HJ-NP-Za-km-z]{26,})\>",
recipient) recipient)
if match1: if match1:
dest_address = \ dest_address = \
self.g.wallet.get_alias(recipient, True, self.g.wallet.get_alias(recipient, True,
self.show_message, self.question) self.show_message, self.question)
return dest_address return dest_address
elif match2: elif match2:
@ -772,7 +772,7 @@ class MiniActuator:
return recipient return recipient
class MiniDriver(QObject): class MiniDriver(QObject):
@ -872,4 +872,3 @@ if __name__ == "__main__":
app.setStyleSheet(style_file.read()) app.setStyleSheet(style_file.read())
mini = MiniWindow() mini = MiniWindow()
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@ -762,7 +762,7 @@ class ElectrumWindow(QMainWindow):
if not message and not amount: if not message and not amount:
QMessageBox.warning(self, _('Error'), _('No message or amount'), _('OK')) QMessageBox.warning(self, _('Error'), _('No message or amount'), _('OK'))
return return
self.receive_requests = self.wallet.storage.get('receive_requests',{}) self.receive_requests = self.wallet.storage.get('receive_requests',{})
self.receive_requests[addr] = (amount, message) self.receive_requests[addr] = (amount, message)
self.wallet.storage.put('receive_requests', self.receive_requests) self.wallet.storage.put('receive_requests', self.receive_requests)
self.update_receive_tab() self.update_receive_tab()
@ -784,7 +784,7 @@ class ElectrumWindow(QMainWindow):
self.receive_amount_e.setAmount(None) self.receive_amount_e.setAmount(None)
def clear_receive_tab(self): def clear_receive_tab(self):
self.receive_requests = self.wallet.storage.get('receive_requests',{}) self.receive_requests = self.wallet.storage.get('receive_requests',{})
domain = self.wallet.get_account_addresses(self.current_account, include_change=False) domain = self.wallet.get_account_addresses(self.current_account, include_change=False)
for addr in domain: for addr in domain:
if not self.wallet.history.get(addr) and addr not in self.receive_requests.keys(): if not self.wallet.history.get(addr) and addr not in self.receive_requests.keys():
@ -818,7 +818,7 @@ class ElectrumWindow(QMainWindow):
self.receive_address_e.setText(addr) self.receive_address_e.setText(addr)
def update_receive_tab(self): def update_receive_tab(self):
self.receive_requests = self.wallet.storage.get('receive_requests',{}) self.receive_requests = self.wallet.storage.get('receive_requests',{})
b = len(self.receive_requests) > 0 b = len(self.receive_requests) > 0
self.receive_list.setVisible(b) self.receive_list.setVisible(b)
self.receive_requests_label.setVisible(b) self.receive_requests_label.setVisible(b)
@ -1566,7 +1566,7 @@ class ElectrumWindow(QMainWindow):
self.payment_request_ok() self.payment_request_ok()
else: else:
self.payment_request_error() self.payment_request_error()
def create_invoice_menu(self, position): def create_invoice_menu(self, position):
item = self.invoices_list.itemAt(position) item = self.invoices_list.itemAt(position)
@ -1616,11 +1616,11 @@ class ElectrumWindow(QMainWindow):
name = _("Receiving") if not is_change else _("Change") name = _("Receiving") if not is_change else _("Change")
seq_item = QTreeWidgetItem( [ name, '', '', '', ''] ) seq_item = QTreeWidgetItem( [ name, '', '', '', ''] )
account_item.addChild(seq_item) account_item.addChild(seq_item)
if not is_change: if not is_change:
seq_item.setExpanded(True) seq_item.setExpanded(True)
else: else:
seq_item = account_item seq_item = account_item
used_item = QTreeWidgetItem( [ _("Used"), '', '', '', ''] ) used_item = QTreeWidgetItem( [ _("Used"), '', '', '', ''] )
used_flag = False used_flag = False
@ -1874,7 +1874,7 @@ class ElectrumWindow(QMainWindow):
def show_qrcode(self, data, title = _("QR code")): def show_qrcode(self, data, title = _("QR code")):
if not data: if not data:
return return
d = QRDialog(data, self, title) d = QRDialog(data, self, title)
d.exec_() d.exec_()
@ -2267,8 +2267,8 @@ class ElectrumWindow(QMainWindow):
d.setMinimumSize(850, 300) d.setMinimumSize(850, 300)
vbox = QVBoxLayout(d) vbox = QVBoxLayout(d)
msg = "%s\n%s\n%s" % (_("WARNING: ALL your private keys are secret."), msg = "%s\n%s\n%s" % (_("WARNING: ALL your private keys are secret."),
_("Exposing a single private key can compromise your entire wallet!"), _("Exposing a single private key can compromise your entire wallet!"),
_("In particular, DO NOT use 'redeem private key' services proposed by third parties.")) _("In particular, DO NOT use 'redeem private key' services proposed by third parties."))
vbox.addWidget(QLabel(msg)) vbox.addWidget(QLabel(msg))
@ -2291,7 +2291,7 @@ class ElectrumWindow(QMainWindow):
def privkeys_thread(): def privkeys_thread():
for addr in addresses: for addr in addresses:
time.sleep(0.1) time.sleep(0.1)
if done: if done:
break break
private_keys[addr] = "\n".join(self.wallet.get_private_key(addr, password)) private_keys[addr] = "\n".join(self.wallet.get_private_key(addr, password))
d.emit(SIGNAL('computing_privkeys')) d.emit(SIGNAL('computing_privkeys'))
@ -2641,7 +2641,7 @@ class ElectrumWindow(QMainWindow):
on_video_device = lambda x: self.config.set_key("video_device", str(qr_combo.itemData(x).toString()), True) on_video_device = lambda x: self.config.set_key("video_device", str(qr_combo.itemData(x).toString()), True)
qr_combo.currentIndexChanged.connect(on_video_device) qr_combo.currentIndexChanged.connect(on_video_device)
widgets.append((qr_label, qr_combo, qr_help)) widgets.append((qr_label, qr_combo, qr_help))
usechange_cb = QCheckBox(_('Use change addresses')) usechange_cb = QCheckBox(_('Use change addresses'))
usechange_cb.setChecked(self.wallet.use_change) usechange_cb.setChecked(self.wallet.use_change)
usechange_help = HelpButton(_('Using change addresses makes it more difficult for other people to track your transactions.')) usechange_help = HelpButton(_('Using change addresses makes it more difficult for other people to track your transactions.'))
@ -2671,7 +2671,7 @@ class ElectrumWindow(QMainWindow):
for a,b,c in widgets: for a,b,c in widgets:
i = grid.rowCount() i = grid.rowCount()
if b: if b:
grid.addWidget(a, i, 0) grid.addWidget(a, i, 0)
grid.addWidget(b, i, 1) grid.addWidget(b, i, 1)
else: else:

View File

@ -56,7 +56,7 @@ class NetworkDialog(QDialog):
else: else:
status = _("Not connected") status = _("Not connected")
if network.is_connected(): if network.is_connected():
status += "\n" + _("Server") + ": %s"%(host) status += "\n" + _("Server") + ": %s"%(host)
else: else:
status += "\n" + _("Disconnected from server") status += "\n" + _("Disconnected from server")
else: else:
@ -117,14 +117,14 @@ class NetworkDialog(QDialog):
self.change_server(host, protocol) self.change_server(host, protocol)
self.set_protocol(protocol) self.set_protocol(protocol)
self.servers_list_widget.connect(self.servers_list_widget, self.servers_list_widget.connect(self.servers_list_widget,
SIGNAL('currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)'), SIGNAL('currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)'),
lambda x,y: self.server_changed(x)) lambda x,y: self.server_changed(x))
grid.addWidget(self.servers_list_widget, 1, 1, 1, 3) grid.addWidget(self.servers_list_widget, 1, 1, 1, 3)
if not config.is_modifiable('server'): if not config.is_modifiable('server'):
for w in [self.server_host, self.server_port, self.server_protocol, self.servers_list_widget]: w.setEnabled(False) for w in [self.server_host, self.server_port, self.server_protocol, self.servers_list_widget]: w.setEnabled(False)
def enable_set_server(): def enable_set_server():
enabled = not self.autocycle_cb.isChecked() enabled = not self.autocycle_cb.isChecked()
self.server_host.setEnabled(enabled) self.server_host.setEnabled(enabled)
@ -167,7 +167,7 @@ class NetworkDialog(QDialog):
# buttons # buttons
vbox.addLayout(ok_cancel_buttons(self)) vbox.addLayout(ok_cancel_buttons(self))
self.setLayout(vbox) self.setLayout(vbox)
def init_servers_list(self): def init_servers_list(self):
@ -182,7 +182,7 @@ class NetworkDialog(QDialog):
if protocol != self.protocol: if protocol != self.protocol:
self.protocol = protocol self.protocol = protocol
self.init_servers_list() self.init_servers_list()
def change_protocol(self, index): def change_protocol(self, index):
p = protocol_letters[index] p = protocol_letters[index]
host = unicode(self.server_host.text()) host = unicode(self.server_host.text())
@ -195,7 +195,7 @@ class NetworkDialog(QDialog):
self.set_protocol(p) self.set_protocol(p)
def server_changed(self, x): def server_changed(self, x):
if x: if x:
self.change_server(str(x.text(0)), self.protocol) self.change_server(str(x.text(0)), self.protocol)
def change_server(self, host, protocol): def change_server(self, host, protocol):
@ -204,7 +204,7 @@ class NetworkDialog(QDialog):
if protocol: if protocol:
port = pp.get(protocol) port = pp.get(protocol)
if not port: protocol = None if not port: protocol = None
if not protocol: if not protocol:
if 's' in pp.keys(): if 's' in pp.keys():
protocol = 's' protocol = 's'
@ -212,7 +212,7 @@ class NetworkDialog(QDialog):
else: else:
protocol = pp.keys()[0] protocol = pp.keys()[0]
port = pp.get(protocol) port = pp.get(protocol)
self.server_host.setText( host ) self.server_host.setText( host )
self.server_port.setText( port ) self.server_port.setText( port )
self.server_protocol.setCurrentIndex(protocol_letters.index(protocol)) self.server_protocol.setCurrentIndex(protocol_letters.index(protocol))
@ -237,8 +237,8 @@ class NetworkDialog(QDialog):
protocol = protocol_letters[self.server_protocol.currentIndex()] protocol = protocol_letters[self.server_protocol.currentIndex()]
if self.proxy_mode.currentText() != 'NONE': if self.proxy_mode.currentText() != 'NONE':
proxy = { 'mode':str(self.proxy_mode.currentText()).lower(), proxy = { 'mode':str(self.proxy_mode.currentText()).lower(),
'host':str(self.proxy_host.text()), 'host':str(self.proxy_host.text()),
'port':str(self.proxy_port.text()) } 'port':str(self.proxy_port.text()) }
else: else:
proxy = None proxy = None

View File

@ -33,7 +33,7 @@ def make_password_dialog(self, wallet, msg, new_pass=True):
self.new_pw.setEchoMode(2) self.new_pw.setEchoMode(2)
self.conf_pw = QLineEdit() self.conf_pw = QLineEdit()
self.conf_pw.setEchoMode(2) self.conf_pw.setEchoMode(2)
vbox = QVBoxLayout() vbox = QVBoxLayout()
label = QLabel(msg) label = QLabel(msg)
label.setWordWrap(True) label.setWordWrap(True)
@ -56,7 +56,7 @@ def make_password_dialog(self, wallet, msg, new_pass=True):
grid.setSpacing(8) grid.setSpacing(8)
grid.setColumnMinimumWidth(0, 250) grid.setColumnMinimumWidth(0, 250)
grid.setColumnStretch(1,1) grid.setColumnStretch(1,1)
if wallet and wallet.use_encryption: if wallet and wallet.use_encryption:
grid.addWidget(QLabel(_('Password')), 0, 0) grid.addWidget(QLabel(_('Password')), 0, 0)
grid.addWidget(self.pw, 0, 1) grid.addWidget(self.pw, 0, 1)
@ -79,7 +79,7 @@ def make_password_dialog(self, wallet, msg, new_pass=True):
def run_password_dialog(self, wallet, parent): def run_password_dialog(self, wallet, parent):
if wallet and wallet.is_watching_only(): if wallet and wallet.is_watching_only():
QMessageBox.information(parent, _('Error'), _('This is a watching-only wallet'), _('OK')) QMessageBox.information(parent, _('Error'), _('This is a watching-only wallet'), _('OK'))
return False, None, None return False, None, None
@ -173,7 +173,3 @@ class PasswordDialog(QDialog):
QMessageBox.information(self.parent, _('Success'), _('Password was updated successfully'), _('OK')) QMessageBox.information(self.parent, _('Success'), _('Password was updated successfully'), _('OK'))
else: else:
QMessageBox.information(self.parent, _('Success'), _('This wallet is not encrypted'), _('OK')) QMessageBox.information(self.parent, _('Success'), _('This wallet is not encrypted'), _('OK'))

View File

@ -122,7 +122,7 @@ class PayToEdit(QRTextEdit):
except: except:
self.errors.append((i, line.strip())) self.errors.append((i, line.strip()))
continue continue
outputs.append((type, to_address, amount)) outputs.append((type, to_address, amount))
total += amount total += amount
@ -189,7 +189,7 @@ class PayToEdit(QRTextEdit):
tc.movePosition(QTextCursor.EndOfWord) tc.movePosition(QTextCursor.EndOfWord)
tc.insertText(completion.right(extra)) tc.insertText(completion.right(extra))
self.setTextCursor(tc) self.setTextCursor(tc)
def textUnderCursor(self): def textUnderCursor(self):
tc = self.textCursor() tc = self.textCursor()
@ -235,4 +235,3 @@ class PayToEdit(QRTextEdit):
cr = self.cursorRect() cr = self.cursorRect()
cr.setWidth(self.c.popup().sizeHintForColumn(0) + self.c.popup().verticalScrollBar().sizeHint().width()) cr.setWidth(self.c.popup().sizeHintForColumn(0) + self.c.popup().verticalScrollBar().sizeHint().width())
self.c.complete(cr) self.c.complete(cr)

View File

@ -36,7 +36,7 @@ class QRCodeWidget(QWidget):
self.qr = None self.qr = None
self.update() self.update()
def paintEvent(self, e): def paintEvent(self, e):
if not self.data: if not self.data:
@ -83,7 +83,7 @@ class QRCodeWidget(QWidget):
qp.setPen(white) qp.setPen(white)
qp.drawRect(left+c*boxsize, top+r*boxsize, boxsize, boxsize) qp.drawRect(left+c*boxsize, top+r*boxsize, boxsize, boxsize)
qp.end() qp.end()
class QRDialog(QDialog): class QRDialog(QDialog):
@ -132,4 +132,3 @@ class QRDialog(QDialog):
vbox.addLayout(hbox) vbox.addLayout(hbox)
d.setLayout(vbox) d.setLayout(vbox)

View File

@ -51,7 +51,7 @@ class QR_Window(QWidget):
self.setFocusPolicy(QtCore.Qt.NoFocus) self.setFocusPolicy(QtCore.Qt.NoFocus)
main_box = QHBoxLayout() main_box = QHBoxLayout()
self.qrw = QRCodeWidget() self.qrw = QRCodeWidget()
main_box.addWidget(self.qrw, 1) main_box.addWidget(self.qrw, 1)
@ -84,7 +84,3 @@ class QR_Window(QWidget):
label_text = "<span style='font-size: 21pt'>%s</span>" % message if message else "" label_text = "<span style='font-size: 21pt'>%s</span>" % message if message else ""
self.label_label.setText(label_text) self.label_label.setText(label_text)
self.qrw.setData(url) self.qrw.setData(url)

View File

@ -22,7 +22,7 @@ class ReceivingWidget(QTreeWidget):
self.editing = False self.editing = False
def update_label(self, item, column): def update_label(self, item, column):
if self.editing: if self.editing:
return return
else: else:
address = str(item.text(0)) address = str(item.text(0))
@ -32,7 +32,7 @@ class ReceivingWidget(QTreeWidget):
def copy_address(self): def copy_address(self):
address = self.currentItem().text(0) address = self.currentItem().text(0)
qApp.clipboard().setText(address) qApp.clipboard().setText(address)
def update_list(self): def update_list(self):
return return

View File

@ -40,18 +40,18 @@ class SeedDialog(QDialog):
def icon_filename(sid): def icon_filename(sid):
if sid == 'cold': if sid == 'cold':
return ":icons/cold_seed.png" return ":icons/cold_seed.png"
elif sid == 'hot': elif sid == 'hot':
return ":icons/hot_seed.png" return ":icons/hot_seed.png"
else: else:
return ":icons/seed.png" return ":icons/seed.png"
def show_seed_box(seed, sid=None): def show_seed_box(seed, sid=None):
save_msg = _("Please save these %d words on paper (order is important).")%len(seed.split()) + " " save_msg = _("Please save these %d words on paper (order is important).")%len(seed.split()) + " "
qr_msg = _("Your seed is also displayed as QR code, in case you want to transfer it to a mobile phone.") + "<p>" qr_msg = _("Your seed is also displayed as QR code, in case you want to transfer it to a mobile phone.") + "<p>"
warning_msg = "<b>"+_("WARNING")+":</b> " + _("Never disclose your seed. Never type it on a website.") + "</b><p>" warning_msg = "<b>"+_("WARNING")+":</b> " + _("Never disclose your seed. Never type it on a website.") + "</b><p>"
@ -60,12 +60,12 @@ def show_seed_box(seed, sid=None):
msg2 = save_msg + " " \ msg2 = save_msg + " " \
+ _("This seed will allow you to recover your wallet in case of computer failure.") + "<br/>" \ + _("This seed will allow you to recover your wallet in case of computer failure.") + "<br/>" \
+ warning_msg + warning_msg
elif sid == 'cold': elif sid == 'cold':
msg = _("Your cold storage seed is") msg = _("Your cold storage seed is")
msg2 = save_msg + " " \ msg2 = save_msg + " " \
+ _("This seed will be permanently deleted from your wallet file. Make sure you have saved it before you press 'next'") + " " \ + _("This seed will be permanently deleted from your wallet file. Make sure you have saved it before you press 'next'") + " " \
elif sid == 'hot': elif sid == 'hot':
msg = _("Your hot seed is") msg = _("Your hot seed is")
msg2 = save_msg + " " \ msg2 = save_msg + " " \
@ -92,7 +92,7 @@ def show_seed_box(seed, sid=None):
vbox.addLayout(grid) vbox.addLayout(grid)
vbox.addWidget(label2) vbox.addWidget(label2)
vbox.addStretch(1) vbox.addStretch(1)
return vbox return vbox

View File

@ -45,7 +45,7 @@ class TxDialog(QDialog):
tx_dict = tx.as_dict() tx_dict = tx.as_dict()
self.parent = parent self.parent = parent
self.wallet = parent.wallet self.wallet = parent.wallet
QDialog.__init__(self) QDialog.__init__(self)
self.setMinimumWidth(600) self.setMinimumWidth(600)
self.setWindowTitle(_("Transaction")) self.setWindowTitle(_("Transaction"))
@ -102,7 +102,7 @@ class TxDialog(QDialog):
buttons.insertWidget(1,b) buttons.insertWidget(1,b)
run_hook('transaction_dialog', self) run_hook('transaction_dialog', self)
self.update() self.update()
@ -175,9 +175,9 @@ class TxDialog(QDialog):
if not self.wallet.up_to_date: if not self.wallet.up_to_date:
return return
if is_relevant: if is_relevant:
if is_mine: if is_mine:
if fee is not None: if fee is not None:
self.amount_label.setText(_("Amount sent:")+' %s'% self.parent.format_amount(v-fee) + ' ' + self.parent.base_unit()) self.amount_label.setText(_("Amount sent:")+' %s'% self.parent.format_amount(v-fee) + ' ' + self.parent.base_unit())
self.fee_label.setText(_("Transaction fee")+': %s'% self.parent.format_amount(fee) + ' ' + self.parent.base_unit()) self.fee_label.setText(_("Transaction fee")+': %s'% self.parent.format_amount(fee) + ' ' + self.parent.base_unit())
else: else:
@ -219,11 +219,7 @@ class TxDialog(QDialog):
o_text.setMaximumHeight(100) o_text.setMaximumHeight(100)
vbox.addWidget(o_text) vbox.addWidget(o_text)
def show_message(self, msg): def show_message(self, msg):
QMessageBox.information(self, _('Message'), msg, _('OK')) QMessageBox.information(self, _('Message'), msg, _('OK'))

View File

@ -182,7 +182,7 @@ def filename_field(parent, config, defaultname, select_msg):
b2.setText(_("json")) b2.setText(_("json"))
vbox.addWidget(b1) vbox.addWidget(b1)
vbox.addWidget(b2) vbox.addWidget(b2)
hbox = QHBoxLayout() hbox = QHBoxLayout()
directory = config.get('io_dir', unicode(os.path.expanduser('~'))) directory = config.get('io_dir', unicode(os.path.expanduser('~')))

View File

@ -30,7 +30,7 @@ class VersionGetter(threading.Thread):
def __init__(self, label): def __init__(self, label):
threading.Thread.__init__(self) threading.Thread.__init__(self)
self.label = label self.label = label
def run(self): def run(self):
try: try:
con = httplib.HTTPConnection('electrum.org', 80, timeout=5) con = httplib.HTTPConnection('electrum.org', 80, timeout=5)
@ -39,7 +39,7 @@ class VersionGetter(threading.Thread):
except socket.error as msg: except socket.error as msg:
print_error("Could not retrieve version information") print_error("Could not retrieve version information")
return return
if res.status == 200: if res.status == 200:
latest_version = res.read() latest_version = res.read()
latest_version = latest_version.replace("\n","") latest_version = latest_version.replace("\n","")
@ -88,7 +88,7 @@ class UpdateLabel(QLabel):
self.config.set_key("last_seen_version", "9.9.9", True) self.config.set_key("last_seen_version", "9.9.9", True)
QMessageBox.information(self, _("Preference saved"), _("No more notifications about version updates will be shown.")) QMessageBox.information(self, _("Preference saved"), _("No more notifications about version updates will be shown."))
self.dialog.done(0) self.dialog.done(0)
def open_website(self): def open_website(self):
webbrowser.open("http://electrum.org/download.html") webbrowser.open("http://electrum.org/download.html")
self.dialog.done(0) self.dialog.done(0)
@ -100,7 +100,7 @@ class UpdateLabel(QLabel):
main_layout = QGridLayout() main_layout = QGridLayout()
main_layout.addWidget(QLabel(_("A new version of Electrum is available:")+" " + self.latest_version), 0,0,1,3) main_layout.addWidget(QLabel(_("A new version of Electrum is available:")+" " + self.latest_version), 0,0,1,3)
ignore_version = QPushButton(_("Ignore this version")) ignore_version = QPushButton(_("Ignore this version"))
ignore_version.clicked.connect(self.ignore_this_version) ignore_version.clicked.connect(self.ignore_this_version)
@ -117,7 +117,5 @@ class UpdateLabel(QLabel):
dialog.setLayout(main_layout) dialog.setLayout(main_layout)
self.dialog = dialog self.dialog = dialog
if not dialog.exec_(): return if not dialog.exec_(): return

View File

@ -224,7 +224,7 @@ class OldAccount(Account):
pk = number_to_string( secexp, generator_secp256k1.order() ) pk = number_to_string( secexp, generator_secp256k1.order() )
compressed = False compressed = False
return SecretToASecret( pk, compressed ) return SecretToASecret( pk, compressed )
def get_private_key(self, sequence, wallet, password): def get_private_key(self, sequence, wallet, password):
seed = wallet.get_seed(password) seed = wallet.get_seed(password)
@ -417,7 +417,3 @@ class BIP32_Account_2of3(BIP32_Account_2of2):
def get_type(self): def get_type(self):
return _('Multisig 2 of 3') return _('Multisig 2 of 3')

View File

@ -36,7 +36,7 @@ class Blockchain(threading.Thread):
self.set_local_height() self.set_local_height()
self.queue = Queue.Queue() self.queue = Queue.Queue()
def height(self): def height(self):
return self.local_height return self.local_height
@ -68,7 +68,7 @@ class Blockchain(threading.Thread):
i, header = result i, header = result
if not header: continue if not header: continue
height = header.get('block_height') height = header.get('block_height')
if height <= self.local_height: if height <= self.local_height:
@ -83,10 +83,10 @@ class Blockchain(threading.Thread):
chain = self.get_chain( i, header ) chain = self.get_chain( i, header )
# skip that server if the result is not consistent # skip that server if the result is not consistent
if not chain: if not chain:
print_error('e') print_error('e')
continue continue
# verify the chain # verify the chain
if self.verify_chain( chain ): if self.verify_chain( chain ):
print_error("height:", height, i.server) print_error("height:", height, i.server)
@ -101,13 +101,13 @@ class Blockchain(threading.Thread):
self.network.new_blockchain_height(height, i) self.network.new_blockchain_height(height, i)
def verify_chain(self, chain): def verify_chain(self, chain):
first_header = chain[0] first_header = chain[0]
prev_header = self.read_header(first_header.get('block_height') -1) prev_header = self.read_header(first_header.get('block_height') -1)
for header in chain: for header in chain:
height = header.get('block_height') height = header.get('block_height')
@ -133,7 +133,7 @@ class Blockchain(threading.Thread):
height = index*2016 height = index*2016
num = len(data)/80 num = len(data)/80
if index == 0: if index == 0:
previous_hash = ("0"*64) previous_hash = ("0"*64)
else: else:
prev_header = self.read_header(index*2016-1) prev_header = self.read_header(index*2016-1)
@ -152,12 +152,12 @@ class Blockchain(threading.Thread):
assert int('0x'+_hash,16) < target assert int('0x'+_hash,16) < target
previous_header = header previous_header = header
previous_hash = _hash previous_hash = _hash
self.save_chunk(index, data) self.save_chunk(index, data)
print_error("validated chunk %d"%height) print_error("validated chunk %d"%height)
def header_to_string(self, res): def header_to_string(self, res):
s = int_to_hex(res.get('version'),4) \ s = int_to_hex(res.get('version'),4) \
@ -190,7 +190,7 @@ class Blockchain(threading.Thread):
filename = self.path() filename = self.path()
if os.path.exists(filename): if os.path.exists(filename):
return return
try: try:
import urllib, socket import urllib, socket
socket.setdefaulttimeout(30) socket.setdefaulttimeout(30)
@ -238,7 +238,7 @@ class Blockchain(threading.Thread):
f.close() f.close()
if len(h) == 80: if len(h) == 80:
h = self.header_from_string(h) h = self.header_from_string(h)
return h return h
def get_target(self, index, chain=None): def get_target(self, index, chain=None):
@ -254,13 +254,13 @@ class Blockchain(threading.Thread):
for h in chain: for h in chain:
if h.get('block_height') == index*2016-1: if h.get('block_height') == index*2016-1:
last = h last = h
nActualTimespan = last.get('timestamp') - first.get('timestamp') nActualTimespan = last.get('timestamp') - first.get('timestamp')
nTargetTimespan = 14*24*60*60 nTargetTimespan = 14*24*60*60
nActualTimespan = max(nActualTimespan, nTargetTimespan/4) nActualTimespan = max(nActualTimespan, nTargetTimespan/4)
nActualTimespan = min(nActualTimespan, nTargetTimespan*4) nActualTimespan = min(nActualTimespan, nTargetTimespan*4)
bits = last.get('bits') bits = last.get('bits')
# convert to bignum # convert to bignum
MM = 256*256*256 MM = 256*256*256
a = bits%MM a = bits%MM
@ -270,7 +270,7 @@ class Blockchain(threading.Thread):
# new target # new target
new_target = min( max_target, (target * nActualTimespan)/nTargetTimespan ) new_target = min( max_target, (target * nActualTimespan)/nTargetTimespan )
# convert it to bits # convert it to bits
c = ("%064X"%new_target)[2:] c = ("%064X"%new_target)[2:]
i = 31 i = 31
@ -279,7 +279,7 @@ class Blockchain(threading.Thread):
i -= 1 i -= 1
c = int('0x'+c[0:6],16) c = int('0x'+c[0:6],16)
if c >= 0x800000: if c >= 0x800000:
c /= 256 c /= 256
i += 1 i += 1
@ -357,4 +357,3 @@ class Blockchain(threading.Thread):
return False return False
return True return True

View File

@ -23,7 +23,7 @@ bmp.py - module for constructing simple BMP graphics files
""" """
__version__ = "0.3" __version__ = "0.3"
__about = "bmp module, version %s, written by Paul McGuire, October, 2003, updated by Margus Laak, September, 2009" % __version__ __about = "bmp module, version %s, written by Paul McGuire, October, 2003, updated by Margus Laak, September, 2009" % __version__
from math import ceil, hypot from math import ceil, hypot
@ -51,7 +51,7 @@ class Color(object):
"""class for specifying colors while drawing BitMap elements""" """class for specifying colors while drawing BitMap elements"""
__slots__ = [ 'red', 'grn', 'blu' ] __slots__ = [ 'red', 'grn', 'blu' ]
__shade = 32 __shade = 32
def __init__( self, r=0, g=0, b=0 ): def __init__( self, r=0, g=0, b=0 ):
self.red = r self.red = r
self.grn = g self.grn = g
@ -65,32 +65,32 @@ class Color(object):
def __str__( self ): def __str__( self ):
return "R:%d G:%d B:%d" % (self.red, self.grn, self.blu ) return "R:%d G:%d B:%d" % (self.red, self.grn, self.blu )
def __hash__( self ): def __hash__( self ):
return ( ( long(self.blu) ) + return ( ( long(self.blu) ) +
( long(self.grn) << 8 ) + ( long(self.grn) << 8 ) +
( long(self.red) << 16 ) ) ( long(self.red) << 16 ) )
def __eq__( self, other ): def __eq__( self, other ):
return (self is other) or (self.toLong == other.toLong) return (self is other) or (self.toLong == other.toLong)
def lighten( self ): def lighten( self ):
return Color( return Color(
min( self.red + Color.__shade, 255), min( self.red + Color.__shade, 255),
min( self.grn + Color.__shade, 255), min( self.grn + Color.__shade, 255),
min( self.blu + Color.__shade, 255) min( self.blu + Color.__shade, 255)
) )
def darken( self ): def darken( self ):
return Color( return Color(
max( self.red - Color.__shade, 0), max( self.red - Color.__shade, 0),
max( self.grn - Color.__shade, 0), max( self.grn - Color.__shade, 0),
max( self.blu - Color.__shade, 0) max( self.blu - Color.__shade, 0)
) )
def toLong( self ): def toLong( self ):
return self.__hash__() return self.__hash__()
def fromLong( l ): def fromLong( l ):
b = l & 0xff b = l & 0xff
l = l >> 8 l = l >> 8
@ -120,7 +120,7 @@ Color.GRAY = Color( 128, 128, 128 )
class BitMap(object): class BitMap(object):
"""class for drawing and saving simple Windows bitmap files""" """class for drawing and saving simple Windows bitmap files"""
LINE_SOLID = 0 LINE_SOLID = 0
LINE_DASHED = 1 LINE_DASHED = 1
LINE_DOTTED = 2 LINE_DOTTED = 2
@ -128,8 +128,8 @@ class BitMap(object):
_DASH_LEN = 12.0 _DASH_LEN = 12.0
_DOT_LEN = 6.0 _DOT_LEN = 6.0
_DOT_DASH_LEN = _DOT_LEN + _DASH_LEN _DOT_DASH_LEN = _DOT_LEN + _DASH_LEN
def __init__( self, width, height, def __init__( self, width, height,
bkgd = Color.WHITE, frgd = Color.BLACK ): bkgd = Color.WHITE, frgd = Color.BLACK ):
self.wd = int( ceil(width) ) self.wd = int( ceil(width) )
self.ht = int( ceil(height) ) self.ht = int( ceil(height) )
@ -143,18 +143,18 @@ class BitMap(object):
tmparray = [ self.bgcolor ] * self.wd tmparray = [ self.bgcolor ] * self.wd
self.bitarray = [ tmparray[:] for i in range( self.ht ) ] self.bitarray = [ tmparray[:] for i in range( self.ht ) ]
self.currentPen = 1 self.currentPen = 1
def plotPoint( self, x, y ): def plotPoint( self, x, y ):
if ( 0 <= x < self.wd and 0 <= y < self.ht ): if ( 0 <= x < self.wd and 0 <= y < self.ht ):
x = int(x) x = int(x)
y = int(y) y = int(y)
self.bitarray[y][x] = self.currentPen self.bitarray[y][x] = self.currentPen
def _saveBitMapNoCompression( self ): def _saveBitMapNoCompression( self ):
line_padding = (4 - (self.wd % 4)) % 4 line_padding = (4 - (self.wd % 4)) % 4
# write bitmap header # write bitmap header
_bitmap = "BM" _bitmap = "BM"
_bitmap += longToString( 54 + self.ht*(self.wd*3 + line_padding) ) # DWORD size in bytes of the file _bitmap += longToString( 54 + self.ht*(self.wd*3 + line_padding) ) # DWORD size in bytes of the file
@ -183,15 +183,15 @@ class BitMap(object):
return _bitmap return _bitmap
def saveFile( self, filename): def saveFile( self, filename):
_b = self._saveBitMapNoCompression( ) _b = self._saveBitMapNoCompression( )
f = file(filename, 'wb') f = file(filename, 'wb')
f.write(_b) f.write(_b)
f.close() f.close()
def save_qrcode(qr, filename): def save_qrcode(qr, filename):
matrix = qr.get_matrix() matrix = qr.get_matrix()
@ -211,12 +211,11 @@ def save_qrcode(qr, filename):
bitmap.saveFile( filename ) bitmap.saveFile( filename )
if __name__ == "__main__": if __name__ == "__main__":
bmp = BitMap( 10, 10 ) bmp = BitMap( 10, 10 )
bmp.plotPoint( 5, 5 ) bmp.plotPoint( 5, 5 )
bmp.plotPoint( 0, 0 ) bmp.plotPoint( 0, 0 )
bmp.saveFile( "test.bmp" ) bmp.saveFile( "test.bmp" )

View File

@ -33,8 +33,8 @@ def _(x):
def set_language(x): def set_language(x):
global language global language
if x: language = gettext.translation('electrum', LOCALE_DIR, fallback = True, languages=[x]) if x: language = gettext.translation('electrum', LOCALE_DIR, fallback = True, languages=[x])
languages = { languages = {
'':_('Default'), '':_('Default'),
'pt_PT':_('Portuguese'), 'pt_PT':_('Portuguese'),

View File

@ -252,7 +252,7 @@ class TcpInterface(threading.Thread):
os.rename(temporary_path, cert_path) os.rename(temporary_path, cert_path)
return s return s
def send_request(self, request, queue=None): def send_request(self, request, queue=None):
_id = request.get('id') _id = request.get('id')
@ -273,7 +273,7 @@ class TcpInterface(threading.Thread):
def parse_proxy_options(self, s): def parse_proxy_options(self, s):
if type(s) == type({}): return s # fixme: type should be fixed if type(s) == type({}): return s # fixme: type should be fixed
if type(s) != type(""): return None if type(s) != type(""): return None
if s.lower() == 'none': return None if s.lower() == 'none': return None
proxy = { "mode":"socks5", "host":"localhost" } proxy = { "mode":"socks5", "host":"localhost" }
args = s.split(':') args = s.split(':')
@ -355,7 +355,7 @@ class HttpInterface(TcpInterface):
def send_request(self, request, queue=None): def send_request(self, request, queue=None):
import urllib2, json, time, cookielib import urllib2, json, time, cookielib
print_error( "send_http", messages ) print_error( "send_http", messages )
if self.proxy: if self.proxy:
socks.setdefaultproxy(self.proxy_mode, self.proxy["host"], int(self.proxy["port"]) ) socks.setdefaultproxy(self.proxy_mode, self.proxy["host"], int(self.proxy["port"]) )
socks.wrapmodule(urllib2) socks.wrapmodule(urllib2)
@ -380,9 +380,9 @@ class HttpInterface(TcpInterface):
data_json = json.dumps(data) data_json = json.dumps(data)
else: else:
# poll with GET # poll with GET
data_json = None data_json = None
headers = {'content-type': 'application/json'} headers = {'content-type': 'application/json'}
if self.session_id: if self.session_id:
headers['cookie'] = 'SESSION=%s'%self.session_id headers['cookie'] = 'SESSION=%s'%self.session_id
@ -399,17 +399,17 @@ class HttpInterface(TcpInterface):
response = response_stream.read() response = response_stream.read()
self.bytes_received += len(response) self.bytes_received += len(response)
if response: if response:
response = json.loads( response ) response = json.loads( response )
if type(response) is not type([]): if type(response) is not type([]):
self.process_response(response) self.process_response(response)
else: else:
for item in response: for item in response:
self.process_response(item) self.process_response(item)
if response: if response:
self.poll_interval = 1 self.poll_interval = 1
else: else:
if self.poll_interval < 15: if self.poll_interval < 15:
self.poll_interval += 1 self.poll_interval += 1
#print self.poll_interval, response #print self.poll_interval, response
self.rtime = time.time() - t1 self.rtime = time.time() - t1
@ -454,7 +454,7 @@ class HttpInterface(TcpInterface):
except Exception: except Exception:
traceback.print_exc(file=sys.stdout) traceback.print_exc(file=sys.stdout)
break break
self.is_connected = False self.is_connected = False

View File

@ -3,14 +3,14 @@
def modular_sqrt(a, p): def modular_sqrt(a, p):
""" Find a quadratic residue (mod p) of 'a'. p """ Find a quadratic residue (mod p) of 'a'. p
must be an odd prime. must be an odd prime.
Solve the congruence of the form: Solve the congruence of the form:
x^2 = a (mod p) x^2 = a (mod p)
And returns x. Note that p - x is also a root. And returns x. Note that p - x is also a root.
0 is returned is no square root exists for 0 is returned is no square root exists for
these a and p. these a and p.
The Tonelli-Shanks algorithm is used (except The Tonelli-Shanks algorithm is used (except
for some simple cases in which the solution for some simple cases in which the solution
is known from an identity). This algorithm is known from an identity). This algorithm
@ -27,7 +27,7 @@ def modular_sqrt(a, p):
return p return p
elif p % 4 == 3: elif p % 4 == 3:
return pow(a, (p + 1) / 4, p) return pow(a, (p + 1) / 4, p)
# Partition p-1 to s * 2^e for an odd s (i.e. # Partition p-1 to s * 2^e for an odd s (i.e.
# reduce all the powers of 2 from p-1) # reduce all the powers of 2 from p-1)
# #
@ -36,20 +36,20 @@ def modular_sqrt(a, p):
while s % 2 == 0: while s % 2 == 0:
s /= 2 s /= 2
e += 1 e += 1
# Find some 'n' with a legendre symbol n|p = -1. # Find some 'n' with a legendre symbol n|p = -1.
# Shouldn't take long. # Shouldn't take long.
# #
n = 2 n = 2
while legendre_symbol(n, p) != -1: while legendre_symbol(n, p) != -1:
n += 1 n += 1
# Here be dragons! # Here be dragons!
# Read the paper "Square roots from 1; 24, 51, # Read the paper "Square roots from 1; 24, 51,
# 10 to Dan Shanks" by Ezra Brown for more # 10 to Dan Shanks" by Ezra Brown for more
# information # information
# #
# x is a guess of the square root that gets better # x is a guess of the square root that gets better
# with each iteration. # with each iteration.
# b is the "fudge factor" - by how much we're off # b is the "fudge factor" - by how much we're off
@ -63,7 +63,7 @@ def modular_sqrt(a, p):
b = pow(a, s, p) b = pow(a, s, p)
g = pow(n, s, p) g = pow(n, s, p)
r = e r = e
while True: while True:
t = b t = b
m = 0 m = 0
@ -71,22 +71,22 @@ def modular_sqrt(a, p):
if t == 1: if t == 1:
break break
t = pow(t, 2, p) t = pow(t, 2, p)
if m == 0: if m == 0:
return x return x
gs = pow(g, 2 ** (r - m - 1), p) gs = pow(g, 2 ** (r - m - 1), p)
g = (gs * gs) % p g = (gs * gs) % p
x = (x * gs) % p x = (x * gs) % p
b = (b * g) % p b = (b * g) % p
r = m r = m
def legendre_symbol(a, p): def legendre_symbol(a, p):
""" Compute the Legendre symbol a|p using """ Compute the Legendre symbol a|p using
Euler's criterion. p is a prime, a is Euler's criterion. p is a prime, a is
relatively prime to p (if p divides relatively prime to p (if p divides
a, then a|p = 0) a, then a|p = 0)
Returns 1 if a has a square root modulo Returns 1 if a has a square root modulo
p, -1 otherwise. p, -1 otherwise.
""" """

View File

@ -46,7 +46,7 @@ def parse_servers(result):
elif re.match("p\d*", v): elif re.match("p\d*", v):
pruning_level = v[1:] pruning_level = v[1:]
if pruning_level == '': pruning_level = '0' if pruning_level == '': pruning_level = '0'
try: try:
is_recent = float(version)>=float(PROTOCOL_VERSION) is_recent = float(version)>=float(PROTOCOL_VERSION)
except Exception: except Exception:
is_recent = False is_recent = False
@ -65,7 +65,7 @@ def filter_protocol(servers, p):
if p in protocols: if p in protocols:
l.append( ':'.join([k, protocols[p], p]) ) l.append( ':'.join([k, protocols[p], p]) )
return l return l
def pick_random_server(p='s'): def pick_random_server(p='s'):
return random.choice( filter_protocol(DEFAULT_SERVERS,p) ) return random.choice( filter_protocol(DEFAULT_SERVERS,p) )
@ -115,7 +115,7 @@ class Network(threading.Thread):
os.mkdir(dir_path) os.mkdir(dir_path)
# address subscriptions and cached results # address subscriptions and cached results
self.addresses = {} self.addresses = {}
self.connection_status = 'connecting' self.connection_status = 'connecting'
self.requests_queue = Queue.Queue() self.requests_queue = Queue.Queue()
@ -169,10 +169,10 @@ class Network(threading.Thread):
continue continue
else: else:
choice_list.append(s) choice_list.append(s)
if not choice_list: if not choice_list:
return return
server = random.choice( choice_list ) server = random.choice( choice_list )
return server return server
@ -187,7 +187,7 @@ class Network(threading.Thread):
def get_servers(self): def get_servers(self):
if self.irc_servers: if self.irc_servers:
out = self.irc_servers out = self.irc_servers
else: else:
out = DEFAULT_SERVERS out = DEFAULT_SERVERS
for s in self.recent_servers: for s in self.recent_servers:
@ -213,7 +213,7 @@ class Network(threading.Thread):
self.interface = self.start_interface(self.default_server) self.interface = self.start_interface(self.default_server)
for i in range(self.num_server): for i in range(self.num_server):
self.start_random_interface() self.start_random_interface()
def start(self, response_queue): def start(self, response_queue):
self.running = True self.running = True
self.response_queue = response_queue self.response_queue = response_queue
@ -269,7 +269,7 @@ class Network(threading.Thread):
def stop_interface(self): def stop_interface(self):
self.interface.stop() self.interface.stop()
def set_server(self, server): def set_server(self, server):
@ -293,7 +293,7 @@ class Network(threading.Thread):
self.switch_to_interface( self.interfaces[server] ) self.switch_to_interface( self.interfaces[server] )
else: else:
self.interface = self.start_interface(server) self.interface = self.start_interface(server)
def add_recent_server(self, i): def add_recent_server(self, i):
# list is ordered # list is ordered
@ -366,7 +366,7 @@ class Network(threading.Thread):
if method == 'blockchain.address.subscribe': if method == 'blockchain.address.subscribe':
addr = params[0] addr = params[0]
if addr in self.addresses: if addr in self.addresses:
self.response_queue.put({'id':_id, 'result':self.addresses[addr]}) self.response_queue.put({'id':_id, 'result':self.addresses[addr]})
return return
self.interface.send_request(request) self.interface.send_request(request)
@ -393,7 +393,7 @@ class Network(threading.Thread):
self.disconnected_time = time.time() self.disconnected_time = time.time()
continue continue
if response is not None: if response is not None:
self.process_response(i, response) self.process_response(i, response)
continue continue
@ -484,5 +484,3 @@ class Network(threading.Thread):
def get_local_height(self): def get_local_height(self):
return self.blockchain.height() return self.blockchain.height()

View File

@ -89,7 +89,7 @@ class NetworkProxy(threading.Thread):
print_error("NetworkProxy: terminating") print_error("NetworkProxy: terminating")
def process(self, response): def process(self, response):
if self.debug: if self.debug:
print_error("<--", response) print_error("<--", response)
if response.get('method') == 'network.status': if response.get('method') == 'network.status':
@ -125,7 +125,7 @@ class NetworkProxy(threading.Thread):
print_error( "received unexpected notification", method, params) print_error( "received unexpected notification", method, params)
return return
r = {'method':method, 'params':params, 'result':result, 'id':msg_id, 'error':error} r = {'method':method, 'params':params, 'result':result, 'id':msg_id, 'error':error}
callback(r) callback(r)
@ -141,7 +141,7 @@ class NetworkProxy(threading.Thread):
sub.append(message) sub.append(message)
if sub: if sub:
with self.lock: with self.lock:
if self.subscriptions.get(callback) is None: if self.subscriptions.get(callback) is None:
self.subscriptions[callback] = [] self.subscriptions[callback] = []
for message in sub: for message in sub:
if message not in self.subscriptions[callback]: if message not in self.subscriptions[callback]:
@ -151,12 +151,12 @@ class NetworkProxy(threading.Thread):
requests = [] requests = []
ids = [] ids = []
for m in messages: for m in messages:
method, params = m method, params = m
request = { 'id':self.message_id, 'method':method, 'params':params } request = { 'id':self.message_id, 'method':method, 'params':params }
self.unanswered_requests[self.message_id] = method, params, callback self.unanswered_requests[self.message_id] = method, params, callback
ids.append(self.message_id) ids.append(self.message_id)
requests.append(request) requests.append(request)
if self.debug: if self.debug:
print_error("-->", request) print_error("-->", request)
self.message_id += 1 self.message_id += 1
@ -230,4 +230,3 @@ class NetworkProxy(threading.Thread):
callbacks = self.callbacks.get(event,[])[:] callbacks = self.callbacks.get(event,[])[:]
if callbacks: if callbacks:
[callback() for callback in callbacks] [callback() for callback in callbacks]

View File

@ -157,7 +157,7 @@ class PaymentRequest:
paymntreq = self.data paymntreq = self.data
if not paymntreq.signature: if not paymntreq.signature:
self.error = "No signature" self.error = "No signature"
return return
cert = paymentrequest_pb2.X509Certificates() cert = paymentrequest_pb2.X509Certificates()
cert.ParseFromString(paymntreq.pki_data) cert.ParseFromString(paymntreq.pki_data)
@ -199,7 +199,7 @@ class PaymentRequest:
prefixBytes = bytearray([0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x01,0x05,0x00,0x04,0x20]) prefixBytes = bytearray([0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x01,0x05,0x00,0x04,0x20])
verify = pubkey.verify(sig, prefixBytes + hashBytes) verify = pubkey.verify(sig, prefixBytes + hashBytes)
else: else:
self.error = "Algorithm not supported" self.error = "Algorithm not supported"
util.print_error(self.error, algo.getComponentByName('algorithm')) util.print_error(self.error, algo.getComponentByName('algorithm'))
return return
@ -352,4 +352,3 @@ if __name__ == "__main__":
tx = "blah" tx = "blah"
pr.send_ack(tx, refund_addr = "1vXAXUnGitimzinpXrqDWVU4tyAAQ34RA") pr.send_ack(tx, refund_addr = "1vXAXUnGitimzinpXrqDWVU4tyAAQ34RA")

View File

@ -301,37 +301,37 @@ DESCRIPTOR.message_types_by_name['PaymentACK'] = _PAYMENTACK
class Output(message.Message): class Output(message.Message):
__metaclass__ = reflection.GeneratedProtocolMessageType __metaclass__ = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _OUTPUT DESCRIPTOR = _OUTPUT
# @@protoc_insertion_point(class_scope:payments.Output) # @@protoc_insertion_point(class_scope:payments.Output)
class PaymentDetails(message.Message): class PaymentDetails(message.Message):
__metaclass__ = reflection.GeneratedProtocolMessageType __metaclass__ = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _PAYMENTDETAILS DESCRIPTOR = _PAYMENTDETAILS
# @@protoc_insertion_point(class_scope:payments.PaymentDetails) # @@protoc_insertion_point(class_scope:payments.PaymentDetails)
class PaymentRequest(message.Message): class PaymentRequest(message.Message):
__metaclass__ = reflection.GeneratedProtocolMessageType __metaclass__ = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _PAYMENTREQUEST DESCRIPTOR = _PAYMENTREQUEST
# @@protoc_insertion_point(class_scope:payments.PaymentRequest) # @@protoc_insertion_point(class_scope:payments.PaymentRequest)
class X509Certificates(message.Message): class X509Certificates(message.Message):
__metaclass__ = reflection.GeneratedProtocolMessageType __metaclass__ = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _X509CERTIFICATES DESCRIPTOR = _X509CERTIFICATES
# @@protoc_insertion_point(class_scope:payments.X509Certificates) # @@protoc_insertion_point(class_scope:payments.X509Certificates)
class Payment(message.Message): class Payment(message.Message):
__metaclass__ = reflection.GeneratedProtocolMessageType __metaclass__ = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _PAYMENT DESCRIPTOR = _PAYMENT
# @@protoc_insertion_point(class_scope:payments.Payment) # @@protoc_insertion_point(class_scope:payments.Payment)
class PaymentACK(message.Message): class PaymentACK(message.Message):
__metaclass__ = reflection.GeneratedProtocolMessageType __metaclass__ = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _PAYMENTACK DESCRIPTOR = _PAYMENTACK
# @@protoc_insertion_point(class_scope:payments.PaymentACK) # @@protoc_insertion_point(class_scope:payments.PaymentACK)
# @@protoc_insertion_point(module_scope) # @@protoc_insertion_point(module_scope)

View File

@ -81,7 +81,7 @@ class BasePlugin:
def requires_settings(self): def requires_settings(self):
return False return False
def enable(self): def enable(self):
self.set_enabled(True) self.set_enabled(True)
return True return True
@ -109,4 +109,3 @@ class BasePlugin:
def settings_dialog(self): def settings_dialog(self):
pass pass

View File

@ -26,7 +26,7 @@ def scan_qr(config):
if str(r.type) != 'QRCODE': if str(r.type) != 'QRCODE':
continue continue
return r.data return r.data
def _find_system_cameras(): def _find_system_cameras():
device_root = "/sys/class/video4linux" device_root = "/sys/class/video4linux"

View File

@ -51,27 +51,27 @@ class RIPEMD160:
"""Return a new RIPEMD160 object. An optional string argument """Return a new RIPEMD160 object. An optional string argument
may be provided; if present, this string will be automatically may be provided; if present, this string will be automatically
hashed.""" hashed."""
def __init__(self, arg=None): def __init__(self, arg=None):
self.ctx = RMDContext() self.ctx = RMDContext()
if arg: if arg:
self.update(arg) self.update(arg)
self.dig = None self.dig = None
def update(self, arg): def update(self, arg):
"""update(arg)""" """update(arg)"""
RMD160Update(self.ctx, arg, len(arg)) RMD160Update(self.ctx, arg, len(arg))
self.dig = None self.dig = None
def digest(self): def digest(self):
"""digest()""" """digest()"""
if self.dig: if self.dig:
return self.dig return self.dig
ctx = self.ctx.copy() ctx = self.ctx.copy()
self.dig = RMD160Final(self.ctx) self.dig = RMD160Final(self.ctx)
self.ctx = ctx self.ctx = ctx
return self.dig return self.dig
def hexdigest(self): def hexdigest(self):
"""hexdigest()""" """hexdigest()"""
dig = self.digest() dig = self.digest()
@ -79,9 +79,9 @@ class RIPEMD160:
for d in dig: for d in dig:
hex_digest += '%02x' % ord(d) hex_digest += '%02x' % ord(d)
return hex_digest return hex_digest
def copy(self): def copy(self):
"""copy()""" """copy()"""
import copy import copy
return copy.deepcopy(self) return copy.deepcopy(self)
@ -90,7 +90,7 @@ class RIPEMD160:
def new(arg=None): def new(arg=None):
"""Return a new RIPEMD160 object. An optional string argument """Return a new RIPEMD160 object. An optional string argument
may be provided; if present, this string will be automatically may be provided; if present, this string will be automatically
hashed.""" hashed."""
return RIPEMD160(arg) return RIPEMD160(arg)
@ -260,7 +260,7 @@ def RMD160Transform(state, block): #uint32 state[5], uchar block[64]
b = state[1] b = state[1]
c = state[2] c = state[2]
d = state[3] d = state[3]
e = state[4] e = state[4]
#/* Parallel round 1 */ #/* Parallel round 1 */
a, c = R(a, b, c, d, e, F4, KK0, 8, 5, x) a, c = R(a, b, c, d, e, F4, KK0, 8, 5, x)
@ -361,7 +361,7 @@ def RMD160Transform(state, block): #uint32 state[5], uchar block[64]
def RMD160Update(ctx, inp, inplen): def RMD160Update(ctx, inp, inplen):
if type(inp) == str: if type(inp) == str:
inp = [ord(i)&0xff for i in inp] inp = [ord(i)&0xff for i in inp]
have = (ctx.count / 8) % 64 have = (ctx.count / 8) % 64
need = 64 - have need = 64 - have
ctx.count += 8 * inplen ctx.count += 8 * inplen

View File

@ -166,11 +166,11 @@ class WalletSynchronizer(threading.Thread):
rs = requested_histories.pop(addr) rs = requested_histories.pop(addr)
if self.wallet.get_status(hist) != rs: if self.wallet.get_status(hist) != rs:
raise Exception("error: status mismatch: %s"%addr) raise Exception("error: status mismatch: %s"%addr)
# store received history # store received history
self.wallet.receive_history_callback(addr, hist) self.wallet.receive_history_callback(addr, hist)
# request transactions that we don't have # request transactions that we don't have
for tx_hash, tx_height in hist: for tx_hash, tx_height in hist:
if self.wallet.transactions.get(tx_hash) is None: if self.wallet.transactions.get(tx_hash) is None:
if (tx_hash, tx_height) not in requested_tx and (tx_hash, tx_height) not in missing_tx: if (tx_hash, tx_height) not in requested_tx and (tx_hash, tx_height) not in missing_tx:
@ -192,6 +192,5 @@ class WalletSynchronizer(threading.Thread):
if self.was_updated and not requested_tx: if self.was_updated and not requested_tx:
self.network.trigger_callback('updated') self.network.trigger_callback('updated')
# Updated gets called too many times from other places as well; if we use that signal we get the notification three times # Updated gets called too many times from other places as well; if we use that signal we get the notification three times
self.network.trigger_callback("new_transaction") self.network.trigger_callback("new_transaction")
self.was_updated = False self.was_updated = False

View File

@ -60,7 +60,7 @@ class BCDataStream(object):
def seek_file(self, position): def seek_file(self, position):
self.read_cursor = position self.read_cursor = position
def close_file(self): def close_file(self):
self.input.close() self.input.close()
@ -319,7 +319,7 @@ def x_to_xpub(x_pubkey):
xpub, s = BIP32_Account.parse_xpubkey(x_pubkey) xpub, s = BIP32_Account.parse_xpubkey(x_pubkey)
return xpub return xpub
def parse_xpub(x_pubkey): def parse_xpub(x_pubkey):
if x_pubkey[0:2] == 'ff': if x_pubkey[0:2] == 'ff':
@ -439,7 +439,7 @@ def get_address_from_output_script(bytes):
def parse_input(vds): def parse_input(vds):
d = {} d = {}
@ -506,7 +506,7 @@ class Transaction:
self.outputs = outputs self.outputs = outputs
self.locktime = locktime self.locktime = locktime
self.raw = None self.raw = None
@classmethod @classmethod
def deserialize(klass, raw): def deserialize(klass, raw):
self = klass([],[]) self = klass([],[])
@ -520,7 +520,7 @@ class Transaction:
self.outputs = map(lambda x: (x['type'], x['address'], x['value']), d['outputs']) self.outputs = map(lambda x: (x['type'], x['address'], x['value']), d['outputs'])
self.locktime = d['lockTime'] self.locktime = d['lockTime']
@classmethod @classmethod
def sweep(klass, privkeys, network, to_address, fee): def sweep(klass, privkeys, network, to_address, fee):
inputs = [] inputs = []
for privkey in privkeys: for privkey in privkeys:
@ -555,14 +555,14 @@ class Transaction:
if num is None: num = n if num is None: num = n
# supports only "2 of 2", and "2 of 3" transactions # supports only "2 of 2", and "2 of 3" transactions
assert num <= n and n in [2,3] assert num <= n and n in [2,3]
if num==2: if num==2:
s = '52' s = '52'
elif num == 3: elif num == 3:
s = '53' s = '53'
else: else:
raise raise
for k in public_keys: for k in public_keys:
s += op_push(len(k)/2) s += op_push(len(k)/2)
s += k s += k
@ -811,7 +811,7 @@ class Transaction:
def has_address(self, addr): def has_address(self, addr):
found = False found = False
for txin in self.inputs: for txin in self.inputs:
if addr == txin.get('address'): if addr == txin.get('address'):
found = True found = True
break break
if addr in self.get_output_addresses(): if addr in self.get_output_addresses():
@ -843,7 +843,7 @@ class Transaction:
is_partial = True is_partial = True
if not is_send: is_partial = False if not is_send: is_partial = False
for addr, value in self.get_outputs(): for addr, value in self.get_outputs():
v_out += value v_out += value
if addr in addresses: if addr in addresses:
@ -899,7 +899,4 @@ class Transaction:
sum += i["value"] * age sum += i["value"] * age
priority = sum / size priority = sum / size
print_error(priority, threshold) print_error(priority, threshold)
return priority < threshold return priority < threshold

View File

@ -182,7 +182,7 @@ def parse_URI(uri):
valid_address = bitcoin.is_address(address) valid_address = bitcoin.is_address(address)
pq = urlparse.parse_qs(u.query) pq = urlparse.parse_qs(u.query)
for k, v in pq.items(): for k, v in pq.items():
if len(v)!=1: if len(v)!=1:
raise Exception('Duplicate Key', k) raise Exception('Duplicate Key', k)
@ -202,7 +202,7 @@ def parse_URI(uri):
label = pq['label'][0] label = pq['label'][0]
if 'r' in pq: if 'r' in pq:
request_url = pq['r'][0] request_url = pq['r'][0]
if request_url != '': if request_url != '':
return address, amount, label, message, request_url return address, amount, label, message, request_url
@ -225,7 +225,7 @@ __builtin__.raw_input = raw_input
def parse_json(message): def parse_json(message):
n = message.find('\n') n = message.find('\n')
if n==-1: if n==-1:
return None, message return None, message
try: try:
j = json.loads( message[0:n] ) j = json.loads( message[0:n] )
@ -352,4 +352,3 @@ class QueuePipe:
def send_all(self, requests): def send_all(self, requests):
for request in requests: for request in requests:
self.send(request) self.send(request)

View File

@ -216,7 +216,7 @@ class Abstract_Wallet(object):
# inputs # inputs
tx.add_pubkey_addresses(self.transactions) tx.add_pubkey_addresses(self.transactions)
# outputs of tx: inputs of tx2 # outputs of tx: inputs of tx2
for type, x, v in tx.outputs: for type, x, v in tx.outputs:
if type == 'pubkey': if type == 'pubkey':
for tx2 in self.transactions.values(): for tx2 in self.transactions.values():
@ -1444,7 +1444,7 @@ class NewWallet(BIP32_HD_Wallet, Mnemonic):
class Wallet_2of2(BIP32_Wallet, Mnemonic): class Wallet_2of2(BIP32_Wallet, Mnemonic):
# Wallet with multisig addresses. # Wallet with multisig addresses.
# Cannot create accounts # Cannot create accounts
root_name = "x1/" root_name = "x1/"
root_derivation = "m/44'/0'" root_derivation = "m/44'/0'"
@ -1590,7 +1590,7 @@ class OldWallet(Deterministic_Wallet):
wallet_types = [ wallet_types = [
# category type description constructor # category type description constructor
('standard', 'old', ("Old wallet"), OldWallet), ('standard', 'old', ("Old wallet"), OldWallet),
('standard', 'xpub', ("BIP32 Import"), BIP32_Simple_Wallet), ('standard', 'xpub', ("BIP32 Import"), BIP32_Simple_Wallet),

View File

@ -81,16 +81,16 @@ class X509(tlslite.X509):
'DNS': set(), 'DNS': set(),
'SRV': set(), 'SRV': set(),
'URI': set(), 'URI': set(),
'XMPPAddr': set(), 'XMPPAddr': set(),
'OU': None,} 'OU': None,}
# Extract the CommonName(s) from the cert. # Extract the CommonName(s) from the cert.
for rdnss in self.subject: for rdnss in self.subject:
for rdns in rdnss: for rdns in rdnss:
for name in rdns: for name in rdns:
oid = name.getComponentByName('type') oid = name.getComponentByName('type')
value = name.getComponentByName('value') value = name.getComponentByName('value')
if oid == COMMON_NAME: if oid == COMMON_NAME:
value = decoder.decode(value, asn1Spec=DirectoryString())[0] value = decoder.decode(value, asn1Spec=DirectoryString())[0]
value = decode_str(value.getComponent()) value = decode_str(value.getComponent())
@ -106,7 +106,7 @@ class X509(tlslite.X509):
oid = extension.getComponentByName('extnID') oid = extension.getComponentByName('extnID')
if oid != SUBJECT_ALT_NAME: if oid != SUBJECT_ALT_NAME:
continue continue
value = decoder.decode(extension.getComponentByName('extnValue'), value = decoder.decode(extension.getComponentByName('extnValue'),
asn1Spec=OctetString())[0] asn1Spec=OctetString())[0]
sa_names = decoder.decode(value, asn1Spec=SubjectAltName())[0] sa_names = decoder.decode(value, asn1Spec=SubjectAltName())[0]
@ -120,10 +120,10 @@ class X509(tlslite.X509):
results['URI'].add(value[5:]) results['URI'].add(value[5:])
elif name_type == 'otherName': elif name_type == 'otherName':
name = name.getComponent() name = name.getComponent()
oid = name.getComponentByName('type-id') oid = name.getComponentByName('type-id')
value = name.getComponentByName('value') value = name.getComponentByName('value')
if oid == XMPP_ADDR: if oid == XMPP_ADDR:
value = decoder.decode(value, asn1Spec=UTF8String())[0] value = decoder.decode(value, asn1Spec=UTF8String())[0]
results['XMPPAddr'].add(decode_str(value)) results['XMPPAddr'].add(decode_str(value))