def test_adapter_results_with_pretask(tmpdir): temp_path = tmpdir.mkdir("test") pretask = SimplePreTask("Starting") builder = speedwagon.tasks.TaskBuilder(SimpleTaskBuilder(), temp_path) builder.set_pretask(subtask=pretask) builder.add_subtask(subtask=SimpleSubtask("First")) builder.add_subtask(subtask=SimpleSubtask("Second")) new_task = builder.build_task() with worker.ToolJobManager() as manager: for subtask in new_task.subtasks: adapted_tool = speedwagon.worker.SubtaskJobAdapter(subtask) manager.add_job(adapted_tool, adapted_tool.settings) manager.start() results = list() for r in manager.get_results(): results.append(r.data) assert len(results) == 3 assert "Starting" == results[0] assert "First" == results[1] assert "Second" == results[2] shutil.rmtree(tmpdir) shortcut = \ os.path.join(tmpdir.dirname, "test_adapter_results_with_pretcurrent") if os.path.exists(shortcut): os.unlink(shortcut)
def run(self, app: Optional[QtWidgets.QApplication] = None) -> int: """Run the workflow configured with the options given.""" if self._active_workflow is None: raise AttributeError("Workflow has not been set") with worker.ToolJobManager() as work_manager: work_manager.logger = self.logger self._run(work_manager) return 0
def test_adapter_results(simple_task_builder_with_2_subtasks): new_task = simple_task_builder_with_2_subtasks.build_task() with worker.ToolJobManager() as manager: for subtask in new_task.main_subtasks: adapted_tool = speedwagon.worker.SubtaskJobAdapter(subtask) manager.add_job(adapted_tool, adapted_tool.settings) manager.start() results = list() for r in manager.get_results(): results.append(r.data) assert len(results) == 2 assert "First" == results[0] assert "Second" == results[1]
def test_adapter_results_with_posttask(tmpdir): temp_path = tmpdir.mkdir("test") post_task = SimpleSubtask("Ending") builder = speedwagon.tasks.TaskBuilder(SimpleTaskBuilder(), temp_path) builder.set_posttask(subtask=post_task) builder.add_subtask(subtask=SimpleSubtask("First")) builder.add_subtask(subtask=SimpleSubtask("Second")) new_task = builder.build_task() queued_order = [] with worker.ToolJobManager() as manager: for subtask in new_task.subtasks: adapted_tool = speedwagon.worker.SubtaskJobAdapter(subtask) manager.add_job(adapted_tool, adapted_tool.settings) for message in manager._job_runtime._pending_jobs.queue: print(message) queued_order.append(message.args['message']) manager.start() # Fuzz this time.sleep(1) results = list() for r in manager.get_results(): results.append(r.data) assert len(results) == 3 assert "First" == results[0], "results = {}, queued_order={}".format( results, queued_order) assert "Second" == results[1] assert "Ending" == results[2] shutil.rmtree(tmpdir) shortcut = \ os.path.join(tmpdir.dirname, "test_adapter_results_with_postcurrent") if os.path.exists(shortcut): os.unlink(shortcut)
def test_adapter_logs(simple_task_builder_with_2_subtasks): logs = [] log_catcher = LogCatcher(logs) new_task = simple_task_builder_with_2_subtasks.build_task() with worker.ToolJobManager() as manager: manager.logger.setLevel(logging.INFO) manager.logger.addHandler(log_catcher) for subtask in new_task.main_subtasks: adapted_tool = speedwagon.worker.SubtaskJobAdapter(subtask) manager.add_job(adapted_tool, adapted_tool.settings) manager.start() list(manager.get_results()) assert len(logs) == 2 assert logs[0].message == "processing" assert logs[1].message == "processing"
def run(self): # Display a splash screen until the app is loaded with resources.open_binary(speedwagon.__name__, "logo.png") as logo: splash = QtWidgets.QSplashScreen( QtGui.QPixmap(logo.name).scaled(400, 400)) splash.setEnabled(False) splash.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint) splash_message_handler = SplashScreenLogHandler(splash) # If debug mode, print the log messages directly on the splash screen if self._debug: splash_message_handler.setLevel(logging.DEBUG) else: splash_message_handler.setLevel(logging.INFO) splash.show() self.app.processEvents() self.set_app_display_metadata() with worker.ToolJobManager() as work_manager: work_manager.settings_path = \ self.platform_settings.get_app_data_directory() windows = MainWindow(work_manager=work_manager, debug=self.startup_settings['debug']) windows.setWindowTitle("") self._logger.addHandler(splash_message_handler) self._logger.addHandler(windows.log_data_handler) self._logger.addHandler(windows.console_log_handler) app_title = speedwagon.__name__.title() try: app_version = metadata.version(__package__) except metadata.PackageNotFoundError: app_version = "" self._logger.info(f"{app_title} {app_version}") self.app.processEvents() # ================================================== # Load configurations self._logger.debug("Applying settings to Speedwagon") work_manager.user_settings = self.platform_settings work_manager.configuration_file = self.config_file # ================================================== self._logger.debug("Loading Workflows") loading_workflows_stream = io.StringIO() with contextlib.redirect_stderr(loading_workflows_stream): all_workflows = job.available_workflows() # Load every user configured tab tabs_file_size = os.path.getsize(self.tabs_file) if tabs_file_size > 0: try: for tab_name, extra_tab in \ get_custom_tabs(all_workflows, self.tabs_file): windows.add_tab( tab_name, collections.OrderedDict(sorted(extra_tab.items()))) except FileFormatError as e: self._logger.warning("Unable to load custom tabs from {}. " "Reason: {}".format( self.tabs_file, e)) # All Workflows tab self._logger.debug("Loading Tab All") windows.add_tab( "All", collections.OrderedDict(sorted(all_workflows.items()))) workflow_errors_msg = loading_workflows_stream.getvalue().strip() if workflow_errors_msg: for line in workflow_errors_msg.split("\n"): self._logger.warning(line) # ================================================== self._logger.debug("Loading User Interface") windows.show() if "starting-tab" in self.startup_settings: windows.set_current_tab( tab_name=self.startup_settings['starting-tab']) splash.finish(windows) self._logger.info("Ready") self._logger.removeHandler(windows.log_data_handler) self._logger.removeHandler(windows.console_log_handler) self._logger.removeHandler(splash_message_handler) return self.app.exec_()
def run(self, app: Optional[QtWidgets.QApplication] = None) -> int: # Display a splash screen until the app is loaded with resources.open_binary(speedwagon.__name__, "logo.png") as logo: splash = QtWidgets.QSplashScreen( QtGui.QPixmap(logo.name).scaled(400, 400)) splash.setEnabled(False) splash.setWindowFlags( cast( QtCore.Qt.WindowType, QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint ) ) splash_message_handler = speedwagon.gui.SplashScreenLogHandler(splash) # If debug mode, print the log messages directly on the splash screen if self._debug: splash_message_handler.setLevel(logging.DEBUG) else: splash_message_handler.setLevel(logging.INFO) splash.show() QtWidgets.QApplication.processEvents(QtCore.QEventLoop.AllEvents) set_app_display_metadata(self.app) with worker.ToolJobManager() as work_manager: work_manager.settings_path = \ self.platform_settings.get_app_data_directory() windows = speedwagon.gui.MainWindow1( work_manager=work_manager, debug=cast(bool, self.startup_settings['debug']) ) windows.setWindowTitle("") self._logger.addHandler(splash_message_handler) self._logger.addHandler(windows.log_data_handler) self._logger.addHandler(windows.console_log_handler) app_title = speedwagon.__name__.title() try: app_version = metadata.version(__package__) except metadata.PackageNotFoundError: app_version = "" self._logger.info("%s %s", app_title, app_version) QtWidgets.QApplication.processEvents() self.load_configurations(work_manager) self._load_workflows(windows) self._logger.debug("Loading User Interface") windows.show() if "starting-tab" in self.startup_settings: windows.set_current_tab( tab_name=cast(str, self.startup_settings['starting-tab'])) splash.finish(windows) self._logger.info("Ready") self._logger.removeHandler(windows.log_data_handler) self._logger.removeHandler(windows.console_log_handler) self._logger.removeHandler(splash_message_handler) return self.app.exec_()
def run(self, app: Optional[QtWidgets.QApplication] = None) -> int: with worker.ToolJobManager() as work_manager: work_manager.logger = self.logger self._run(work_manager) return 0