Пример #1
0
    def testException(self):
        """
        Tests the exception storage
        """
        event = utilities.EventData()

        # "Raise" an exception
        exception = Exception("Some dummy exception")
        event.raise_exception(exception)

        # Check content
        self.assertTrue(event.is_set(), "Event has not been set")
        self.assertIsNone(event.data, "Non-None data")
        self.assertIs(event.exception, exception, "Invalid exception")

        # Check the behavior of "wait"
        try:
            event.wait()
        except Exception as ex:
            self.assertIs(ex, exception, "Not the same exception")
            self.assertTrue(event.is_set(), "Event has been cleared")
        else:
            self.fail("Exception not raised")

        # Clear
        event.clear()
        self.assertFalse(event.is_set(), "Event has been set")
        self.assertIsNone(event.data, "Non-None data")
        self.assertIsNone(event.exception, "Non-None exception")
Пример #2
0
    def run(self, method, *args, **kwargs):
        """
        Runs the given method in the main thread

        :param method: The method to call
        :param args: Method arguments
        :param kwargs: Method keyword arguments
        :return: The result of the method
        :raise ValueError: Qt is not started yet
        """
        if self.__waiting_calls is None:
            raise ValueError("UI not yet set up")

        # Make an event object
        event = utils.EventData()

        # Add the method to the waiting list
        self.__waiting_calls.put((method, args, kwargs, event))

        # Emit to signal, to let Qt execute __ui_runner
        self.__ui_queued.emit()

        # Force Qt to handle the event
        self.__app.processEvents()

        # Wait for the event before returning
        return event.wait()
Пример #3
0
    def testSetClear(self):
        """
        Tests set() and clear() operations
        """
        # Initial condition
        event = utilities.EventData()
        self.assertFalse(event.is_set(), "Event initially set")
        self.assertIsNone(event.data, "Non-None data")
        self.assertIsNone(event.exception, "Non-None exception")

        # No-data set
        event.set()
        self.assertTrue(event.is_set(), "Event not set")
        self.assertIsNone(event.data, "Non-None data")
        self.assertIsNone(event.exception, "Non-None exception")

        # Clear
        event.clear()
        self.assertFalse(event.is_set(), "Event still set")
        self.assertIsNone(event.data, "Non-None data")
        self.assertIsNone(event.exception, "Non-None exception")

        # Set data
        data = object()
        event.set(data)
        self.assertTrue(event.is_set(), "Event not set")
        self.assertIs(event.data, data, "Invalid event data")
        self.assertIsNone(event.exception, "Non-None exception")

        # Clear
        event.clear()
        self.assertFalse(event.is_set(), "Event still set")
        self.assertIsNone(event.data, "Non-None data")
        self.assertIsNone(event.exception, "Non-None exception")
Пример #4
0
    def testBadCallback(self):
        """
        Tests behavior on callback error
        """
        future = threadpool.FutureResult()
        args = (1, 2, 3)
        flag = utilities.EventData()

        def dummy():
            """
            Callback without arguments
            """
            flag.set()

        # Bad number of arguments: no exception must be raised
        future.set_callback(dummy)
        future.execute(self._simple_call, args, None)
        self.assertFalse(flag.is_set(), "Flag shouldn't be set...")

        def raising(data, exception, ex):
            """
            Callback raising an exception
            """
            flag.set()
            raise ex

        exception = ValueError("Dummy error")
        future.set_callback(raising, exception)
        self.assertTrue(flag.is_set(), "Callback not called")
Пример #5
0
    def testCallbackException(self):
        """
        Tests the callback method in case of exception
        """
        # Set the callback before calling the method
        flag = utilities.EventData()
        future = threadpool.FutureResult()
        future.set_callback(self._callback, flag)
        self.assertFalse(flag.is_set(), "Flag already set")

        # Execute
        try:
            future.execute(self._raise_call, None, None)
        except Exception as ex:
            # Store it
            exception = ex
        else:
            self.fail("Exception wasn't propagated")

        # Check event content
        self.assertTrue(flag.is_set(), "Callback method not called")
        self.assertIs(flag.exception, exception, "Exception not set")
        self.assertIsNone(flag.data, "Data set")

        # ... Re-set the callback (should be re-called)
        flag.clear()
        self.assertFalse(flag.is_set(), "Flag already set")
        future.set_callback(self._callback, flag)

        # Check event content
        self.assertTrue(flag.is_set(), "Callback method not called")
        self.assertIs(flag.exception, exception, "Exception not set")
        self.assertIsNone(flag.data, "Data set")
Пример #6
0
    def testCallback(self):
        """
        Tests the callback method
        """
        # Set the callback before calling the method
        flag = utilities.EventData()
        future = threadpool.FutureResult()
        future.set_callback(self._callback, flag)
        self.assertFalse(flag.is_set(), "Flag already set")

        # Execute
        args = (1, 2, 3)
        future.execute(self._simple_call, args, None)

        # Check event content
        self.assertTrue(flag.is_set(), "Callback method not called")
        self.assertIsNone(flag.exception, "Exception set")
        self.assertEqual(flag.data, args, "Data not set")

        # ... Re-set the callback (should be re-called)
        flag.clear()
        self.assertFalse(flag.is_set(), "Flag already set")
        future.set_callback(self._callback, flag)

        # Check event content
        self.assertTrue(flag.is_set(), "Callback method not called")
        self.assertIsNone(flag.exception, "Exception set")
        self.assertEqual(flag.data, args, "Data not set")
Пример #7
0
    def testWait(self):
        """
        Tests the wait() method
        """
        event = utilities.EventData()
        self.assertFalse(event.wait(.1), "Timed out wait must return False")

        start = time.time()
        threading.Timer(1, event.set).start()
        self.assertFalse(event.wait(.1), "Timed out wait must return False")
        self.assertTrue(event.wait(), "Wait should return true on set")
        self.assertLessEqual(time.time() - start, 2, "Too long to wait")

        self.assertTrue(event.wait(.5),
                        "Already set event shoudn't block wait()")
        self.assertTrue(event.wait(),
                        "Already set event shoudn't block wait()")
Пример #8
0
    def run(self, method, *args, **kwargs):
        """
        Runs the given method in the main thread

        :param method: The method to call
        :param args: Method arguments
        :param kwargs: Method keyword arguments
        :return: The result of the method
        """
        # Make an event object
        event = utils.EventData()

        # Call the runner
        AppHelper.callAfter(self.__ui_runner, event, method, args, kwargs)

        # Wait for it
        return event.wait()
Пример #9
0
    def run(self, method, *args, **kwargs):
        """
        Runs the given method in the main thread

        :param method: The method to call
        :param args: Method arguments
        :param kwargs: Method keyword arguments
        :return: The result of the method
        """
        # Make an event object
        event = utils.EventData()

        # Add the method to the waiting list
        self._queue.put((method, args, kwargs, event))

        # Wait for it...
        event.wait()
        return event.data
Пример #10
0
    def testWaitException(self):
        """
        Tests the exception effect on wait()
        """
        event = utilities.EventData()
        exception = Exception("Some dummy exception")

        # "Raise" an exception
        threading.Timer(.5, event.raise_exception, [exception]).start()

        # Check the behavior of "wait"
        try:
            event.wait()
        except Exception as ex:
            self.assertIs(ex, exception, "Not the same exception")
        else:
            self.fail("Exception not raised")

        # Check content
        self.assertTrue(event.is_set(), "Event has been cleared")
        self.assertIsNone(event.data, "Non-None data")
        self.assertIs(event.exception, exception, "Invalid exception")
Пример #11
0
 def __init__(self, timeout):
     """
     The temporal proxy
     """
     self.__event = utilities.EventData()
     self.__timeout = timeout