pyceo/ceo/tui/ResultView.py

43 lines
1.3 KiB
Python

from asciimatics.exceptions import NextScene
from asciimatics.widgets import Layout, Label
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',
)
self._summary_layout = Layout([1, 10], fill_frame=True)
self.add_layout(self._summary_layout)
self._show_msg()
self.add_buttons(on_next_excl=self._next)
def _next(self):
self._model.reset()
raise NextScene('Welcome')
def _show_msg(self, text: str = '\n', center=False):
for line in text.splitlines():
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.', center=True)
def _resultview_on_load(self):
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()