Пример #1
0
def _side_effect_wrapper(callable, args, kwargs, name):
    section_state = fiber.get_state()

    if section_state is not None:
        # We are in a woven section

        entry = section_state.get(JOURNAL_ENTRY_TAG, None)

        if entry is not None:
            # We are in a replayable section
            mode = section_state.get(RECMODE_TAG, None)

            if mode == JournalMode.replay:
                return entry.next_side_effect(name, *args, **kwargs)

            # Create a side-effect entry
            effect = entry.new_side_effect(name, *args, **kwargs)
            # Keep it in the replayable section state
            section_state[SIDE_EFFECT_TAG] = effect
            # Break the fiber to allow new replayable sections
            fiber.break_fiber()
            # Keep the side-effect entry to detect we are in one
            fiber.set_stack_var(SIDE_EFFECT_TAG, effect)
            try:
                result = callable(*args, **kwargs)
                result = _check_side_effet_result(result, name)
                effect.set_result(result)
                effect.commit()
                return result
            except Exception, e:
                # FIXME: handle exceptions in side effects properly
                error.handle_exception(None, e, "Exception raised by side-effect %s", reflect.canonical_name(callable))
                raise
Пример #2
0
 def level3():
     self.assertEqual(fiber.get_stack_var(NAME1), None)
     self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
     self.assertEqual(fiber.get_stack_var(NAME3), None)
     fiber.set_stack_var(NAME1, VALUE1)
     self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
     self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
     self.assertEqual(fiber.get_stack_var(NAME3), None)
     level4()
     self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
     self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
     self.assertEqual(fiber.get_stack_var(NAME3), None)
Пример #3
0
 def level4():
     self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
     self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
     self.assertEqual(fiber.get_stack_var(NAME3), None)
     fiber.set_stack_var(NAME3, VALUE3)
     fiber.set_stack_var(NAME2, VALUE2)
     self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
     self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
     self.assertEqual(fiber.get_stack_var(NAME3), VALUE3)
     fiber.break_fiber()
     self.assertEqual(fiber.get_stack_var(NAME1), None)
     self.assertEqual(fiber.get_stack_var(NAME2), None)
     self.assertEqual(fiber.get_stack_var(NAME3), None)
     fiber.set_stack_var(NAME3, VALUE3)
     self.assertEqual(fiber.get_stack_var(NAME1), None)
     self.assertEqual(fiber.get_stack_var(NAME2), None)
     self.assertEqual(fiber.get_stack_var(NAME3), VALUE3)
     level5()
     self.assertEqual(fiber.get_stack_var(NAME1), None)
     self.assertEqual(fiber.get_stack_var(NAME2), None)
     self.assertEqual(fiber.get_stack_var(NAME3), VALUE3)
Пример #4
0
    def testStackVars(self):

        NAME1 = "__test__"
        VALUE1 = 42
        NAME2 = "__test2__"
        VALUE2 = 66
        NAME3 = "__test3__"
        VALUE3 = 18

        def level1():
            self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
            self.assertEqual(fiber.get_stack_var(NAME2), None)
            self.assertEqual(fiber.get_stack_var(NAME3), None)
            level2()
            self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
            self.assertEqual(fiber.get_stack_var(NAME2), None)
            self.assertEqual(fiber.get_stack_var(NAME3), None)

        def level2():
            self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
            self.assertEqual(fiber.get_stack_var(NAME2), None)
            self.assertEqual(fiber.get_stack_var(NAME3), None)
            fiber.break_fiber()
            self.assertEqual(fiber.get_stack_var(NAME1), None)
            self.assertEqual(fiber.get_stack_var(NAME2), None)
            self.assertEqual(fiber.get_stack_var(NAME3), None)
            fiber.set_stack_var(NAME2, VALUE2)
            self.assertEqual(fiber.get_stack_var(NAME1), None)
            self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
            self.assertEqual(fiber.get_stack_var(NAME3), None)
            level3()
            self.assertEqual(fiber.get_stack_var(NAME1), None)
            self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
            self.assertEqual(fiber.get_stack_var(NAME3), None)

        def level3():
            self.assertEqual(fiber.get_stack_var(NAME1), None)
            self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
            self.assertEqual(fiber.get_stack_var(NAME3), None)
            fiber.set_stack_var(NAME1, VALUE1)
            self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
            self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
            self.assertEqual(fiber.get_stack_var(NAME3), None)
            level4()
            self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
            self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
            self.assertEqual(fiber.get_stack_var(NAME3), None)

        def level4():
            self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
            self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
            self.assertEqual(fiber.get_stack_var(NAME3), None)
            fiber.set_stack_var(NAME3, VALUE3)
            fiber.set_stack_var(NAME2, VALUE2)
            self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
            self.assertEqual(fiber.get_stack_var(NAME2), VALUE2)
            self.assertEqual(fiber.get_stack_var(NAME3), VALUE3)
            fiber.break_fiber()
            self.assertEqual(fiber.get_stack_var(NAME1), None)
            self.assertEqual(fiber.get_stack_var(NAME2), None)
            self.assertEqual(fiber.get_stack_var(NAME3), None)
            fiber.set_stack_var(NAME3, VALUE3)
            self.assertEqual(fiber.get_stack_var(NAME1), None)
            self.assertEqual(fiber.get_stack_var(NAME2), None)
            self.assertEqual(fiber.get_stack_var(NAME3), VALUE3)
            level5()
            self.assertEqual(fiber.get_stack_var(NAME1), None)
            self.assertEqual(fiber.get_stack_var(NAME2), None)
            self.assertEqual(fiber.get_stack_var(NAME3), VALUE3)

        def level5():
            self.assertEqual(fiber.get_stack_var(NAME1), None)
            self.assertEqual(fiber.get_stack_var(NAME2), None)
            self.assertEqual(fiber.get_stack_var(NAME3), VALUE3)

        fiber.set_stack_var(NAME1, VALUE1)
        self.assertEqual(fiber.get_stack_var(NAME1), VALUE1)
        self.assertEqual(fiber.get_stack_var(NAME2), None)
        self.assertEqual(fiber.get_stack_var(NAME3), None)