From 14494c13dcb42c24c77bedb8895053b1cf70d314 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 15 Aug 2025 20:46:24 +0000 Subject: [PATCH] qt wizard: start: merge "start_viewstate" and "initial_data" --- electrum/gui/qt/wizard/wallet.py | 2 +- electrum/gui/qt/wizard/wizard.py | 9 ++---- electrum/wizard.py | 52 +++++++++++++++++--------------- tests/test_wizard.py | 3 +- 4 files changed, 34 insertions(+), 32 deletions(-) diff --git a/electrum/gui/qt/wizard/wallet.py b/electrum/gui/qt/wizard/wallet.py index 839d6a883..eecc68f85 100644 --- a/electrum/gui/qt/wizard/wallet.py +++ b/electrum/gui/qt/wizard/wallet.py @@ -57,7 +57,7 @@ class QEKeystoreWizard(KeystoreWizard, QEAbstractWizard, MessageBoxMixin): config: 'SimpleConfig', app: 'QElectrumApplication', plugins: 'Plugins', - start_viewstate: WizardViewState = None + start_viewstate: WizardViewState = None, ): assert 'wallet_type' in start_viewstate.wizard_data, 'wallet_type required' diff --git a/electrum/gui/qt/wizard/wizard.py b/electrum/gui/qt/wizard/wizard.py index 4f6c5afa3..eb0e74d86 100644 --- a/electrum/gui/qt/wizard/wizard.py +++ b/electrum/gui/qt/wizard/wizard.py @@ -124,10 +124,7 @@ class QEAbstractWizard(QDialog, MessageBoxMixin): @pyqtSlot() def strt(self): - if self.start_viewstate is not None: - viewstate = self._current = self.start_viewstate - else: - viewstate = self.start_wizard() + viewstate = self.start_wizard(start_viewstate=self.start_viewstate) self.load_next_component(viewstate.view, viewstate.wizard_data, viewstate.params) self.set_default_focus() @@ -236,8 +233,8 @@ class QEAbstractWizard(QDialog, MessageBoxMixin): self.prev() # rollback the submit above raise e - def start_wizard(self) -> 'WizardViewState': - self.start() + def start_wizard(self, *, start_viewstate: Optional['WizardViewState'] = None) -> 'WizardViewState': + self.start(start_viewstate=start_viewstate) return self._current def view_to_component(self, view) -> QWidget: diff --git a/electrum/wizard.py b/electrum/wizard.py index 34aea668a..0a475b5f5 100644 --- a/electrum/wizard.py +++ b/electrum/wizard.py @@ -257,13 +257,14 @@ class KeystoreWizard(AbstractWizard): # one at a time return True - def start(self, *, initial_data: dict = None) -> WizardViewState: - if initial_data is None: - initial_data = {} + def start(self, *, start_viewstate: WizardViewState = None) -> WizardViewState: self.reset() - start_view = 'keystore_type' - params = self.navmap[start_view].get('params', {}) - self._current = WizardViewState(start_view, initial_data, params) + if start_viewstate is None: + start_view = 'keystore_type' + params = self.navmap[start_view].get('params', {}) + self._current = WizardViewState(start_view, {}, params) + else: + self._current = start_viewstate return self._current # returns (sub)dict of current cosigner (or root if first) @@ -487,13 +488,14 @@ class NewWalletWizard(KeystoreWizard): # todo: load only if needed, like hw plugins self.plugins.load_plugin_by_name('trustedcoin') - def start(self, *, initial_data: dict = None) -> WizardViewState: - if initial_data is None: - initial_data = {} + def start(self, *, start_viewstate: WizardViewState = None) -> WizardViewState: self.reset() - start_view = 'wallet_name' - params = self.navmap[start_view].get('params', {}) - self._current = WizardViewState(start_view, initial_data, params) + if start_viewstate is None: + start_view = 'wallet_name' + params = self.navmap[start_view].get('params', {}) + self._current = WizardViewState(start_view, {}, params) + else: + self._current = start_viewstate return self._current def is_single_password(self) -> bool: @@ -861,13 +863,14 @@ class ServerConnectWizard(AbstractWizard): if wizard_data.get('autoconnect') is not None: self._daemon.config.NETWORK_AUTO_CONNECT = wizard_data.get('autoconnect') - def start(self, *, initial_data: dict = None) -> WizardViewState: - if initial_data is None: - initial_data = {} + def start(self, *, start_viewstate: WizardViewState = None) -> WizardViewState: self.reset() - start_view = 'welcome' - params = self.navmap[start_view].get('params', {}) - self._current = WizardViewState(start_view, initial_data, params) + if start_viewstate is None: + start_view = 'welcome' + params = self.navmap[start_view].get('params', {}) + self._current = WizardViewState(start_view, {}, params) + else: + self._current = start_viewstate return self._current @@ -888,11 +891,12 @@ class TermsOfUseWizard(AbstractWizard): def accept_terms_of_use(self, _): self._config.TERMS_OF_USE_ACCEPTED = TERMS_OF_USE_LATEST_VERSION - def start(self, *, initial_data: dict = None) -> WizardViewState: - if initial_data is None: - initial_data = {} + def start(self, *, start_viewstate: WizardViewState = None) -> WizardViewState: self.reset() - start_view = 'terms_of_use' - params = self.navmap[start_view].get('params', {}) - self._current = WizardViewState(start_view, initial_data, params) + if start_viewstate is None: + start_view = 'terms_of_use' + params = self.navmap[start_view].get('params', {}) + self._current = WizardViewState(start_view, {}, params) + else: + self._current = start_viewstate return self._current diff --git a/tests/test_wizard.py b/tests/test_wizard.py index 068e91512..e1872f6ac 100644 --- a/tests/test_wizard.py +++ b/tests/test_wizard.py @@ -140,7 +140,8 @@ class KeystoreWizardTestCase(WizardTestCase): def _wizard_for(self, *, wallet_type: str = 'standard', hww: bool = False) -> tuple[KeystoreWizard, WizardViewState]: w = KeystoreWizardTestCase.TKeystoreWizard(self.plugins) - v = w.start(initial_data={'wallet_type': wallet_type}) + start_viewstate = WizardViewState('keystore_type', {'wallet_type': wallet_type}, {}) + v = w.start(start_viewstate=start_viewstate) self.assertEqual('keystore_type', v.view) d = v.wizard_data if hww: