Beispiel #1
0
def start_async_task_view(parent: 'Qt.QMainWindow', task: Callable, on_complete: Callable, kwargs=None):
    atd = AsyncTaskDialogView(parent, auto_close=True)
    if not kwargs:
        kwargs = {'progress': Progress()}
    else:
        kwargs['progress'] = Progress()
    kwargs['progress'].add_progress_handler(atd.presenter)

    atd.presenter.set_task(task)
    atd.presenter.set_on_complete(on_complete)
    atd.presenter.set_parameters(**kwargs)
    atd.presenter.do_start_processing()
Beispiel #2
0
    def test_multi_step_early_completion(self):
        # Default to estimating a single step
        p = Progress(num_steps=2)

        self.assertEqual(p.end_step, 2)
        self.assertEqual(len(p.progress_history), 1)
        self.assertEqual(p.completion(), 0.0)

        p.update(msg="Estimate how complex I am")

        self.assertEqual(p.end_step, 2)
        self.assertEqual(len(p.progress_history), 2)
        self.assertEqual(p.completion(), 0.5)

        # First step to execute may decide that more steps are required
        p.add_estimated_steps(10)

        self.assertEqual(p.end_step, 12)
        self.assertEqual(len(p.progress_history), 2)
        self.assertEqual(p.completion(), 0.083)

        p.update(steps=2, msg="Do two things")

        self.assertEqual(len(p.progress_history), 3)
        self.assertEqual(p.completion(), 0.25)

        # Finish early
        p.mark_complete()

        self.assertEqual(len(p.progress_history), 4)
        self.assertEqual(p.completion(), 1.0)
Beispiel #3
0
 def test_set_steps_resets_current_step(self):
     p = Progress(num_steps=2)
     p.update(steps=1)
     self.assertEqual(p.current_step, 1)
     p.set_estimated_steps(10)
     self.assertEqual(p.current_step, 0)
     self.assertEqual(p.end_step, 10)
Beispiel #4
0
    def test_context_nested(self):
        p = Progress(num_steps=2)

        self.assertFalse(p.is_started())
        self.assertFalse(p.is_completed())
        self.assertEqual(len(p.progress_history), 1)
        self.assertEqual(p.completion(), 0.0)

        with p:
            p.update(msg="do a thing")
            self.assertEqual(len(p.progress_history), 2)

            for i in range(5):
                with p:
                    p.update(
                        msg="do a thing in a loop nested in the other thing")

                self.assertEqual(len(p.progress_history), 3 + i)
                self.assertFalse(p.is_completed())

            self.assertEqual(len(p.progress_history), 7)
            self.assertFalse(p.is_completed())

        self.assertTrue(p.is_completed())
        self.assertEqual(len(p.progress_history), 8)
        self.assertEqual(p.completion(), 1.0)
Beispiel #5
0
    def test_add_callback_incorrect_type(self):
        p = Progress(5)

        not_a_progress_handler = "I'm a string!"

        with self.assertRaises(ValueError):
            p.add_progress_handler(not_a_progress_handler)
Beispiel #6
0
    def test_callbacks(self):
        cb1 = mock.create_autospec(ProgressHandler)
        cb2 = mock.create_autospec(ProgressHandler)
        callbacks = [cb1, cb2]

        def assert_call(expected_completion, expected_step, expected_msg):
            for m in callbacks:
                m.progress_update.assert_called_once()
                m.reset_mock()

        p = Progress(5)
        p.add_progress_handler(cb1)
        p.add_progress_handler(cb2)

        p.update(msg="First")
        assert_call(0.167, 1, "First")

        p.update(steps=2, msg="Second")
        assert_call(0.5, 3, "Second")

        p.update(msg="Third")
        assert_call(0.667, 4, "Third")

        p.update(msg="Last")
        assert_call(0.833, 5, "Last")

        p.mark_complete()
        assert_call(1.0, 6, "complete")
Beispiel #7
0
def start_async_task_view(parent: QMainWindow,
                          task: Callable,
                          on_complete: Callable,
                          kwargs: Optional[Dict] = None,
                          tracker: Optional[Set[Any]] = None):
    atd = AsyncTaskDialogView(parent, auto_close=True)
    if not kwargs:
        kwargs = {'progress': Progress()}
    else:
        kwargs['progress'] = Progress()
    kwargs['progress'].add_progress_handler(atd.presenter)

    atd.presenter.set_task(task)
    atd.presenter.set_on_complete(on_complete)
    atd.presenter.set_parameters(**kwargs)
    if tracker is not None:
        atd.presenter.set_tracker(tracker)
    atd.presenter.do_start_processing()
Beispiel #8
0
    def test_context(self):
        p = Progress(num_steps=2)

        self.assertFalse(p.is_started())
        self.assertFalse(p.is_completed())
        self.assertEqual(len(p.progress_history), 1)
        self.assertEqual(p.completion(), 0.0)

        with p:
            p.update(msg="do a thing")

            self.assertTrue(p.is_started())
            self.assertEqual(len(p.progress_history), 2)
            self.assertEqual(p.completion(), 0.5)

        self.assertTrue(p.is_completed())
        self.assertEqual(len(p.progress_history), 3)
        self.assertEqual(p.completion(), 1.0)
Beispiel #9
0
    def test_cancellation(self):
        p = Progress()
        p.add_estimated_steps(10)

        with p:
            for i in range(10):
                if i < 6:
                    p.update()

                    if i == 5:
                        p.cancel("nope")
                        self.assertTrue(p.should_cancel)

                else:
                    with self.assertRaises(RuntimeError):
                        p.update()

        self.assertFalse(p.is_completed())
        self.assertTrue(p.should_cancel)
Beispiel #10
0
    def test_basic_single_step(self):
        p = Progress(num_steps=2)

        self.assertFalse(p.is_started())
        self.assertFalse(p.is_completed())
        self.assertEqual(len(p.progress_history), 1)
        self.assertEqual(p.completion(), 0.0)

        p.update(msg="do a thing")

        self.assertTrue(p.is_started())
        self.assertEqual(len(p.progress_history), 2)
        self.assertEqual(p.completion(), 0.5)

        p.mark_complete()

        self.assertTrue(p.is_completed())
        self.assertEqual(len(p.progress_history), 3)
        self.assertEqual(p.completion(), 1.0)