diff --git a/src/sakia/app.py b/src/sakia/app.py index 5797ead42b9786034e6be6562e3c01751dd8019c..7adcf4864012d3d7bc33af6e87a9b76b454a8513 100644 --- a/src/sakia/app.py +++ b/src/sakia/app.py @@ -205,3 +205,6 @@ class Application(QObject): def change_referential(self, index): self.current_ref = Referentials[index] self.referential_changed.emit() + + def connection_exists(self): + return len(ConnectionsProcessor.instanciate(self).connections()) > 0 diff --git a/src/sakia/data/entities/identity.py b/src/sakia/data/entities/identity.py index e0bf250f249587d8d5f2805ed308940a61ddb16a..d070760bc15a3b3985a4000d0b3195b46f476471 100644 --- a/src/sakia/data/entities/identity.py +++ b/src/sakia/data/entities/identity.py @@ -1,7 +1,6 @@ import attr from duniterpy.documents import block_uid, BlockUID from duniterpy.documents import Identity as IdentityDoc -from duniterpy import PROTOCOL_VERSION @attr.s() diff --git a/src/sakia/main.py b/src/sakia/main.py index fd6f28ec413751c224973240a09fdb54ad137e0e..c5141cde6f6c84db617742fadf21e1f0b33c849c 100755 --- a/src/sakia/main.py +++ b/src/sakia/main.py @@ -91,6 +91,9 @@ if __name__ == '__main__': with loop: app = Application.startup(sys.argv, sakia, loop) + if not app.connection_exists(): + conn_controller = ConnectionConfigController.create(None, app) + loop.run_until_complete(conn_controller.async_exec()) window = MainWindowController.startup(app) loop.run_forever() try: diff --git a/src/sakia/money/__init__.py b/src/sakia/money/__init__.py index dda0375b6aecb776c1534da5f4fff6a09546ac1b..05a4b506a6ff4f03c503992f6cae11774a6a4ab1 100644 --- a/src/sakia/money/__init__.py +++ b/src/sakia/money/__init__.py @@ -2,6 +2,5 @@ from .quantitative import Quantitative from .relative import Relative from .quant_zerosum import QuantitativeZSum from .relative_zerosum import RelativeZSum -from .dividend_per_day import DividendPerDay -Referentials = (Quantitative, Relative, QuantitativeZSum, RelativeZSum, DividendPerDay) +Referentials = (Quantitative, Relative, QuantitativeZSum, RelativeZSum) diff --git a/src/sakia/money/base_referential.py b/src/sakia/money/base_referential.py index 4fd504cd025333d8cad1f1952906d47676fdb9c3..c4da27108983a1022409e24a4eebd65e5fe10d87 100644 --- a/src/sakia/money/base_referential.py +++ b/src/sakia/money/base_referential.py @@ -23,28 +23,28 @@ class BaseReferential: @classmethod def translated_name(self): - pass + raise NotImplementedError() @property def units(self): - pass + raise NotImplementedError() @property def diff_units(self): - pass + raise NotImplementedError() def value(self): - pass + raise NotImplementedError() def differential(self): - pass + raise NotImplementedError() @staticmethod def to_si(value, digits): - pass + raise NotImplementedError() def localized(self, units=False, international_system=False): - pass + raise NotImplementedError() def diff_localized(self, units=False, international_system=False): - pass + raise NotImplementedError() diff --git a/src/sakia/money/dividend_per_day.py b/src/sakia/money/dividend_per_day.py deleted file mode 100644 index 3e2da29a105d81af619fc37907df76411b99e553..0000000000000000000000000000000000000000 --- a/src/sakia/money/dividend_per_day.py +++ /dev/null @@ -1,107 +0,0 @@ -from .base_referential import BaseReferential -from .udd_to_past import UDDToPast -from .currency import shortened -from ..data.processors import BlockchainProcessor - -from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP, QLocale - - -class DividendPerDay(BaseReferential): - _NAME_STR_ = QT_TRANSLATE_NOOP('DividendPerDay', 'UDD') - _REF_STR_ = QT_TRANSLATE_NOOP('DividendPerDay', "{0} {1}UDD {2}") - _UNITS_STR_ = QT_TRANSLATE_NOOP('DividendPerDay', "UDD {0}") - _FORMULA_STR_ = QT_TRANSLATE_NOOP('DividendPerDay', - """UDD(t) = (Q * 100) / (UD(t) / DT) - <br > - <table> - <tr><td>R</td><td>Dividend per day in percent</td></tr> - <tr><td>t</td><td>Last UD time</td></tr> - <tr><td>Q</td><td>Quantitative value</td></tr> - <tr><td>UD</td><td>Universal Dividend</td></tr> - <tr><td>DT</td><td>Delay between two UD in days</td></tr> - </table>""" - ) - _DESCRIPTION_STR_ = QT_TRANSLATE_NOOP('DividendPerDay', - """Universal Dividend per Day displayed in percent. - The purpose is to have a default unit that is easy to use and understand. - 100 UDD equal the Universal Dividend created per day. - """.replace('\n', '<br >')) - - def __init__(self, amount, currency, app, block_number=None): - super().__init__(amount, currency, app, block_number) - self._blockchain_processor = BlockchainProcessor.instanciate(self.app) - - @classmethod - def instance(cls, amount, currency, app, block_number=None): - if app.parameters.forgetfulness: - return cls(amount, currency, app, block_number) - else: - return UDDToPast(amount, currency, app, block_number) - - @classmethod - def translated_name(cls): - return QCoreApplication.translate('DividendPerDay', DividendPerDay._NAME_STR_) - - @property - def units(self): - return QCoreApplication.translate("DividendPerDay", DividendPerDay._UNITS_STR_).format(shortened(self.currency)) - - @property - def formula(self): - return QCoreApplication.translate('DividendPerDay', DividendPerDay._FORMULA_STR_) - - @property - def description(self): - return QCoreApplication.translate("DividendPerDay", DividendPerDay._DESCRIPTION_STR_) - - @property - def diff_units(self): - return self.units - - def value(self): - """ - Return relative value of amount - - value = (Q * 100) / R - Q = Quantitative value - R = UD(t) of one day - t = last UD block time - - :param sakia.core.community.Community community: Community instance - :return: float - """ - dividend, base = self._blockchain_processor.last_ud(self.currency) - params = self._blockchain_processor.parameters(self.currency) - if dividend > 0: - return (self.amount * 100) / (float(dividend * (10**base)) / (params.dt / 86400)) - else: - return self.amount - - def differential(self): - return self.value() - - def localized(self, units=False, international_system=False): - value = self.value() - prefix = "" - localized_value = QLocale().toString(float(value), 'f', self.app.parameters.digits_after_comma) - - if units or international_system: - return QCoreApplication.translate("Relative", DividendPerDay._REF_STR_) \ - .format(localized_value, - prefix, - shortened(self.currency) if units else "") - else: - return localized_value - - def diff_localized(self, units=False, international_system=False): - value = self.differential() - prefix = "" - localized_value = QLocale().toString(float(value), 'f', self.app.parameters.digits_after_comma) - - if units or international_system: - return QCoreApplication.translate("Relative", DividendPerDay._REF_STR_) \ - .format(localized_value, - prefix, - shortened(self.currency) if units else "") - else: - return localized_value diff --git a/src/sakia/money/relative.py b/src/sakia/money/relative.py index ddb18de126a28ff60a1bbc33ee35766b03914229..648ff427d4c343e37e6357822e51ee0983e86f51 100644 --- a/src/sakia/money/relative.py +++ b/src/sakia/money/relative.py @@ -1,5 +1,4 @@ from .base_referential import BaseReferential -from .relative_to_past import RelativeToPast from .currency import shortened from ..data.processors import BlockchainProcessor diff --git a/src/sakia/money/relative_to_past.py b/src/sakia/money/relative_to_past.py deleted file mode 100644 index 2062c57628061c8a64c723e7794386df0aa389fb..0000000000000000000000000000000000000000 --- a/src/sakia/money/relative_to_past.py +++ /dev/null @@ -1,119 +0,0 @@ -from PyQt5.QtCore import QObject, QCoreApplication, QT_TRANSLATE_NOOP, QLocale, QDateTime -from .base_referential import BaseReferential -from .currency import shortened -from ..data.processors import BlockchainProcessor - - -class RelativeToPast(BaseReferential): - _NAME_STR_ = QT_TRANSLATE_NOOP('RelativeToPast', 'Past UD') - _REF_STR_ = QT_TRANSLATE_NOOP('RelativeToPast', "{0} {1}UD({2}) {3}") - _UNITS_STR_ = QT_TRANSLATE_NOOP('RelativeToPast', "UD({0}) {1}") - _FORMULA_STR_ = QT_TRANSLATE_NOOP('RelativeToPast', - """R = Q / UD(t) - <br > - <table> - <tr><td>R</td><td>Relative value</td></tr> - <tr><td>Q</td><td>Quantitative value</td></tr> - <tr><td>UD</td><td>Universal Dividend</td></tr> - <tr><td>t</td><td>Time when the value appeared</td></tr> - </table>""" - ) - _DESCRIPTION_STR_ = QT_TRANSLATE_NOOP('RelativeToPast', - """Relative referential using UD at the Time when the value appeared. - Relative value R is calculated by dividing the quantitative value Q by the - Universal Dividend UD at the Time when the value appeared. - All past UD created are displayed with a value of 1 UD. - This referential is practical to remember what was the value at the Time. - """.replace('\n', '<br >')) - - def __init__(self, amount, currency, app, block_number=None): - super().__init__(amount, currency, app, block_number) - self._blockchain_processor = BlockchainProcessor.instanciate(self.app) - - @classmethod - def translated_name(cls): - return QCoreApplication.translate('RelativeToPast', RelativeToPast._NAME_STR_) - - @property - def units(self): - return QCoreApplication.translate("RelativeToPast", RelativeToPast._UNITS_STR_).format('t', - shortened(self.currency)) - @property - def formula(self): - return QCoreApplication.translate('RelativeToPast', RelativeToPast._FORMULA_STR_) - - @property - def description(self): - return QCoreApplication.translate("RelativeToPast", RelativeToPast._DESCRIPTION_STR_) - - @property - def diff_units(self): - return self.units - - def value(self): - """ - Return relative to past value of amount - :return: float - """ - dividend = self.community.dividend() - if dividend > 0: - return self.amount / float(dividend) - else: - return self.amount - - def differential(self): - """ - Return relative to past differential value of amount - :return: float - """ - dividend = self.community.dividend(self._block_number) - if dividend > 0: - return self.amount / float(dividend) - else: - return self.amount - - def localized(self, units=False, international_system=False): - from . import Relative - value = self.value() - last_ud_time = self._blockchain_processor.last_ud_time(self.currency) - 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 or international_system: - return QCoreApplication.translate("RelativeToPast", RelativeToPast._REF_STR_) \ - .format(localized_value, - prefix, - QLocale.toString( - QLocale(), - QDateTime.fromTime_t(last_ud_time).date(), - QLocale.dateFormat(QLocale(), QLocale.ShortFormat) - ), - shortened(self.currency) if units else "") - else: - return localized_value - - def diff_localized(self, units=False, international_system=False): - from . import Relative - value = self.differential() - block = self.community.get_ud_block(0, self._block_number) - 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 or international_system: - return QCoreApplication.translate("RelativeToPast", RelativeToPast._REF_STR_)\ - .format(localized_value, - prefix, - QLocale.toString( - QLocale(), - QDateTime.fromTime_t(block['medianTime']).date(), - QLocale.dateFormat(QLocale(), QLocale.ShortFormat) - ), - shortened(self.currency) if units else "") - else: - return localized_value diff --git a/src/sakia/money/udd_to_past.py b/src/sakia/money/udd_to_past.py deleted file mode 100644 index 4c71afff0578f8126bc746c3ba5d8f32cd0f95b9..0000000000000000000000000000000000000000 --- a/src/sakia/money/udd_to_past.py +++ /dev/null @@ -1,139 +0,0 @@ -from PyQt5.QtCore import QObject, QCoreApplication, QT_TRANSLATE_NOOP, QLocale, QDateTime -from .base_referential import BaseReferential -from .currency import shortened -from ..data.processors import BlockchainProcessor - - -class UDDToPast(BaseReferential): - _NAME_STR_ = QT_TRANSLATE_NOOP('UDDToPast', 'Past UUD') - _REF_STR_ = QT_TRANSLATE_NOOP('UDDToPast', "{0} {1}UUD({2}) {3}") - _UNITS_STR_ = QT_TRANSLATE_NOOP('UDDToPast', "UUD({0}) {1}") - _FORMULA_STR_ = QT_TRANSLATE_NOOP('UDDToPast', - """R = Q / UD(t) - <br > - <table> - <tr><td>R</td><td>Dividend per day in percent</td></tr> - <tr><td>t</td><td>Last UD time</td></tr> - <tr><td>Q</td><td>Quantitative value</td></tr> - <tr><td>UD</td><td>Universal Dividend</td></tr> - <tr><td>t</td><td>Time when the value appeared</td></tr> - <tr><td>DT</td><td>Delay between two UD in days</td></tr> - </table>>""" - ) - _DESCRIPTION_STR_ = QT_TRANSLATE_NOOP('UDDToPast', - """Universal Dividend per Day displayed in percent, using UD at the Time - when the value appeared. - The purpose is to have a default unit that is easy to use and understand. - 100 UDD equal the Universal Dividend created per day. - Relative referential - Relative value R is calculated by dividing the quantitative value Q by the - """.replace('\n', '<br >')) - - def __init__(self, amount, currency, app, block_number=None): - super().__init__(amount, currency, app, block_number) - self._blockchain_processor = BlockchainProcessor.instanciate(self.app) - - @classmethod - def translated_name(cls): - return QCoreApplication.translate('UDDToPast', UDDToPast._NAME_STR_) - - @property - def units(self): - return QCoreApplication.translate("UDDToPast", UDDToPast._UNITS_STR_).format('t', self.community.short_currency) - @property - def formula(self): - return QCoreApplication.translate('UDDToPast', UDDToPast._FORMULA_STR_) - - @property - def description(self): - return QCoreApplication.translate("UDDToPast", UDDToPast._DESCRIPTION_STR_) - - @property - def diff_units(self): - return self.units - - def value(self): - """ - Return relative value of amount - - value = (Q * 100) / R - Q = Quantitative value - R = UD(t) of one day - t = last UD block time - - :param int amount: Value - :param sakia.core.community.Community community: Community instance - :return: float - """ - dividend = self.community.dividend() - params = self.community.parameters() - if dividend > 0: - return (self.amount * 100) / (float(dividend) / (params['dt'] / 86400)) - else: - return self.amount - - def differential(self): - """ - Return relative value of amount - - value = (Q * 100) / R - Q = Quantitative value - R = UD(t) of one day - t = UD block time of when the value was created - - :param int amount: Value - :param sakia.core.community.Community community: Community instance - :return: float - """ - dividend = self.community.dividend(self._block_number) - params = self.community.parameters() - if dividend > 0: - return (self.amount * 100) / (float(dividend) / (params['dt'] / 86400)) - else: - return self.amount - - def localized(self, units=False, international_system=False): - from . import Relative - value = self.value() - block = self.community.get_block() - 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 or international_system: - return QCoreApplication.translate("UDDToPast", UDDToPast._REF_STR_) \ - .format(localized_value, - prefix, - QLocale.toString( - QLocale(), - QDateTime.fromTime_t(block['medianTime']).date(), - QLocale.dateFormat(QLocale(), QLocale.ShortFormat) - ), - self.community.short_currency if units else "") - else: - return localized_value - - def diff_localized(self, units=False, international_system=False): - from . import Relative - value = self.differential() - block = self.community.get_block(self._block_number) - 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 or international_system: - return QCoreApplication.translate("UDDToPast", UDDToPast._REF_STR_)\ - .format(localized_value, - prefix, - QLocale.toString( - QLocale(), - QDateTime.fromTime_t(block['medianTime']).date(), - QLocale.dateFormat(QLocale(), QLocale.ShortFormat) - ), - self.community.short_currency if units else "") - else: - return localized_value