from windows.common import UiWindow, clear_layout, depends_on from windows.workflow_tile_widget import WorkflowTileWidget import swf.utils from threading import Thread from PyQt5 import QtWidgets import time class FlowBrowser(UiWindow): ui = 'resources/ui/flow_browser.ui' def __init__(self, connection): super().__init__() self.connection = connection self.setWindowTitle(self.connection.name) self.data_loader = Thread(target=self.load_data) self.data_loader.start() self.workflow_types = [] def load_data(self): self.workflow_types = list( swf.utils.find_all_types( self.connection.aws_access_key_id, self.connection.aws_secret_access_key)) @depends_on('data_loader') def search_btn_click(self): workflow_types = [] text = self.search_txt.text() for w_type in self.workflow_types: score = 0 for token in text.split(): if token in w_type['workflowType']['name']: score += 1 elif token in w_type['domain']: score += 1 elif token in w_type.get('description', ''): score += 1 else: score = 0 break w_type['score'] = score if score > 0: workflow_types.append(w_type) workflow_types.sort(key=lambda x: -x['score']) self.update_search_result(workflow_types) def update_search_result(self, workflow_types): clear_layout(self.search_results_layout) for w_type in workflow_types: tile = WorkflowTileWidget( self.connection, w_type, on_detail_view=self.open_type_details, on_execution_details=self.open_execution_details, on_view_all_executions=self.open_executions_window) self.search_results_layout.addWidget(tile) self.search_results_layout.addStretch(1) def open_type_details(self): pass def open_executions_window(self): pass def open_execution_details(self): pass