| 41 | |
| 42 | |
| 43 | class WizardApp(Application): |
| 44 | def __init__( |
| 45 | self, |
| 46 | layout, |
| 47 | values, |
| 48 | traverser, |
| 49 | executor, |
| 50 | style=None, |
| 51 | key_bindings=None, |
| 52 | full_screen=True, |
| 53 | output=None, |
| 54 | app_input=None, |
| 55 | file_io=None, |
| 56 | ): |
| 57 | self.values = values |
| 58 | self.traverser = traverser |
| 59 | self.executor = executor |
| 60 | if style is None: |
| 61 | style = get_default_style() |
| 62 | if key_bindings is None: |
| 63 | key_bindings = get_default_keybindings() |
| 64 | self.details_visible = False |
| 65 | self.error_bar_visible = None |
| 66 | self.save_details_visible = False |
| 67 | if file_io is None: |
| 68 | file_io = FileIO() |
| 69 | self.file_io = file_io |
| 70 | super().__init__( |
| 71 | layout=layout, |
| 72 | style=style, |
| 73 | key_bindings=key_bindings, |
| 74 | full_screen=full_screen, |
| 75 | output=output, |
| 76 | input=app_input, |
| 77 | ) |
| 78 | |
| 79 | def run(self, pre_run=None, **kwargs): |
| 80 | loop = new_event_loop() |
| 81 | try: |
| 82 | set_event_loop(loop) |
| 83 | loop.set_exception_handler(self._handle_exception) |
| 84 | f = self.run_async(pre_run=pre_run, set_exception_handler=False) |
| 85 | return loop.run_until_complete(f) |
| 86 | finally: |
| 87 | loop.close() |
| 88 | |
| 89 | def _handle_exception(self, loop, context): |
| 90 | self.exit(exception=UnexpectedWizardException(context['exception'])) |
| 91 | |
| 92 | |
| 93 | class WizardTraverser: |