diff --git a/setup.py b/setup.py index ee09ae24e4e4614b0db6f89ec2b277b025b65af8..dca0a8308b46987df54a3e7daafef65b5270428c 100644 --- a/setup.py +++ b/setup.py @@ -117,7 +117,7 @@ else: setup( name = "sakia", - version = "0.11.3", + version = "0.11.4", description = "UCoin client", author = "Inso", options = {"build_exe": options}, diff --git a/src/sakia/core/account.py b/src/sakia/core/account.py index 21ed972e668a2c02c183aebadf559fde2baa16cb..15a20055ba1bb70056c84f9ee35471792a811ee7 100644 --- a/src/sakia/core/account.py +++ b/src/sakia/core/account.py @@ -33,6 +33,7 @@ class Account(QObject): loading_progressed = pyqtSignal(Community, int, int) loading_finished = pyqtSignal(Community, list) wallets_changed = pyqtSignal() + certification_accepted = pyqtSignal() def __init__(self, salt, pubkey, name, communities, wallets, contacts, identities_registry): """ @@ -488,6 +489,8 @@ class Account(QObject): for r in responses: if r.status == 200: result = (True, (await r.json())) + # signal certification to all listeners + self.certification_accepted.emit() elif not result[0]: result = (False, (await r.text())) else: diff --git a/src/sakia/core/money/quant_zerosum.py b/src/sakia/core/money/quant_zerosum.py index dfa9637d36cba5e0c7442a9f2684da74f4aa970b..2c63322514e1d69c2952869965da43c8d61ab421 100644 --- a/src/sakia/core/money/quant_zerosum.py +++ b/src/sakia/core/money/quant_zerosum.py @@ -2,6 +2,7 @@ from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP, QLocale from . import Quantitative import asyncio + class QuantitativeZSum: _NAME_STR_ = QT_TRANSLATE_NOOP('QuantitativeZSum', 'Quant Z-sum') _REF_STR_ = QT_TRANSLATE_NOOP('QuantitativeZSum', "{0} Q0 {1}") @@ -22,12 +23,19 @@ class QuantitativeZSum: @classmethod def diff_units(cls, currency): - return QuantitativeZSum.units(currency) + return Quantitative.units(currency) async def value(self): """ Return quantitative value of amount minus the average value + t = last UD block + t-1 = penultimate UD block + M = Monetary mass + N = Members count + + zsum value = value - ( M(t-1) / N(t) ) + :param int amount: Value :param sakia.core.community.Community community: Community instance :return: int @@ -46,7 +54,11 @@ class QuantitativeZSum: async def localized(self, units=False, international_system=False): value = await self.value() - localized_value = QLocale().toString(float(value), 'f', 0) + prefix = "" + if international_system: + localized_value, prefix = Quantitative.to_si(value, self.app.preferences['digits_after_comma']) + else: + localized_value = QLocale().toString(float(value), 'f', 0) if units: return QCoreApplication.translate("QuantitativeZSum", @@ -58,4 +70,4 @@ class QuantitativeZSum: async def diff_localized(self, units=False, international_system=False): localized = await Quantitative(self.amount, self.community, self.app).localized(units, international_system) - return localized \ No newline at end of file + return localized diff --git a/src/sakia/core/money/quantitative.py b/src/sakia/core/money/quantitative.py index c34ab4536a2ac6957e3a691c9f7f2a5a77b7c09b..811ff8f0c9cd2473410576f7d513f5ce176373ca 100644 --- a/src/sakia/core/money/quantitative.py +++ b/src/sakia/core/money/quantitative.py @@ -1,6 +1,7 @@ from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP, QObject, QLocale import asyncio + class Quantitative(): _NAME_STR_ = QT_TRANSLATE_NOOP('Quantitative', 'Units') _REF_STR_ = QT_TRANSLATE_NOOP('Quantitative', "{0} {1}{2}") @@ -36,8 +37,15 @@ class Quantitative(): async def differential(self): return await self.value() - def _to_si(self, value): + @staticmethod + def to_si(value, digits): prefixes = ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y', 'z', 'y'] + if value < 0: + value = -value + multiplier = -1 + else: + multiplier = 1 + scientific_value = value prefix_index = 0 prefix = "" @@ -48,10 +56,9 @@ class Quantitative(): if prefix_index < len(prefixes): prefix = prefixes[prefix_index] - localized_value = QLocale().toString(float(scientific_value), 'f', - self.app.preferences['digits_after_comma']) + localized_value = QLocale().toString(float(scientific_value * multiplier), 'f', digits) else: - localized_value = QLocale().toString(float(value), 'f', 0) + localized_value = QLocale().toString(float(value * multiplier), 'f', 0) return localized_value, prefix @@ -59,7 +66,7 @@ class Quantitative(): value = await self.value() prefix = "" if international_system: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Quantitative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', 0) @@ -76,7 +83,7 @@ class Quantitative(): value = await self.differential() prefix = "" if international_system: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Quantitative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', 0) diff --git a/src/sakia/core/money/relative.py b/src/sakia/core/money/relative.py index 1f4926cc0d293ac3c04be7f01fae72b0a270d3d6..29b7d3f0d001d87a8d75b1341df748b0adff35d7 100644 --- a/src/sakia/core/money/relative.py +++ b/src/sakia/core/money/relative.py @@ -1,7 +1,8 @@ from PyQt5.QtCore import QObject, QCoreApplication, QT_TRANSLATE_NOOP, QLocale import asyncio -class Relative(): + +class Relative: _NAME_STR_ = QT_TRANSLATE_NOOP('Relative', 'UD') _REF_STR_ = QT_TRANSLATE_NOOP('Relative', "{0} {1}UD {2}") _UNITS_STR_ = QT_TRANSLATE_NOOP('Relative', "UD {0}") @@ -39,8 +40,14 @@ class Relative(): async def differential(self): return await self.value() - def _to_si(self, value): + @staticmethod + def to_si(value, digits): prefixes = ['', 'd', 'c', 'm', 'µ', 'n', 'p', 'f', 'a', 'z', 'y'] + if value < 0: + value = -value + multiplier = -1 + else: + multiplier = 1 scientific_value = value prefix_index = 0 prefix = "" @@ -54,11 +61,9 @@ class Relative(): if prefix_index < len(prefixes): prefix = prefixes[prefix_index] - localized_value = QLocale().toString(float(scientific_value), 'f', - self.app.preferences['digits_after_comma']) + localized_value = QLocale().toString(float(scientific_value * multiplier), 'f', digits) else: - localized_value = QLocale().toString(float(value), 'f', - self.app.preferences['digits_after_comma']) + localized_value = QLocale().toString(float(value * multiplier), 'f', digits) return localized_value, prefix @@ -66,7 +71,7 @@ class Relative(): value = await self.value() prefix = "" if international_system: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) @@ -82,7 +87,7 @@ class Relative(): value = await self.differential() prefix = "" if international_system and value != 0: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) diff --git a/src/sakia/core/money/relative_zerosum.py b/src/sakia/core/money/relative_zerosum.py index b744682315f383c0211f09bedf9216ca53d9519c..5a6b823985ec04ade40327397fffe1337c2df790 100644 --- a/src/sakia/core/money/relative_zerosum.py +++ b/src/sakia/core/money/relative_zerosum.py @@ -2,6 +2,7 @@ from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP, QLocale from .relative import Relative import asyncio + class RelativeZSum: _NAME_STR_ = QT_TRANSLATE_NOOP('RelativeZSum', 'Relat Z-sum') _REF_STR_ = QT_TRANSLATE_NOOP('RelativeZSum', "{0} R0 {1}") @@ -22,23 +23,29 @@ class RelativeZSum: @classmethod def diff_units(cls, currency): - return RelativeZSum.units(currency) + return Relative.units(currency) async def value(self): """ Return relative value of amount minus the average value + t = last UD block + t-1 = penultimate UD block + M = Monetary mass + N = Members count + + zsum value = (value / UD(t)) - (( M(t-1) / N(t) ) / UD(t)) + :param int amount: Value :param sakia.core.community.Community community: Community instance :return: float """ ud_block = await self.community.get_ud_block() - if ud_block and ud_block['membersCount'] > 0: - monetary_mass = await self.community.monetary_mass() - dividend = await self.community.dividend() - median = monetary_mass / ud_block['membersCount'] - relative_value = self.amount / float(dividend) - relative_median = median / dividend + ud_block_minus_1 = await self.community.get_ud_block(1) + if ud_block_minus_1 and ud_block['membersCount'] > 0: + median = ud_block_minus_1['monetaryMass'] / ud_block['membersCount'] + relative_value = self.amount / float(ud_block['dividend']) + relative_median = median / ud_block['dividend'] else: relative_value = self.amount relative_median = 0 @@ -50,7 +57,11 @@ class RelativeZSum: async def localized(self, units=False, international_system=False): value = await self.value() - localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) + prefix = "" + if international_system: + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) + else: + localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) if units: return QCoreApplication.translate("RelativeZSum", RelativeZSum._REF_STR_)\ @@ -62,7 +73,11 @@ class RelativeZSum: async def diff_localized(self, units=False, international_system=False): value = await self.differential() - localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) + prefix = "" + if international_system and value != 0: + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) + else: + localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) if units: return QCoreApplication.translate("RelativeZSum", RelativeZSum._REF_STR_)\ diff --git a/src/sakia/core/net/api/bma/access.py b/src/sakia/core/net/api/bma/access.py index 34f87c2bffc6d69c0ebd4db6faee50d107d45c1f..f6d645e0654bb49e83a9d06ca12512a7def01d16 100644 --- a/src/sakia/core/net/api/bma/access.py +++ b/src/sakia/core/net/api/bma/access.py @@ -266,6 +266,7 @@ class BmaAccess(QObject): node = random.choice(nodes) req = request(node.endpoint.conn_handler(), **req_args) tries = 0 + json_data = None while tries < 3: try: json_data = await req.get(**get_args) @@ -279,7 +280,7 @@ class BmaAccess(QObject): except jsonschema.ValidationError as e: logging.debug(str(e)) tries += 1 - if len(nodes) == 0 or json_data is None: + if len(nodes) == 0 or not json_data: raise NoPeerAvailable("", len(nodes)) return json_data diff --git a/src/sakia/core/wallet.py b/src/sakia/core/wallet.py index de7ac9f3235724a03ab1021df91cd0b29b2416e1..fc95d1ec618624070ab2e51aa2cdd4518401820f 100644 --- a/src/sakia/core/wallet.py +++ b/src/sakia/core/wallet.py @@ -228,12 +228,10 @@ class Wallet(QObject): req_args={'number': blockid.number}) except ValueError as e: if '404' in str(e): - return (False, "Could not send transfer with null blockchain") + return False, "Could not send transfer with null blockchain" time = block['medianTime'] txid = len(block['transactions']) - key = None - logging.debug("Key : {0} : {1}".format(salt, password)) if self.walletid == 0: key = SigningKey(salt, password) else: @@ -266,12 +264,15 @@ class Wallet(QObject): self.caches[community.currency]._transfers.append(transfer) - result = self.tx_inputs(int(amount), community) - inputs = result[0] - self.caches[community.currency].available_sources = result[1][1:] + try: + result = self.tx_inputs(int(amount), community) + inputs = result[0] + self.caches[community.currency].available_sources = result[1][1:] + except NotEnoughMoneyError as e: + return False, str(e) logging.debug("Inputs : {0}".format(inputs)) - outputs = self.tx_outputs(recipient, amount, inputs) + outputs = self.tx_outputs(recipient, amount, inputs) logging.debug("Outputs : {0}".format(outputs)) tx = Transaction(PROTOCOL_VERSION, community.currency, [self.pubkey], inputs, diff --git a/src/sakia/gui/certification.py b/src/sakia/gui/certification.py index 64c46ace1aa5921dcd61031d25d344d00e0f339c..da2bbfba295e91475f53d1a45dcc6270f6b5abe8 100644 --- a/src/sakia/gui/certification.py +++ b/src/sakia/gui/certification.py @@ -36,8 +36,8 @@ class CertificationDialog(QDialog, Ui_CertificationDialog): for community in self.account.communities: self.combo_community.addItem(community.currency) - for contact in certifier.contacts: - self.combo_contact.addItem(contact['name']) + for contact_name in sorted([c['name'] for c in certifier.contacts], key=str.lower): + self.combo_contact.addItem(contact_name) if len(certifier.contacts) == 0: self.radio_pubkey.setChecked(True) self.radio_contact.setEnabled(False) @@ -53,8 +53,10 @@ class CertificationDialog(QDialog, Ui_CertificationDialog): @asyncify async def accept(self): if self.radio_contact.isChecked(): - index = self.combo_contact.currentIndex() - pubkey = self.account.contacts[index]['pubkey'] + for contact in self.account.contacts: + if contact['name'] == self.combo_contact.currentText(): + pubkey = contact['pubkey'] + break else: pubkey = self.edit_pubkey.text() diff --git a/src/sakia/gui/graphs/wot_tab.py b/src/sakia/gui/graphs/wot_tab.py index 311af103d0374774c2462a80ea99f7b0f3b1899a..ac9b934e6f0239b4bf0fe49436f8c2606791f93b 100644 --- a/src/sakia/gui/graphs/wot_tab.py +++ b/src/sakia/gui/graphs/wot_tab.py @@ -5,17 +5,17 @@ from PyQt5.QtWidgets import QWidget, QComboBox, QDialog from PyQt5.QtCore import pyqtSlot, QEvent, QLocale, QDateTime, pyqtSignal, QT_TRANSLATE_NOOP from ucoinpy.api import bma -from sakia.tools.exceptions import MembershipNotFoundError -from sakia.tools.decorators import asyncify, once_at_a_time, cancel_once_task -from sakia.core.graph import WoTGraph -from sakia.core.registry import BlockchainState -from sakia.gui.member import MemberDialog -from sakia.gui.certification import CertificationDialog -from sakia.gui.transfer import TransferMoneyDialog -from sakia.gui.contact import ConfigureContactDialog -from sakia.gen_resources.wot_tab_uic import Ui_WotTabWidget -from sakia.gui.widgets.busy import Busy -from sakia.tools.exceptions import NoPeerAvailable +from ...tools.exceptions import MembershipNotFoundError +from ...tools.decorators import asyncify, once_at_a_time, cancel_once_task +from ...core.graph import WoTGraph +from ...core.registry import BlockchainState +from ..member import MemberDialog +from ..certification import CertificationDialog +from ..transfer import TransferMoneyDialog +from ..contact import ConfigureContactDialog +from ...gen_resources.wot_tab_uic import Ui_WotTabWidget +from ..widgets.busy import Busy +from ...tools.exceptions import NoPeerAvailable class WotTabWidget(QWidget, Ui_WotTabWidget): @@ -69,8 +69,12 @@ class WotTabWidget(QWidget, Ui_WotTabWidget): def change_account(self, account, password_asker): self.cancel_once_tasks() + if self.account is not None: + self.account.certification_accepted.disconnect(self.refresh) self.account = account self.password_asker = password_asker + if self.account is not None: + self.account.certification_accepted.connect(self.refresh) def change_community(self, community): self.cancel_once_tasks() diff --git a/src/sakia/gui/identities_tab.py b/src/sakia/gui/identities_tab.py index 514827686286c1c3b3f6e6531b38d92d319da183..8968aac488ccd22e9c7a67f2a0e31f51513d109c 100644 --- a/src/sakia/gui/identities_tab.py +++ b/src/sakia/gui/identities_tab.py @@ -99,7 +99,7 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab): async def identity_context_menu(self, point): index = self.table_identities.indexAt(point) model = self.table_identities.model() - if index.row() < model.rowCount(): + if index.isValid() and index.row() < model.rowCount(): source_index = model.mapToSource(index) pubkey_col = model.sourceModel().columns_ids.index('pubkey') pubkey_index = model.sourceModel().index(source_index.row(), diff --git a/src/sakia/gui/informations_tab.py b/src/sakia/gui/informations_tab.py index 24dac8c7817969d41f19e31816b6dc38884e8395..bfad9b2f535dcc205a324538fe00a965aac780fd 100644 --- a/src/sakia/gui/informations_tab.py +++ b/src/sakia/gui/informations_tab.py @@ -6,7 +6,6 @@ Created on 31 janv. 2015 import logging import asyncio -import math from PyQt5.QtCore import QLocale, QDateTime, QEvent from PyQt5.QtWidgets import QWidget from ..gen_resources.informations_tab_uic import Ui_InformationsTabWidget @@ -14,6 +13,7 @@ from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task from ..tools.exceptions import NoPeerAvailable from .widgets import Busy + class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): """ classdocs @@ -23,8 +23,8 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): """ Constructor of the InformationsTabWidget - :param app: sakia.core.Application - :param community: sakia.core.Community + :param sakia.core.app.Application app: Application instance + :return: """ super().__init__() @@ -36,6 +36,10 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): self.busy.hide() def change_account(self, account): + """ + + :param sakia.core.app.Account account: Account instance selected + """ cancel_once_task(self, self.refresh_labels) self.account = account @@ -73,22 +77,29 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): if block_ud: # display float values - localized_ud = await self.account.current_ref(block_ud['dividend'], self.community, self.app).diff_localized() + localized_ud = await self.account.current_ref(block_ud['dividend'], + self.community, + self.app)\ + .diff_localized(True, self.app.preferences['international_system_of_units']) computed_dividend = await self.community.computed_dividend() # display float values localized_ud_plus_1 = await self.account.current_ref(computed_dividend, - self.community, self.app).diff_localized() + self.community, self.app)\ + .diff_localized(True, self.app.preferences['international_system_of_units']) localized_mass = await self.account.current_ref(block_ud['monetaryMass'], - self.community, self.app).diff_localized() + self.community, self.app)\ + .diff_localized(True, self.app.preferences['international_system_of_units']) if block_ud_minus_1: mass_minus_1 = (float(0) if block_ud['membersCount'] == 0 else block_ud_minus_1['monetaryMass'] / block_ud['membersCount']) localized_mass_minus_1_per_member = await self.account.current_ref(mass_minus_1, - self.community, self.app).diff_localized() + self.community, self.app)\ + .diff_localized(True, self.app.preferences['international_system_of_units']) localized_mass_minus_1 = await self.account.current_ref(block_ud_minus_1['monetaryMass'], - self.community, self.app).diff_localized() + self.community, self.app)\ + .diff_localized(True, self.app.preferences['international_system_of_units']) else: localized_mass_minus_1_per_member = QLocale().toString( @@ -109,6 +120,7 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): <tr><td align="right"><b>{:2.2%} / {:} days</b></td><td>{:}</td></tr> <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> </table> """).format( localized_ud, @@ -127,6 +139,12 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): params['dt'] / 86400, self.tr('Actual growth c = UD(t)/[M(t-1)/N(t)]'), + QLocale.toString( + QLocale(), + QDateTime.fromTime_t(block_ud_minus_1['medianTime']), + QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat) + ), + self.tr('Penultimate UD date and time (t-1)'), QLocale.toString( QLocale(), QDateTime.fromTime_t(block_ud['medianTime']), diff --git a/src/sakia/gui/process_cfg_account.py b/src/sakia/gui/process_cfg_account.py index 02e6ffcc9c7edf0daf460ff9c350d41158a05473..cfdd5f3bffb890ce976eeada8da5944fe96859dd 100644 --- a/src/sakia/gui/process_cfg_account.py +++ b/src/sakia/gui/process_cfg_account.py @@ -13,6 +13,8 @@ from ..models.communities import CommunitiesListModel from ..tools.exceptions import KeyAlreadyUsed, Error, NoPeerAvailable from PyQt5.QtWidgets import QDialog, QMessageBox +from PyQt5.QtCore import QRegExp +from PyQt5.QtGui import QRegExpValidator class Step(): @@ -144,6 +146,9 @@ class ProcessConfigureAccount(QDialog, Ui_AccountConfigurationDialog): # Set up the user interface from Designer. super().__init__() self.setupUi(self) + regexp = QRegExp('[A-Za-z0-9_-]*') + validator = QRegExpValidator(regexp) + self.edit_account_name.setValidator(validator) self.account = account self.password_asker = None self.app = app diff --git a/src/sakia/gui/transactions_tab.py b/src/sakia/gui/transactions_tab.py index 0b216371768491a90f35996ed46a2ec4f489d2d5..b35cf48c9538690e6699c68cfce87addf051c401 100644 --- a/src/sakia/gui/transactions_tab.py +++ b/src/sakia/gui/transactions_tab.py @@ -168,7 +168,7 @@ class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget): async def history_context_menu(self, point): index = self.table_history.indexAt(point) model = self.table_history.model() - if index.row() < model.rowCount(QModelIndex()): + if index.isValid() and index.row() < model.rowCount(QModelIndex()): menu = QMenu(self.tr("Actions"), self) source_index = model.mapToSource(index) state_col = model.sourceModel().columns_types.index('state') diff --git a/src/sakia/gui/transfer.py b/src/sakia/gui/transfer.py index 0e44a25ad15f9608b9fdce4f17c003ce9db5ad19..e97939ee51759746d6628e34d4fc24195c274b2f 100644 --- a/src/sakia/gui/transfer.py +++ b/src/sakia/gui/transfer.py @@ -51,8 +51,8 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): for wallet in self.account.wallets: self.combo_wallets.addItem(wallet.name) - for contact in sender.contacts: - self.combo_contact.addItem(contact['name']) + for contact_name in sorted([c['name'] for c in sender.contacts], key=str.lower): + self.combo_contact.addItem(contact_name) if len(self.account.contacts) == 0: self.combo_contact.setEnabled(False) @@ -93,8 +93,10 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): comment = self.edit_message.text() if self.radio_contact.isChecked(): - index = self.combo_contact.currentIndex() - recipient = self.account.contacts[index]['pubkey'] + for contact in self.account.contacts: + if contact['name'] == self.combo_contact.currentText(): + recipient = contact['pubkey'] + break else: recipient = self.edit_pubkey.text() amount = self.spinbox_amount.value() diff --git a/src/sakia/tests/functional/process_cfg_account/test_add_account.py b/src/sakia/tests/functional/process_cfg_account/test_add_account.py index 3143f9ee1a74ce283848b92155477857c49b01d3..8e7c5dc90512d03558e414eee0e4aa88c58a4187 100644 --- a/src/sakia/tests/functional/process_cfg_account/test_add_account.py +++ b/src/sakia/tests/functional/process_cfg_account/test_add_account.py @@ -86,6 +86,7 @@ class ProcessAddCommunity(unittest.TestCase, QuamashTest): self.assertEqual(self.application.current_account.name, "test") self.assertEqual(self.application.preferences['account'], "test") self.assertEqual(len(self.application.current_account.wallets), 1) + yield from asyncio.sleep(0) self.lp.call_later(10, close_dialog) asyncio.ensure_future(exec_test()) diff --git a/src/sakia/tests/mocks/bma/nice_blockchain.py b/src/sakia/tests/mocks/bma/nice_blockchain.py index 2029188cd127134d62179b0a4aa6dfaba9efc82f..1d012287b6c7e2ac7ef289b0f747af68b0db21c2 100644 --- a/src/sakia/tests/mocks/bma/nice_blockchain.py +++ b/src/sakia/tests/mocks/bma/nice_blockchain.py @@ -41,7 +41,7 @@ bma_membership_john = { [ { - "version": "1", + "version": 1, "currency": "test_currency", "membership": "IN", "blockNumber": 0,