|
|
|
@ -1,7 +1,5 @@ |
|
|
|
|
from threading import Thread |
|
|
|
|
|
|
|
|
|
from asciimatics.exceptions import NextScene |
|
|
|
|
from asciimatics.widgets import Layout, Label, Button, Divider |
|
|
|
|
from asciimatics.widgets import Layout, Label |
|
|
|
|
import requests |
|
|
|
|
|
|
|
|
|
from .CeoFrame import CeoFrame |
|
|
|
@ -13,54 +11,32 @@ class ResultView(CeoFrame): |
|
|
|
|
screen, height, width, model, 'Result', |
|
|
|
|
on_load=self._resultview_on_load, title='Result', |
|
|
|
|
) |
|
|
|
|
layout = Layout([1, 10]) |
|
|
|
|
self.add_layout(layout) |
|
|
|
|
layout.add_widget(Label(''), 1) |
|
|
|
|
self._status_label = Label('Sending request... ') |
|
|
|
|
layout.add_widget(self._status_label, 1) |
|
|
|
|
layout.add_widget(Label(''), 1) |
|
|
|
|
self._summary_layout = Layout([1, 10], fill_frame=True) |
|
|
|
|
self.add_layout(self._summary_layout) |
|
|
|
|
self._show_msg() |
|
|
|
|
|
|
|
|
|
self._add_buttons() |
|
|
|
|
self.fix() |
|
|
|
|
|
|
|
|
|
def _add_buttons(self): |
|
|
|
|
layout = Layout([100]) |
|
|
|
|
self.add_layout(layout) |
|
|
|
|
layout.add_widget(Divider()) |
|
|
|
|
self.add_buttons(on_next_excl=self._next) |
|
|
|
|
|
|
|
|
|
layout = Layout([1, 1]) |
|
|
|
|
self.add_layout(layout) |
|
|
|
|
self._next_btn = Button('Next', self._next) |
|
|
|
|
self._next_btn.disabled = True |
|
|
|
|
layout.add_widget(self._next_btn, 1) |
|
|
|
|
def _next(self): |
|
|
|
|
self._model.reset() |
|
|
|
|
raise NextScene('Welcome') |
|
|
|
|
|
|
|
|
|
def _show_msg(self, text: str = ''): |
|
|
|
|
def _show_msg(self, text: str = '\n', center=False): |
|
|
|
|
for line in text.splitlines(): |
|
|
|
|
self._summary_layout.add_widget(Label(line), 1) |
|
|
|
|
align = '^' if center else '<' |
|
|
|
|
self._summary_layout.add_widget(Label(line, align=align), 1) |
|
|
|
|
|
|
|
|
|
# override this method in child classes if desired |
|
|
|
|
def show_result(self, resp: requests.Response): |
|
|
|
|
self._show_msg('The operation was successfully performed.') |
|
|
|
|
self._show_msg('The operation was successfully performed.', center=True) |
|
|
|
|
|
|
|
|
|
def _resultview_on_load(self): |
|
|
|
|
def target(): |
|
|
|
|
try: |
|
|
|
|
resp = self._model.deferred_req() |
|
|
|
|
self._status_label.text += 'Done.' |
|
|
|
|
self._next_btn.disabled = False |
|
|
|
|
if resp.status_code != 200: |
|
|
|
|
self._show_msg('An error occurred:') |
|
|
|
|
self._show_msg(resp.text.rstrip()) |
|
|
|
|
return |
|
|
|
|
self.show_result(resp) |
|
|
|
|
finally: |
|
|
|
|
self.fix() |
|
|
|
|
self.reset() |
|
|
|
|
self._model.screen.force_update() |
|
|
|
|
Thread(target=target).start() |
|
|
|
|
|
|
|
|
|
def _next(self): |
|
|
|
|
self._model.reset() |
|
|
|
|
raise NextScene('Welcome') |
|
|
|
|
resp = self._model.deferred_req_resp |
|
|
|
|
try: |
|
|
|
|
if resp.status_code != 200: |
|
|
|
|
self._show_msg('An error occurred:') |
|
|
|
|
self._show_msg(resp.text.rstrip()) |
|
|
|
|
return |
|
|
|
|
self.show_result(resp) |
|
|
|
|
finally: |
|
|
|
|
self.fix() |
|
|
|
|