Skip to content
Snippets Groups Projects
Commit 4b45a318 authored by inso's avatar inso
Browse files

Enhance behavior in offline mode

parent 42d19c2e
No related branches found
No related tags found
No related merge requests found
Showing with 384 additions and 310 deletions
...@@ -204,6 +204,7 @@ class Community(QObject): ...@@ -204,6 +204,7 @@ class Community(QObject):
if '404' in e: if '404' in e:
return 0 return 0
except NoPeerAvailable as e: except NoPeerAvailable as e:
logging.debug(str(e))
return 0 return 0
@property @property
......
...@@ -4,6 +4,7 @@ import asyncio ...@@ -4,6 +4,7 @@ import asyncio
from PyQt5.QtCore import QLocale, QDateTime from PyQt5.QtCore import QLocale, QDateTime
from ..core.registry import Identity, BlockchainState from ..core.registry import Identity, BlockchainState
from ..tools.decorators import asyncify from ..tools.decorators import asyncify
from ..tools.exceptions import NoPeerAvailable
from cutecoin.gui.views.wot import NODE_STATUS_HIGHLIGHTED, NODE_STATUS_OUT, ARC_STATUS_STRONG, ARC_STATUS_WEAK from cutecoin.gui.views.wot import NODE_STATUS_HIGHLIGHTED, NODE_STATUS_OUT, ARC_STATUS_STRONG, ARC_STATUS_WEAK
...@@ -160,6 +161,7 @@ class Graph(object): ...@@ -160,6 +161,7 @@ class Graph(object):
:return: :return:
""" """
if self.community: if self.community:
try:
yield from self.refresh_signature_validity() yield from self.refresh_signature_validity()
# add certifiers of uid # add certifiers of uid
for certifier in tuple(certifier_list): for certifier in tuple(certifier_list):
...@@ -229,6 +231,8 @@ class Graph(object): ...@@ -229,6 +231,8 @@ class Graph(object):
if certifier['identity'].pubkey not in tuple(self._graph[identity.pubkey]['connected']): if certifier['identity'].pubkey not in tuple(self._graph[identity.pubkey]['connected']):
# add certifier node to identity node # add certifier node to identity node
self._graph[identity.pubkey]['connected'].append(certifier['identity'].pubkey) self._graph[identity.pubkey]['connected'].append(certifier['identity'].pubkey)
except NoPeerAvailable as e:
logging.debug(str(e))
@asyncio.coroutine @asyncio.coroutine
def add_certified_list(self, certified_list, identity, identity_account): def add_certified_list(self, certified_list, identity, identity_account):
...@@ -239,6 +243,9 @@ class Graph(object): ...@@ -239,6 +243,9 @@ class Graph(object):
:param identity identity_account: Account identity instance :param identity identity_account: Account identity instance
:return: :return:
""" """
if self.community:
try:
yield from self.refresh_signature_validity() yield from self.refresh_signature_validity()
# add certified by uid # add certified by uid
for certified in tuple(certified_list): for certified in tuple(certified_list):
...@@ -314,6 +321,8 @@ class Graph(object): ...@@ -314,6 +321,8 @@ class Graph(object):
if certified['identity'].pubkey not in tuple(self._graph[identity.pubkey]['connected']): if certified['identity'].pubkey not in tuple(self._graph[identity.pubkey]['connected']):
# add certified node to identity node # add certified node to identity node
self._graph[identity.pubkey]['connected'].append(certified['identity'].pubkey) self._graph[identity.pubkey]['connected'].append(certified['identity'].pubkey)
except NoPeerAvailable as e:
logging.debug(str(e))
def add_identity(self, identity, status=None, arcs=None, connected=None): def add_identity(self, identity, status=None, arcs=None, connected=None):
""" """
......
...@@ -152,9 +152,8 @@ class BmaAccess(QObject): ...@@ -152,9 +152,8 @@ class BmaAccess(QObject):
need_reload = data[0] need_reload = data[0]
json_data = data[1] json_data = data[1]
if need_reload:
nodes = self._network.synced_nodes nodes = self._network.synced_nodes
if len(nodes) > 0: if need_reload and len(nodes) > 0:
tries = 0 tries = 0
while tries < 3: while tries < 3:
node = random.choice(nodes) node = random.choice(nodes)
...@@ -170,8 +169,8 @@ class BmaAccess(QObject): ...@@ -170,8 +169,8 @@ class BmaAccess(QObject):
tries += 1 tries += 1
except ClientError: except ClientError:
tries += 1 tries += 1
else: if len(nodes) == 0 or json_data is None:
raise NoPeerAvailable("", nodes) raise NoPeerAvailable("", len(nodes))
return json_data return json_data
def simple_request(self, request, req_args={}, get_args={}): def simple_request(self, request, req_args={}, get_args={}):
...@@ -216,5 +215,5 @@ class BmaAccess(QObject): ...@@ -216,5 +215,5 @@ class BmaAccess(QObject):
reply = yield from req.post(**post_args) reply = yield from req.post(**post_args)
replies.append(reply) replies.append(reply)
else: else:
raise NoPeerAvailable("", nodes) raise NoPeerAvailable("", len(nodes))
return tuple(replies) return tuple(replies)
...@@ -136,6 +136,10 @@ class Identity(QObject): ...@@ -136,6 +136,10 @@ class Identity(QObject):
except ValueError as e: except ValueError as e:
if '404' in str(e) or '400' in str(e): if '404' in str(e) or '400' in str(e):
raise MembershipNotFoundError(self.pubkey, community.name) raise MembershipNotFoundError(self.pubkey, community.name)
except NoPeerAvailable as e:
logging.debug(str(e))
raise MembershipNotFoundError(self.pubkey, community.name)
@asyncio.coroutine @asyncio.coroutine
def get_expiration_date(self, community): def get_expiration_date(self, community):
...@@ -184,6 +188,9 @@ class Identity(QObject): ...@@ -184,6 +188,9 @@ class Identity(QObject):
except ValueError as e: except ValueError as e:
if '404' in str(e) or '400' in str(e): if '404' in str(e) or '400' in str(e):
raise MembershipNotFoundError(self.pubkey, community.name) raise MembershipNotFoundError(self.pubkey, community.name)
except NoPeerAvailable as e:
logging.debug(str(e))
raise MembershipNotFoundError(self.pubkey, community.name)
@asyncio.coroutine @asyncio.coroutine
def published_uid(self, community): def published_uid(self, community):
...@@ -204,6 +211,8 @@ class Identity(QObject): ...@@ -204,6 +211,8 @@ class Identity(QObject):
person_uid = uid_data["uid"] person_uid = uid_data["uid"]
if person_uid == self.uid: if person_uid == self.uid:
return True return True
except NoPeerAvailable as e:
logging.debug(str(e))
return False return False
@asyncio.coroutine @asyncio.coroutine
...@@ -223,6 +232,8 @@ class Identity(QObject): ...@@ -223,6 +232,8 @@ class Identity(QObject):
pass pass
else: else:
raise raise
except NoPeerAvailable as e:
logging.debug(str(e))
return False return False
@asyncio.coroutine @asyncio.coroutine
...@@ -236,7 +247,8 @@ class Identity(QObject): ...@@ -236,7 +247,8 @@ class Identity(QObject):
""" """
certifiers = list() certifiers = list()
try: try:
data = yield from community.bma_access.future_request(bma.wot.CertifiersOf, {'search': self.pubkey}) data = yield from community.bma_access.future_request(bma.wot.CertifiersOf,
{'search': self.pubkey})
for certifier_data in data['certifications']: for certifier_data in data['certifications']:
certifier = {} certifier = {}
...@@ -269,6 +281,8 @@ class Identity(QObject): ...@@ -269,6 +281,8 @@ class Identity(QObject):
certifiers.append(certifier) certifiers.append(certifier)
except ValueError as e: except ValueError as e:
logging.debug("Lookup error : {0}".format(str(e))) logging.debug("Lookup error : {0}".format(str(e)))
except NoPeerAvailable as e:
logging.debug(str(e))
return certifiers return certifiers
@asyncio.coroutine @asyncio.coroutine
...@@ -329,6 +343,8 @@ class Identity(QObject): ...@@ -329,6 +343,8 @@ class Identity(QObject):
except ValueError as e: except ValueError as e:
if '404' in str(e): if '404' in str(e):
logging.debug('bma.wot.Lookup request error') logging.debug('bma.wot.Lookup request error')
except NoPeerAvailable as e:
logging.debug(str(e))
return certified_list return certified_list
@asyncio.coroutine @asyncio.coroutine
......
...@@ -4,7 +4,7 @@ import hashlib ...@@ -4,7 +4,7 @@ import hashlib
from .transfer import Transfer from .transfer import Transfer
from ucoinpy.documents.transaction import InputSource, OutputSource from ucoinpy.documents.transaction import InputSource, OutputSource
from ucoinpy.documents.block import Block from ucoinpy.documents.block import Block
from ..tools.exceptions import LookupFailureError from ..tools.exceptions import LookupFailureError, NoPeerAvailable
from ucoinpy.api import bma from ucoinpy.api import bma
...@@ -214,6 +214,7 @@ class TxHistory(): ...@@ -214,6 +214,7 @@ class TxHistory():
:param cutecoin.core.Community community: The community :param cutecoin.core.Community community: The community
:param list received_list: List of transactions received :param list received_list: List of transactions received
""" """
try:
current_block = yield from community.bma_access.future_request(bma.blockchain.Block, current_block = yield from community.bma_access.future_request(bma.blockchain.Block,
req_args={'number': community.network.latest_block_number}) req_args={'number': community.network.latest_block_number})
members_pubkeys = yield from community.members_pubkeys() members_pubkeys = yield from community.members_pubkeys()
...@@ -269,6 +270,10 @@ class TxHistory(): ...@@ -269,6 +270,10 @@ class TxHistory():
transfer.check_refused(current_block['medianTime'], transfer.check_refused(current_block['medianTime'],
parameters['avgGenTime'], parameters['avgGenTime'],
parameters['medianTimeBlocks']) parameters['medianTimeBlocks'])
except NoPeerAvailable as e:
logging.debug(str(e))
self.wallet.refresh_finished.emit([])
return
self._transfers = self._transfers + new_transfers self._transfers = self._transfers + new_transfers
self._dividends = self._dividends + new_dividends self._dividends = self._dividends + new_dividends
......
...@@ -272,21 +272,6 @@ class Wallet(QObject): ...@@ -272,21 +272,6 @@ class Wallet(QObject):
logging.debug("Transaction : {0}".format(tx.signed_raw())) logging.debug("Transaction : {0}".format(tx.signed_raw()))
return (yield from transfer.send(tx, community)) return (yield from transfer.send(tx, community))
@asyncio.coroutine
def future_sources(self, community):
"""
Get available sources in a given community
:param cutecoin.core.community.Community community: The community where we want available sources
:return: List of InputSource ucoinpy objects
"""
data = yield from community.bma_access.future_request(bma.tx.Sources,
req_args={'pubkey': self.pubkey})
tx = []
for s in data['sources']:
tx.append(InputSource.from_bma(s))
return tx
@asyncio.coroutine @asyncio.coroutine
def sources(self, community): def sources(self, community):
""" """
...@@ -295,11 +280,14 @@ class Wallet(QObject): ...@@ -295,11 +280,14 @@ class Wallet(QObject):
:param cutecoin.core.community.Community community: The community where we want available sources :param cutecoin.core.community.Community community: The community where we want available sources
:return: List of InputSource ucoinpy objects :return: List of InputSource ucoinpy objects
""" """
tx = []
try:
data = yield from community.bma_access.future_request(bma.tx.Sources, data = yield from community.bma_access.future_request(bma.tx.Sources,
req_args={'pubkey': self.pubkey}) req_args={'pubkey': self.pubkey})
tx = []
for s in data['sources']: for s in data['sources']:
tx.append(InputSource.from_bma(s)) tx.append(InputSource.from_bma(s))
except NoPeerAvailable as e:
logging.debug(str(e))
return tx return tx
def transfers(self, community): def transfers(self, community):
......
...@@ -9,6 +9,7 @@ from ..gen_resources.certification_uic import Ui_CertificationDialog ...@@ -9,6 +9,7 @@ from ..gen_resources.certification_uic import Ui_CertificationDialog
from . import toast from . import toast
from .dialogs import QAsyncMessageBox from .dialogs import QAsyncMessageBox
from ..tools.decorators import asyncify from ..tools.decorators import asyncify
from ..tools.exceptions import NoPeerAvailable
import asyncio import asyncio
import logging import logging
...@@ -89,6 +90,10 @@ class CertificationDialog(QDialog, Ui_CertificationDialog): ...@@ -89,6 +90,10 @@ class CertificationDialog(QDialog, Ui_CertificationDialog):
except ValueError as e: except ValueError as e:
if '404' in str(e): if '404' in str(e):
block_0 = None block_0 = None
except NoPeerAvailable as e:
logging.debug(str(e))
block_0 = None
if is_member or not block_0: if is_member or not block_0:
self.button_box.button(QDialogButtonBox.Ok).setEnabled(True) self.button_box.button(QDialogButtonBox.Ok).setEnabled(True)
self.button_box.button(QDialogButtonBox.Ok).setText(self.tr("&Ok")) self.button_box.button(QDialogButtonBox.Ok).setText(self.tr("&Ok"))
......
...@@ -6,6 +6,7 @@ from PyQt5.QtWidgets import QFrame, QLabel, QVBoxLayout, QLayout, QPushButton ...@@ -6,6 +6,7 @@ from PyQt5.QtWidgets import QFrame, QLabel, QVBoxLayout, QLayout, QPushButton
from PyQt5.QtGui import QPalette from PyQt5.QtGui import QPalette
from PyQt5.QtCore import QEvent, QSize, pyqtSignal from PyQt5.QtCore import QEvent, QSize, pyqtSignal
from ..tools.decorators import asyncify from ..tools.decorators import asyncify
from ..tools.exceptions import NoPeerAvailable
import asyncio import asyncio
from .busy import Busy from .busy import Busy
...@@ -34,6 +35,7 @@ class CommunityTile(QFrame): ...@@ -34,6 +35,7 @@ class CommunityTile(QFrame):
def refresh(self): def refresh(self):
self.busy.show() self.busy.show()
self.setFixedSize(QSize(150, 150)) self.setFixedSize(QSize(150, 150))
try:
current_block = yield from self.community.get_block(self.community.network.latest_block_number) current_block = yield from self.community.get_block(self.community.network.latest_block_number)
members_pubkeys = yield from self.community.members_pubkeys() members_pubkeys = yield from self.community.members_pubkeys()
amount = yield from self.app.current_account.amount(self.community) amount = yield from self.app.current_account.amount(self.community)
...@@ -68,6 +70,17 @@ class CommunityTile(QFrame): ...@@ -68,6 +70,17 @@ class CommunityTile(QFrame):
balance_label=self.tr("Balance"), balance_label=self.tr("Balance"),
balance=localized_amount) balance=localized_amount)
self.text_label.setText(description) self.text_label.setText(description)
except NoPeerAvailable:
description = """<html>
<body>
<p>
<span style=" font-size:16pt; font-weight:600;">{currency}</span>
</p>
<p>{message}</p>
</body>
</html>""".format(currency=self.community.currency,
message=self.tr("Not connected"))
self.text_label.setText(description)
self.busy.hide() self.busy.hide()
def mousePressEvent(self, event): def mousePressEvent(self, event):
......
...@@ -182,13 +182,25 @@ class CommunityWidget(QWidget, Ui_CommunityWidget): ...@@ -182,13 +182,25 @@ class CommunityWidget(QWidget, Ui_CommunityWidget):
logging.debug("Refresh status") logging.debug("Refresh status")
if self.community: if self.community:
text = self.tr(" Block {0}").format(self.community.network.latest_block_number) text = self.tr(" Block {0}").format(self.community.network.latest_block_number)
try:
block = yield from self.community.get_block(self.community.network.latest_block_number) block = yield from self.community.get_block(self.community.network.latest_block_number)
text += " ( {0} )".format(QLocale.toString( text += " ( {0} )".format(QLocale.toString(
QLocale(), QLocale(),
QDateTime.fromTime_t(block['medianTime']), QDateTime.fromTime_t(block['medianTime']),
QLocale.dateTimeFormat(QLocale(), QLocale.NarrowFormat) QLocale.dateTimeFormat(QLocale(), QLocale.NarrowFormat)
)) ))
except NoPeerAvailable as e:
logging.debug(str(e))
text += " ( ### ) "
if len(self.community.network.synced_nodes) == 0:
self.button_membership.setEnabled(False)
self.button_certification.setEnabled(False)
self.button_send_money.setEnabled(False)
else:
self.button_membership.setEnabled(True)
self.button_certification.setEnabled(True)
self.button_send_money.setEnabled(True)
if self.community.network.quality > 0.66: if self.community.network.quality > 0.66:
icon = '<img src=":/icons/connected" width="12" height="12"/>' icon = '<img src=":/icons/connected" width="12" height="12"/>'
...@@ -196,15 +208,22 @@ class CommunityWidget(QWidget, Ui_CommunityWidget): ...@@ -196,15 +208,22 @@ class CommunityWidget(QWidget, Ui_CommunityWidget):
icon = '<img src=":/icons/weak_connect" width="12" height="12"/>' icon = '<img src=":/icons/weak_connect" width="12" height="12"/>'
else: else:
icon = '<img src=":/icons/disconnected" width="12" height="12"/>' icon = '<img src=":/icons/disconnected" width="12" height="12"/>'
status_infotext = " - ".join([self.status_infotext[info] for info in self.status_info]) status_infotext = " - ".join([self.status_infotext[info] for info in self.status_info])
label_text = "{0}{1}".format(icon, text) label_text = "{0}{1}".format(icon, text)
if status_infotext != "": if status_infotext != "":
label_text += " - {0}".format(status_infotext) label_text += " - {0}".format(status_infotext)
if self.app.preferences['expert_mode']: if self.app.preferences['expert_mode']:
try:
members_pubkeys = yield from self.community.members_pubkeys() members_pubkeys = yield from self.community.members_pubkeys()
label_text += self.tr(" - Median fork window : {0}")\ label_text += self.tr(" - Median fork window : {0}")\
.format(self.community.network.fork_window(members_pubkeys)) .format(self.community.network.fork_window(members_pubkeys))
except NoPeerAvailable as e:
logging.debug(str(e))
label_text += self.tr(" - Median fork window : {0}")\
.format("#")
self.status_label.setText(label_text) self.status_label.setText(label_text)
...@@ -227,7 +246,7 @@ class CommunityWidget(QWidget, Ui_CommunityWidget): ...@@ -227,7 +246,7 @@ class CommunityWidget(QWidget, Ui_CommunityWidget):
logging.debug("Not a member") logging.debug("Not a member")
self.button_membership.setText(self.tr("Send membership demand")) self.button_membership.setText(self.tr("Send membership demand"))
self.button_membership.show() self.button_membership.show()
if self.community.get_block(0) != bma.blockchain.Block.null_value: if self.community.get_block(0) != None:
self.button_certification.hide() self.button_certification.hide()
else: else:
logging.debug("UID not published") logging.debug("UID not published")
......
...@@ -19,6 +19,7 @@ from .certification import CertificationDialog ...@@ -19,6 +19,7 @@ from .certification import CertificationDialog
import asyncio import asyncio
from ucoinpy.api import bma from ucoinpy.api import bma
from ..core.registry import Identity from ..core.registry import Identity
from ..tools.exceptions import NoPeerAvailable
from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task
...@@ -219,6 +220,7 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab): ...@@ -219,6 +220,7 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab):
Search members of community and display found members Search members of community and display found members
""" """
if self.account and self.community: if self.account and self.community:
try:
self.busy.show() self.busy.show()
self_identity = yield from self.account.identity(self.community) self_identity = yield from self.account.identity(self.community)
account_connections = [] account_connections = []
...@@ -233,6 +235,10 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab): ...@@ -233,6 +235,10 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab):
if p.pubkey not in [i.pubkey for i in certifiers_of]] if p.pubkey not in [i.pubkey for i in certifiers_of]]
identities = certifiers_of + certified_by identities = certifiers_of + certified_by
self.refresh_identities(identities) self.refresh_identities(identities)
except NoPeerAvailable:
pass
finally:
self.refresh_identities([])
self.busy.hide() self.busy.hide()
@once_at_a_time @once_at_a_time
......
...@@ -11,6 +11,7 @@ from .transfer import TransferMoneyDialog ...@@ -11,6 +11,7 @@ from .transfer import TransferMoneyDialog
from .certification import CertificationDialog from .certification import CertificationDialog
from ..core.wallet import Wallet from ..core.wallet import Wallet
from ..core.registry import Identity from ..core.registry import Identity
from ..tools.exceptions import NoPeerAvailable
from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task
from .transfer import TransferMoneyDialog from .transfer import TransferMoneyDialog
from . import toast from . import toast
...@@ -81,6 +82,7 @@ class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget): ...@@ -81,6 +82,7 @@ class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget):
@asyncify @asyncify
@asyncio.coroutine @asyncio.coroutine
def refresh_minimum_maximum(self): def refresh_minimum_maximum(self):
try:
block = yield from self.community.get_block(1) block = yield from self.community.get_block(1)
minimum_datetime = QDateTime() minimum_datetime = QDateTime()
minimum_datetime.setTime_t(block['medianTime']) minimum_datetime.setTime_t(block['medianTime'])
...@@ -94,6 +96,8 @@ class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget): ...@@ -94,6 +96,8 @@ class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget):
tomorrow_datetime = QDateTime().currentDateTime().addDays(1) tomorrow_datetime = QDateTime().currentDateTime().addDays(1)
self.date_to.setDateTime(tomorrow_datetime) self.date_to.setDateTime(tomorrow_datetime)
self.date_to.setMaximumDateTime(tomorrow_datetime) self.date_to.setMaximumDateTime(tomorrow_datetime)
except NoPeerAvailable as e:
logging.debug(str(e))
def refresh(self): def refresh(self):
#TODO: Use resetmodel instead of destroy/create #TODO: Use resetmodel instead of destroy/create
......
...@@ -132,8 +132,12 @@ class IdentitiesTableModel(QAbstractTableModel): ...@@ -132,8 +132,12 @@ class IdentitiesTableModel(QAbstractTableModel):
for identity in identities: for identity in identities:
data = yield from self.identity_data(identity) data = yield from self.identity_data(identity)
self.identities_data.append(data) self.identities_data.append(data)
try:
parameters = yield from self.community.parameters() parameters = yield from self.community.parameters()
self._sig_validity = parameters['sigValidity'] self._sig_validity = parameters['sigValidity']
except NoPeerAvailable as e:
logging.debug(str(e))
self._sig_validity = 0
self.endResetModel() self.endResetModel()
def rowCount(self, parent): def rowCount(self, parent):
......
...@@ -8,6 +8,7 @@ import datetime ...@@ -8,6 +8,7 @@ import datetime
import logging import logging
import asyncio import asyncio
from ..core.transfer import Transfer from ..core.transfer import Transfer
from ..tools.exceptions import NoPeerAvailable
from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task
from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant, QSortFilterProxyModel, \ from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant, QSortFilterProxyModel, \
QDateTime, QLocale, QModelIndex QDateTime, QLocale, QModelIndex
...@@ -300,8 +301,12 @@ class HistoryTableModel(QAbstractTableModel): ...@@ -300,8 +301,12 @@ class HistoryTableModel(QAbstractTableModel):
data = yield from self.data_dividend(transfer) data = yield from self.data_dividend(transfer)
if data: if data:
self.transfers_data.append(data) self.transfers_data.append(data)
try:
members_pubkeys = yield from self.community.members_pubkeys() members_pubkeys = yield from self.community.members_pubkeys()
self._max_validations = self.community.network.fork_window(members_pubkeys) + 1 self._max_validations = self.community.network.fork_window(members_pubkeys) + 1
except NoPeerAvailable as e:
logging.debug(str(e))
self._max_validations = 0
self.endResetModel() self.endResetModel()
def max_validations(self): def max_validations(self):
......
...@@ -154,13 +154,13 @@ class NoPeerAvailable(Error): ...@@ -154,13 +154,13 @@ class NoPeerAvailable(Error):
Exception raised when a community doesn't have any Exception raised when a community doesn't have any
peer available. peer available.
""" """
def __init__(self, currency, peers): def __init__(self, currency, nbpeers):
""" """
Constructor Constructor
""" """
super() .__init__( super() .__init__(
"No peer answered in {0} community ({1} peers available)" "No peer answered in {0} community ({1} peers available)"
.format(currency, peers)) .format(currency, nbpeers))
class InvalidNodeCurrency(Error): class InvalidNodeCurrency(Error):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment