예제 #1
0
    def test_clean_tabs_preserve_ordering(self):
        tab2_output = ProcessResult(pd.DataFrame({"A": [1, 2]}))
        tab3_output = ProcessResult(pd.DataFrame({"B": [2, 3]}))
        workflow = Workflow.create_and_init()
        tab1 = workflow.tabs.first()
        tab2 = workflow.tabs.create(position=1, slug="tab-2", name="Tab 2")
        tab3 = workflow.tabs.create(position=1, slug="tab-3", name="Tab 3")
        wfm2 = tab2.wf_modules.create(
            order=0,
            slug="step-1",
            last_relevant_delta_id=workflow.last_delta_id)
        wfm2.cache_render_result(workflow.last_delta_id, tab2_output)
        wfm3 = tab3.wf_modules.create(
            order=0,
            slug="step-2",
            last_relevant_delta_id=workflow.last_delta_id)
        wfm3.cache_render_result(workflow.last_delta_id, tab3_output)

        # RenderContext's dict ordering determines desired tab order. (Python
        # 3.7 spec: dict is ordered in insertion order. CPython 3.6 and PyPy 7
        # do this, too.)
        context = RenderContext(
            workflow.id,
            None,
            None,
            {
                tab1.slug: None,
                tab2.slug: StepResultShape("ok", tab2_output.table_shape),
                tab3.slug: StepResultShape("ok", tab3_output.table_shape),
            },
            None,
        )
        # Supply wrongly-ordered tabs. Cleaned, they should be in order.
        result = clean_value(ParamDType.Multitab(), [tab3.slug, tab2.slug],
                             context)
        self.assertEqual(result[0].slug, tab2.slug)
        self.assertEqual(result[0].name, tab2.name)
        self.assertEqual(result[0].columns,
                         {"A": RenderColumn("A", "number", "{:,}")})
        assert_frame_equal(result[0].dataframe, pd.DataFrame({"A": [1, 2]}))
        self.assertEqual(result[1].slug, tab3.slug)
        self.assertEqual(result[1].name, tab3.name)
        self.assertEqual(result[1].columns,
                         {"B": RenderColumn("B", "number", "{:,}")})
        assert_frame_equal(result[1].dataframe, pd.DataFrame({"B": [2, 3]}))
예제 #2
0
    def test_clean_tabs_happy_path(self):
        tab1_output = ProcessResult(pd.DataFrame({'A': [1, 2]}))
        workflow = Workflow.create_and_init()
        tab1 = workflow.tabs.first()
        wfm = tab1.wf_modules.create(
            order=0, last_relevant_delta_id=workflow.last_delta_id)
        wfm.cache_render_result(workflow.last_delta_id, tab1_output)

        context = RenderContext(
            workflow.id, None, None, {
                tab1.slug: StepResultShape('ok', tab1_output.table_shape),
            }, None)
        result = clean_value(ParamDType.Multitab(), [tab1.slug], context)
        self.assertEqual(result[0].slug, tab1.slug)
        self.assertEqual(result[0].name, tab1.name)
        self.assertEqual(result[0].columns, {
            'A': RenderColumn('A', 'number', '{:,}'),
        })
        assert_frame_equal(result[0].dataframe, pd.DataFrame({'A': [1, 2]}))
예제 #3
0
 def test_clean_tabs_tab_error_raises_cycle(self):
     context = RenderContext(None, None, None, {'tab-1': None}, None)
     with self.assertRaises(TabCycleError):
         clean_value(ParamDType.Multitab(), ['tab-1'], context)
예제 #4
0
 def test_clean_tabs_nix_missing_tab(self):
     context = RenderContext(None, None, None, {}, None)
     result = clean_value(ParamDType.Multitab(), ['tab-missing'], context)
     self.assertEqual(result, [])
예제 #5
0
 def test_clean_multitab_unsupported(self):
     with self.assertRaisesRegex(RuntimeError,
                                 "Unsupported: fetch multitab"):
         clean_value(ParamDType.Multitab(), "", None)