40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
from threading import Thread
|
|
|
|
from .Controller import Controller
|
|
import ceo.tui.utils as tui_utils
|
|
from ceo.tui.views import SyncResponseView
|
|
|
|
|
|
class SyncRequestController(Controller):
|
|
def __init__(self, model, app):
|
|
super().__init__(model, app)
|
|
self.request_in_progress = False
|
|
|
|
def get_resp(self):
|
|
# To be implemented by child classes
|
|
raise NotImplementedError()
|
|
|
|
def get_response_view(self):
|
|
return SyncResponseView(self.model, self, self.app)
|
|
|
|
def on_confirmation_button_pressed(self, button):
|
|
if self.request_in_progress:
|
|
return
|
|
self.request_in_progress = True
|
|
self.view.flash_text.set_text('Sending request...')
|
|
|
|
def main_loop_target():
|
|
self.view.flash_text.set_text('')
|
|
view = self.get_response_view()
|
|
self.switch_to_view(view)
|
|
|
|
def thread_target():
|
|
resp = self.get_resp()
|
|
try:
|
|
self.model.resp_json = tui_utils.handle_sync_response(resp, self)
|
|
except Controller.RequestFailed:
|
|
return
|
|
self.app.run_in_main_loop(main_loop_target)
|
|
|
|
Thread(target=thread_target).start()
|