67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
from threading import Thread
|
|
|
|
from asciimatics.exceptions import NextScene
|
|
from asciimatics.widgets import Layout, Label, Button, Divider
|
|
import requests
|
|
|
|
from .CeoFrame import CeoFrame
|
|
|
|
|
|
class ResultView(CeoFrame):
|
|
def __init__(self, screen, width, height, model):
|
|
super().__init__(
|
|
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._add_buttons()
|
|
self.fix()
|
|
|
|
def _add_buttons(self):
|
|
layout = Layout([100])
|
|
self.add_layout(layout)
|
|
layout.add_widget(Divider())
|
|
|
|
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 _show_msg(self, text: str = ''):
|
|
for line in text.splitlines():
|
|
self._summary_layout.add_widget(Label(line), 1)
|
|
|
|
# override this method in child classes if desired
|
|
def show_result(self, resp: requests.Response):
|
|
self._show_msg('The operation was successfully performed.')
|
|
|
|
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')
|