示例#1
0
 def test_clean_multicolumn_sort_in_table_order(self):
     input_shape = TableMetadata(3, [
         Column("B", ColumnType.Number()),
         Column("A", ColumnType.Number())
     ])
     result = clean_value(ParamDType.Multicolumn(), ["A", "B"], input_shape)
     self.assertEqual(result, ["B", "A"])
 def test_clean_multicolumn_sort_in_table_order(self):
     context = self._render_context(input_table=arrow_table({
         "B": [1],
         "A": [2]
     }))
     result = clean_value(ParamDType.Multicolumn(), ["A", "B"], context)
     self.assertEqual(result, ["B", "A"])
示例#3
0
 def test_clean_multicolumn_missing_is_removed(self):
     input_shape = TableMetadata(3, [
         Column("A", ColumnType.Number()),
         Column("B", ColumnType.Number())
     ])
     result = clean_value(ParamDType.Multicolumn(), ["A", "X", "B"],
                          input_shape)
     self.assertEqual(result, ["A", "B"])
 def test_clean_multicolumn_missing_is_removed(self):
     context = self._render_context(input_table=arrow_table({
         "A": [1],
         "B": [1]
     }))
     result = clean_value(ParamDType.Multicolumn(), ["A", "X", "B"],
                          context)
     self.assertEqual(result, ["A", "B"])
 def test_clean_multicolumn_from_other_tab_that_does_not_exist(self):
     # The other tab would not exist if the user selected and then deleted
     # it.
     schema = ParamDType.Dict({
         "tab":
         ParamDType.Tab(),
         "columns":
         ParamDType.Multicolumn(tab_parameter="tab"),
     })
     params = {"tab": "tab-missing", "columns": ["A-from-tab-1"]}
     context = self._render_context(
         input_table=arrow_table({"A-from-tab-1": [1]}),
         tab_results={},
         params=params,
     )
     result = clean_value(schema, params, context)
     # result['tab'] is not what we're testing here
     self.assertEqual(result["columns"], [])
    def test_clean_multicolumn_from_other_tab(self):
        tab2 = Tab("tab-2", "Tab 2")
        tab2_output_table = arrow_table({"A-from-tab-2": [1, 2]})

        schema = ParamDType.Dict({
            "tab":
            ParamDType.Tab(),
            "columns":
            ParamDType.Multicolumn(tab_parameter="tab"),
        })
        params = {"tab": "tab-2", "columns": ["A-from-tab-1", "A-from-tab-2"]}
        context = self._render_context(
            input_table=arrow_table({"A-from-tab-1": [1]}),
            tab_results={tab2: RenderResult(tab2_output_table)},
            params=params,
        )
        result = clean_value(schema, params, context)
        # result['tab'] is not what we're testing here
        self.assertEqual(result["columns"], ["A-from-tab-2"])
    def test_clean_multicolumn_prompting_error_convert_to_text(self):
        # TODO make this _automatic_ instead of quick-fix?
        # ... but for now: prompt for a Quick Fix.
        context = self._render_context(input_table=arrow_table({
            "A": [1],
            "B":
            pa.array([datetime.now()], pa.timestamp("ns")),
            "C": ["x"],
        }))
        with self.assertRaises(PromptingError) as cm:
            schema = ParamDType.Multicolumn(column_types=frozenset({"text"}))
            clean_value(schema, ["A", "B"], context)

        self.assertEqual(
            cm.exception.errors,
            [
                PromptingError.WrongColumnType(["A", "B"], None,
                                               frozenset({"text"}))
            ],
        )
示例#8
0
    def test_clean_multicolumn_prompting_error_convert_to_text(self):
        # TODO make this _automatic_ instead of quick-fix?
        # ... but for now: prompt for a Quick Fix.
        input_shape = TableMetadata(
            3,
            [
                Column("A", ColumnType.Number()),
                Column("B", ColumnType.Timestamp()),
                Column("C", ColumnType.Text()),
            ],
        )
        with self.assertRaises(PromptingError) as cm:
            schema = ParamDType.Multicolumn(column_types=frozenset({"text"}))
            clean_value(schema, "A,B", input_shape)

        self.assertEqual(
            cm.exception.errors,
            [
                PromptingError.WrongColumnType(["A", "B"], None,
                                               frozenset({"text"}))
            ],
        )
示例#9
0
 def test_clean_multicolumn_no_input_is_empty(self):
     self.assertEqual(
         clean_value(ParamDType.Multicolumn(), "A", TableMetadata()), [])
示例#10
0
 def dtype(self) -> Optional[ParamDType]:
     return ParamDType.Multicolumn(
         column_types=(frozenset(self.column_types)
                       if self.column_types else None),
         tab_parameter=self.tab_parameter,
     )