wizard: also push final state on the stack
This commit is contained in:
@@ -66,39 +66,45 @@ class AbstractWizard:
|
|||||||
else:
|
else:
|
||||||
raise Exception(f'accept handler for view {view} is not callable')
|
raise Exception(f'accept handler for view {view} is not callable')
|
||||||
|
|
||||||
|
is_finished = False
|
||||||
if 'next' not in nav:
|
if 'next' not in nav:
|
||||||
# finished
|
# finished
|
||||||
self.finished(wizard_data)
|
is_finished = True
|
||||||
return WizardViewState(None, wizard_data, {})
|
# self.finished(wizard_data)
|
||||||
|
# return WizardViewState(None, wizard_data, {})
|
||||||
view_next = nav['next']
|
new_view = WizardViewState(None, wizard_data, {})
|
||||||
if isinstance(view_next, str):
|
|
||||||
# string literal
|
|
||||||
new_view = WizardViewState(view_next, wizard_data, {})
|
|
||||||
elif callable(view_next):
|
|
||||||
# handler fn based
|
|
||||||
nv = view_next(wizard_data)
|
|
||||||
self._logger.debug(repr(nv))
|
|
||||||
|
|
||||||
# append wizard_data and params if not returned
|
|
||||||
if isinstance(nv, str):
|
|
||||||
new_view = WizardViewState(nv, wizard_data, {})
|
|
||||||
elif len(nv) == 1:
|
|
||||||
new_view = WizardViewState(nv[0], wizard_data, {})
|
|
||||||
elif len(nv) == 2:
|
|
||||||
new_view = WizardViewState(nv[0], nv[1], {})
|
|
||||||
else:
|
|
||||||
new_view = nv
|
|
||||||
else:
|
else:
|
||||||
raise Exception(f'next handler for view {view} is not callable nor a string literal')
|
view_next = nav['next']
|
||||||
|
if isinstance(view_next, str):
|
||||||
|
# string literal
|
||||||
|
new_view = WizardViewState(view_next, wizard_data, {})
|
||||||
|
elif callable(view_next):
|
||||||
|
# handler fn based
|
||||||
|
nv = view_next(wizard_data)
|
||||||
|
self._logger.debug(repr(nv))
|
||||||
|
|
||||||
self._logger.debug(f'resolve_next view is {new_view}')
|
# append wizard_data and params if not returned
|
||||||
|
if isinstance(nv, str):
|
||||||
|
new_view = WizardViewState(nv, wizard_data, {})
|
||||||
|
elif len(nv) == 1:
|
||||||
|
new_view = WizardViewState(nv[0], wizard_data, {})
|
||||||
|
elif len(nv) == 2:
|
||||||
|
new_view = WizardViewState(nv[0], nv[1], {})
|
||||||
|
else:
|
||||||
|
new_view = nv
|
||||||
|
else:
|
||||||
|
raise Exception(f'next handler for view {view} is not callable nor a string literal')
|
||||||
|
|
||||||
|
self._logger.debug(f'resolve_next view is {new_view}')
|
||||||
|
|
||||||
self._stack.append(copy.deepcopy(self._current))
|
self._stack.append(copy.deepcopy(self._current))
|
||||||
self._current = new_view
|
self._current = new_view
|
||||||
|
|
||||||
self.log_stack()
|
self.log_stack()
|
||||||
|
|
||||||
|
if is_finished:
|
||||||
|
self.finished(wizard_data)
|
||||||
|
|
||||||
return new_view
|
return new_view
|
||||||
|
|
||||||
def resolve_prev(self):
|
def resolve_prev(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user