from PyQt5.QtWidgets import QTableWidgetItem import swf.utils from windows.common import UiWidget from threading import Thread import datetime class WorkflowTileWidget(UiWidget): ui = 'resources/ui/workflow_type_tile.ui' def __init__( self, connection, workflow_type, on_view_all_executions=None, on_execution_details=None, on_detail_view=None): super().__init__() self.connection = connection self.workflow_type = workflow_type self.flow_name_lbl.setText('{}::{}'.format( workflow_type['domain'], workflow_type['workflowType']['name'])) self.on_view_all_executions = on_view_all_executions self.on_execution_details = on_execution_details self.on_detail_view = on_detail_view self.downloader = Thread( target=self.data_downloader, args=(self.data_downloaded, )) self.downloader.start() def data_downloader(self, callback): executions = swf.utils.find_top_3_executions( self.connection.aws_access_key_id, self.connection.aws_secret_access_key, self.workflow_type) callback(executions) def data_downloaded(self, data): if len(data) == 0: self.executions_table.close() return self.executions_table.setRowCount(len(data)) for i, exe in enumerate(data): item = QTableWidgetItem() item.setText(exe.get('closeStatus') or exe.get('executionStatus')) self.executions_table.setItem(i, 0, item) item = QTableWidgetItem() started_date = exe.get('startTimestamp') if started_date: started_date = datetime.datetime.fromtimestamp( started_date).strftime('%y-%m-%d %H:%M:%S') else: started_date = '-' item.setText(started_date) self.executions_table.setItem(i, 1, item) item = QTableWidgetItem() closed_date = exe.get('closeTimestamp') if closed_date: closed_date = datetime.datetime.fromtimestamp( closed_date).strftime('%y-%m-%d %H:%M:%S') else: closed_date = '-' item.setText(closed_date) self.executions_table.setItem(i, 2, item) item = QTableWidgetItem() item.setText(exe.get('execution').get('workflowId')) self.executions_table.setItem(i, 3, item) item = QTableWidgetItem() item.setText(exe.get('execution').get('runId')) self.executions_table.setItem(i, 4, item) def view_all_executions_btn_click(self): self.on_view_all_executions(self) def execution_doubleclick(self, i, j): self.on_execution_details(self) def type_detail_click(self): self.on_detail_view(self)