예제 #1
0
    def test_notify_when_child_outputs_differ(self, mock_render):
        workflow = build_workflow([
            (1, False),
            (2, True),
        ])

        def render(wf_module, table):
            if table.equals(DataFrame({'a': ['b']})):
                return ProcessResult(DataFrame({'a': ['1']}))
            elif table.equals(DataFrame({'b': ['c']})):
                return ProcessResult(DataFrame({'a': ['2']}))
            else:
                raise Exception("???")
        mock_render.side_effect = render

        deltas = find_output_deltas(workflow.wf_modules[0],
                                    ProcessResult(DataFrame({'a': ['b']})),
                                    ProcessResult(DataFrame({'b': ['c']})))
        self.assertEqual(len(deltas), 1)
        self.assertEqual(
            deltas[0],
            OutputDelta(workflow.wf_modules[1],
                        ProcessResult(DataFrame({'a': ['1']})),
                        ProcessResult(DataFrame({'a': ['2']})))
        )
예제 #2
0
 def test_noop_when_no_notifications(self, mock_render):
     workflow = build_workflow([
         (1, False),
         (2, False),
     ])
     deltas = find_output_deltas(workflow.wf_modules[0],
                                 ProcessResult(DataFrame({'a': ['b']})),
                                 ProcessResult(DataFrame({'b': ['c']})))
     self.assertListEqual(deltas, [])
     mock_render.assert_not_called()
예제 #3
0
 def test_notify_when_fetch_output_becomes_non_none(self):
     workflow = build_workflow([
         (1, True),
     ])
     deltas = find_output_deltas(workflow.wf_modules[0], None,
                                 ProcessResult(DataFrame({'b': ['c']})))
     self.assertListEqual(deltas, [
         OutputDelta(workflow.wf_modules[0], None,
                     ProcessResult(DataFrame({'b': ['c']}))),
     ])
예제 #4
0
    def test_noop_when_parent_outputs_equal(self, mock_render):
        # Output of module 1 is equal, so we never run module 2 and thus never
        # notify.
        workflow = build_workflow([
            (1, False),
            (2, True),
        ])

        def render(wf_module, table):
            if table.equals(DataFrame({'a': ['b']})):
                return ProcessResult(DataFrame({'a': ['c']}))
            elif table.equals(DataFrame({'b': ['c']})):
                return ProcessResult(DataFrame({'a': ['c']}))
            else:
                raise Exception("???")
        mock_render.side_effect = render

        deltas = find_output_deltas(workflow.wf_modules[0],
                                    ProcessResult(DataFrame({'a': ['b']})),
                                    ProcessResult(DataFrame({'b': ['c']})))
        self.assertListEqual(deltas, [])
예제 #5
0
    def test_notify_child_when_fetch_output_becomes_non_none(self,
                                                             mock_render):
        workflow = build_workflow([
            (1, False),
            (2, True),
        ])

        def render(wf_module, table):
            if table.empty:
                return ProcessResult(None)
            if table.equals(DataFrame({'a': ['b']})):
                return ProcessResult(DataFrame({'a': ['1']}))
            else:
                raise Exception("???")
        mock_render.side_effect = render

        deltas = find_output_deltas(workflow.wf_modules[0], None,
                                    ProcessResult(DataFrame({'a': ['b']})))
        self.assertListEqual(deltas, [
            OutputDelta(workflow.wf_modules[1],
                        ProcessResult(None),
                        ProcessResult(DataFrame({'a': ['1']}))),
        ])