Пример #1
0
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)
Пример #2
0
    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
Пример #3
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]
Пример #4
0
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)
Пример #5
0
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"
Пример #6
0
    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_()
Пример #7
0
    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_()
Пример #8
0
 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