Example #1
0
    def test_flow_predicate(self):
        root = FlowRoot("test", "This is my flowroot")
        node = root.connect("a", lambda ctx: 'toto' in ctx and ctx['toto'] == 'titui')
        somebody = TestPerson('me')

        # Non-matching predicate
        flow = Flow(root, somebody, {})
        self.assertIn(node, flow.next_steps())
        self.assertNotIn(node, flow.next_autosteps())
        self.assertRaises(InvalidState, flow.advance, node)
        flow.advance(node, enforce_predicate=False)  # This will bypass the restriction
        self.assertEqual(flow._current_step, node)

        # Matching predicate
        flow = Flow(root, somebody, {'toto': 'titui'})
        self.assertIn(node, flow.next_steps())
        self.assertIn(node, flow.next_autosteps())
        flow.advance(node)
        self.assertEqual(flow._current_step, node)
Example #2
0
    def inject_flows_from(self, instance_to_inject):
        classname = instance_to_inject.__class__.__name__
        for name, method in inspect.getmembers(instance_to_inject, inspect.ismethod):
            if getattr(method, "_err_flow", False):
                log.debug("Found new flow %s: %s", classname, name)
                flow = FlowRoot(name, method.__doc__)
                try:
                    method(flow)
                except Exception:
                    log.exception("Exception initializing a flow")

                self.flow_executor.add_flow(flow)
Example #3
0
def test_flow_predicate():
    root = FlowRoot("test", "This is my flowroot")
    node = root.connect("a", lambda ctx: 'toto' in ctx and ctx['toto'] == 'titui')
    somebody = TestPerson('me')

    # Non-matching predicate
    flow = Flow(root, somebody, {})
    assert node in flow.next_steps()
    assert node not in flow.next_autosteps()
    with pytest.raises(InvalidState):
        flow.advance(node)

    flow.advance(node, enforce_predicate=False)  # This will bypass the restriction
    assert flow._current_step == node

    # Matching predicate
    flow = Flow(root, somebody, {'toto': 'titui'})
    assert node in flow.next_steps()
    assert node in flow.next_autosteps()
    flow.advance(node)
    assert flow._current_step == node
Example #4
0
def test_flow_predicate():
    root = FlowRoot("test", "This is my flowroot")
    node = root.connect("a",
                        lambda ctx: 'toto' in ctx and ctx['toto'] == 'titui')
    somebody = TestPerson('me')

    # Non-matching predicate
    flow = Flow(root, somebody, {})
    assert node in flow.next_steps()
    assert node not in flow.next_autosteps()
    with pytest.raises(InvalidState):
        flow.advance(node)

    flow.advance(node,
                 enforce_predicate=False)  # This will bypass the restriction
    assert flow._current_step == node

    # Matching predicate
    flow = Flow(root, somebody, {'toto': 'titui'})
    assert node in flow.next_steps()
    assert node in flow.next_autosteps()
    flow.advance(node)
    assert flow._current_step == node
Example #5
0
def test_autotrigger():
    root = FlowRoot("test", "This is my flowroot")
    node = root.connect("a",
                        lambda ctx: 'toto' in ctx and ctx['toto'] == 'titui',
                        auto_trigger=True)
    assert node.command in root.auto_triggers
Example #6
0
def test_node():
    root = FlowRoot("test", "This is my flowroot")
    node = root.connect("a", lambda ctx: ctx['toto'] == 'titui')

    assert root.predicate_for_node(node)({'toto': 'titui'})
    assert not root.predicate_for_node(node)({'toto': 'blah'})
Example #7
0
def test_autotrigger():
    root = FlowRoot("test", "This is my flowroot")
    node = root.connect("a",
                        lambda ctx: "toto" in ctx and ctx["toto"] == "titui",
                        auto_trigger=True)
    assert node.command in root.auto_triggers
Example #8
0
def test_node():
    root = FlowRoot("test", "This is my flowroot")
    node = root.connect("a", lambda ctx: ctx["toto"] == "titui")

    assert root.predicate_for_node(node)({"toto": "titui"})
    assert not root.predicate_for_node(node)({"toto": "blah"})
Example #9
0
def test_autotrigger():
    root = FlowRoot("test", "This is my flowroot")
    node = root.connect("a", lambda ctx: 'toto' in ctx and ctx['toto'] == 'titui', auto_trigger=True)
    assert node.command in root.auto_triggers
Example #10
0
def test_node():
    root = FlowRoot("test", "This is my flowroot")
    node = root.connect("a", lambda ctx: ctx['toto'] == 'titui')

    assert root.predicate_for_node(node)({'toto': 'titui'})
    assert not root.predicate_for_node(node)({'toto': 'blah'})
Example #11
0
    def test_node(self):
        root = FlowRoot("test", "This is my flowroot")
        node = root.connect("a", lambda ctx: ctx['toto'] == 'titui')

        self.assertTrue(root.predicate_for_node(node)({'toto': 'titui'}))
        self.assertFalse(root.predicate_for_node(node)({'toto': 'blah'}))