def test_query_obj_throws_columns_and_metrics(self, super_query_obj):
     datasource = self.get_datasource_mock()
     form_data = {"all_columns": ["A", "B"], "metrics": ["x", "y"]}
     super_query_obj.return_value = {}
     test_viz = viz.TableViz(datasource, form_data)
     with self.assertRaises(Exception):
         test_viz.query_obj()
     del form_data["metrics"]
     form_data["groupby"] = ["B", "C"]
     test_viz = viz.TableViz(datasource, form_data)
     with self.assertRaises(Exception):
         test_viz.query_obj()
Exemple #2
0
 def test_query_obj_throws_columns_and_metrics(self, super_query_obj):
     datasource = Mock()
     form_data = {
         'all_columns': ['A', 'B'],
         'metrics': ['x', 'y'],
     }
     super_query_obj.return_value = {}
     test_viz = viz.TableViz(datasource, form_data)
     with self.assertRaises(Exception):
         test_viz.query_obj()
     del form_data['metrics']
     form_data['groupby'] = ['B', 'C']
     test_viz = viz.TableViz(datasource, form_data)
     with self.assertRaises(Exception):
         test_viz.query_obj()
    def test_adhoc_metric_with_sortby(self):
        metrics = [
            {
                "expressionType": "SIMPLE",
                "aggregate": "SUM",
                "label": "sum_value",
                "column": {"column_name": "value1", "type": "DOUBLE"},
            }
        ]
        form_data = {
            "metrics": metrics,
            "timeseries_limit_metric": {
                "expressionType": "SIMPLE",
                "aggregate": "SUM",
                "label": "SUM(value1)",
                "column": {"column_name": "value1", "type": "DOUBLE"},
            },
            "order_desc": False,
        }

        df = pd.DataFrame({"SUM(value1)": [15], "sum_value": [15]})
        datasource = self.get_datasource_mock()
        test_viz = viz.TableViz(datasource, form_data)
        data = test_viz.get_data(df)
        self.assertEqual(["sum_value", "SUM(value1)"], data["columns"])
 def test_adhoc_filters_overwrite_legacy_filters(self):
     form_data = {
         "metrics": [
             {
                 "expressionType": "SIMPLE",
                 "aggregate": "SUM",
                 "label": "SUM(value1)",
                 "column": {"column_name": "value1", "type": "DOUBLE"},
             }
         ],
         "adhoc_filters": [
             {
                 "expressionType": "SIMPLE",
                 "clause": "WHERE",
                 "subject": "value2",
                 "operator": ">",
                 "comparator": "100",
             },
             {
                 "expressionType": "SQL",
                 "clause": "WHERE",
                 "sqlExpression": "value3 in ('North America')",
             },
         ],
         "having": "SUM(value1) > 5",
     }
     datasource = self.get_datasource_mock()
     test_viz = viz.TableViz(datasource, form_data)
     query_obj = test_viz.query_obj()
     self.assertEqual(
         [{"col": "value2", "val": "100", "op": ">"}], query_obj["filter"]
     )
     self.assertEqual([], query_obj["extras"]["having_druid"])
     self.assertEqual("(value3 in ('North America'))", query_obj["extras"]["where"])
     self.assertEqual("", query_obj["extras"]["having"])
Exemple #5
0
 def test_parse_adhoc_filters(self):
     form_data = {
         'metrics': [{
             'expressionType': 'SIMPLE',
             'aggregate': 'SUM',
             'label': 'SUM(value1)',
             'column': {
                 'column_name': 'value1',
                 'type': 'DOUBLE'
             },
         }],
         'adhoc_filters': [
             {
                 'expressionType': 'SIMPLE',
                 'clause': 'WHERE',
                 'subject': 'value2',
                 'operator': '>',
                 'comparator': '100',
             },
             {
                 'expressionType': 'SIMPLE',
                 'clause': 'HAVING',
                 'subject': 'SUM(value1)',
                 'operator': '<',
                 'comparator': '10',
             },
             {
                 'expressionType': 'SQL',
                 'clause': 'HAVING',
                 'sqlExpression': 'SUM(value1) > 5',
             },
             {
                 'expressionType': 'SQL',
                 'clause': 'WHERE',
                 'sqlExpression': 'value3 in (\'North America\')',
             },
         ],
     }
     datasource = Mock()
     test_viz = viz.TableViz(datasource, form_data)
     query_obj = test_viz.query_obj()
     self.assertEqual(
         [{
             'col': 'value2',
             'val': '100',
             'op': '>'
         }],
         query_obj['filter'],
     )
     self.assertEqual(
         [{
             'op': '<',
             'val': '10',
             'col': 'SUM(value1)'
         }],
         query_obj['extras']['having_druid'],
     )
     self.assertEqual('(value3 in (\'North America\'))',
                      query_obj['extras']['where'])
     self.assertEqual('(SUM(value1) > 5)', query_obj['extras']['having'])
Exemple #6
0
 def test_legacy_filters_still_appear_without_adhoc_filters(self):
     form_data = {
         'metrics': [{
             'expressionType': 'SIMPLE',
             'aggregate': 'SUM',
             'label': 'SUM(value1)',
             'column': {'column_name': 'value1', 'type': 'DOUBLE'},
         }],
         'having': 'SUM(value1) > 5',
         'where': 'value3 in (\'North America\')',
         'filters': [{'col': 'value2', 'val': '100', 'op': '>'}],
         'having_filters': [{'op': '<', 'val': '10', 'col': 'SUM(value1)'}],
     }
     datasource = Mock()
     test_viz = viz.TableViz(datasource, form_data)
     query_obj = test_viz.query_obj()
     self.assertEqual(
         [{'col': 'value2', 'val': '100', 'op': '>'}],
         query_obj['filter'],
     )
     self.assertEqual(
         [{'op': '<', 'val': '10', 'col': 'SUM(value1)'}],
         query_obj['extras']['having_druid'],
     )
     self.assertEqual('value3 in (\'North America\')', query_obj['extras']['where'])
     self.assertEqual('SUM(value1) > 5', query_obj['extras']['having'])
 def test_query_obj_uses_sortby(self, super_query_obj):
     datasource = self.get_datasource_mock()
     form_data = {"timeseries_limit_metric": "__time__", "order_desc": False}
     super_query_obj.return_value = {"metrics": ["colA", "colB"]}
     test_viz = viz.TableViz(datasource, form_data)
     query_obj = test_viz.query_obj()
     self.assertEqual(["colA", "colB", "__time__"], query_obj["metrics"])
     self.assertEqual([("__time__", True)], query_obj["orderby"])
Exemple #8
0
 def test_get_data_applies_percentage(self):
     form_data = {
         'percent_metrics': [{
             'expressionType': 'SIMPLE',
             'aggregate': 'SUM',
             'label': 'SUM(value1)',
             'column': {'column_name': 'value1', 'type': 'DOUBLE'},
         }, 'avg__B'],
         'metrics': [{
             'expressionType': 'SIMPLE',
             'aggregate': 'SUM',
             'label': 'SUM(value1)',
             'column': {'column_name': 'value1', 'type': 'DOUBLE'},
         }, 'count', 'avg__C'],
     }
     datasource = self.get_datasource_mock()
     raw = {}
     raw['SUM(value1)'] = [15, 20, 25, 40]
     raw['avg__B'] = [10, 20, 5, 15]
     raw['avg__C'] = [11, 22, 33, 44]
     raw['count'] = [6, 7, 8, 9]
     raw['groupA'] = ['A', 'B', 'C', 'C']
     raw['groupB'] = ['x', 'x', 'y', 'z']
     df = pd.DataFrame(raw)
     test_viz = viz.TableViz(datasource, form_data)
     data = test_viz.get_data(df)
     # Check method correctly transforms data and computes percents
     self.assertEqual(set([
         'groupA', 'groupB', 'count',
         'SUM(value1)', 'avg__C',
         '%SUM(value1)', '%avg__B',
     ]), set(data['columns']))
     expected = [
         {
             'groupA': 'A', 'groupB': 'x',
             'count': 6, 'SUM(value1)': 15, 'avg__C': 11,
             '%SUM(value1)': 0.15, '%avg__B': 0.2,
         },
         {
             'groupA': 'B', 'groupB': 'x',
             'count': 7, 'SUM(value1)': 20, 'avg__C': 22,
             '%SUM(value1)': 0.2, '%avg__B': 0.4,
         },
         {
             'groupA': 'C', 'groupB': 'y',
             'count': 8, 'SUM(value1)': 25, 'avg__C': 33,
             '%SUM(value1)': 0.25, '%avg__B': 0.1,
         },
         {
             'groupA': 'C', 'groupB': 'z',
             'count': 9, 'SUM(value1)': 40, 'avg__C': 44,
             '%SUM(value1)': 0.40, '%avg__B': 0.3,
         },
     ]
     self.assertEqual(expected, data['records'])
    def test_raise_for_access_viz(self, mock_can_access_schema, mock_can_access):
        test_viz = viz.TableViz(self.get_datasource_mock(), form_data={})

        mock_can_access_schema.return_value = True
        security_manager.raise_for_access(viz=test_viz)

        mock_can_access.return_value = False
        mock_can_access_schema.return_value = False

        with self.assertRaises(SupersetSecurityException):
            security_manager.raise_for_access(viz=test_viz)
 def test_query_obj_uses_sortby(self, super_query_obj):
     datasource = Mock()
     form_data = {
         'timeseries_limit_metric': '__time__',
         'order_desc': False
     }
     super_query_obj.return_value = {'metrics': ['colA', 'colB']}
     test_viz = viz.TableViz(datasource, form_data)
     query_obj = test_viz.query_obj()
     self.assertEqual(['colA', 'colB', '__time__'], query_obj['metrics'])
     self.assertEqual([('__time__', True)], query_obj['orderby'])
Exemple #11
0
    def test_assert_viz_permission(self, mock_datasource_access):
        test_viz = viz.TableViz(self.get_datasource_mock(), form_data={})

        # Visualization with the "datasource_access" permission.
        mock_datasource_access.return_value = True
        security_manager.assert_viz_permission(test_viz)

        # Visualization without the "datasource_access" permission.
        mock_datasource_access.return_value = False

        with self.assertRaises(SupersetSecurityException):
            security_manager.assert_viz_permission(test_viz)
 def test_query_obj_merges_percent_metrics(self, super_query_obj):
     datasource = Mock()
     form_data = {
         'percent_metrics': ['sum__A', 'avg__B', 'max__Y'],
         'metrics': ['sum__A', 'count', 'avg__C'],
     }
     test_viz = viz.TableViz(datasource, form_data)
     f_query_obj = {'metrics': form_data['metrics']}
     super_query_obj.return_value = f_query_obj
     query_obj = test_viz.query_obj()
     self.assertEqual(['sum__A', 'count', 'avg__C', 'avg__B', 'max__Y'],
                      query_obj['metrics'])
 def test_query_obj_merges_percent_metrics(self, super_query_obj):
     datasource = self.get_datasource_mock()
     form_data = {
         "percent_metrics": ["sum__A", "avg__B", "max__Y"],
         "metrics": ["sum__A", "count", "avg__C"],
     }
     test_viz = viz.TableViz(datasource, form_data)
     f_query_obj = {"metrics": form_data["metrics"]}
     super_query_obj.return_value = f_query_obj
     query_obj = test_viz.query_obj()
     self.assertEqual(["sum__A", "count", "avg__C", "avg__B", "max__Y"],
                      query_obj["metrics"])
 def test_query_obj_merges_all_columns(self, super_query_obj):
     datasource = self.get_datasource_mock()
     form_data = {
         "all_columns": ["colA", "colB", "colC"],
         "order_by_cols": ['["colA", "colB"]', '["colC"]'],
     }
     super_query_obj.return_value = {
         "columns": ["colD", "colC"],
         "groupby": ["colA", "colB"],
     }
     test_viz = viz.TableViz(datasource, form_data)
     query_obj = test_viz.query_obj()
     self.assertEqual(form_data["all_columns"], query_obj["columns"])
     self.assertEqual([], query_obj["groupby"])
     self.assertEqual([["colA", "colB"], ["colC"]], query_obj["orderby"])
Exemple #15
0
 def test_query_obj_merges_all_columns(self, super_query_obj):
     datasource = Mock()
     form_data = {
         'all_columns': ['colA', 'colB', 'colC'],
         'order_by_cols': ['["colA", "colB"]', '["colC"]'],
     }
     super_query_obj.return_value = {
         'columns': ['colD', 'colC'],
         'groupby': ['colA', 'colB'],
     }
     test_viz = viz.TableViz(datasource, form_data)
     query_obj = test_viz.query_obj()
     self.assertEqual(form_data['all_columns'], query_obj['columns'])
     self.assertEqual([], query_obj['groupby'])
     self.assertEqual([['colA', 'colB'], ['colC']], query_obj['orderby'])
Exemple #16
0
 def test_adhoc_filters_overwrite_legacy_filters(self):
     form_data = {
         'metrics': [{
             'expressionType': 'SIMPLE',
             'aggregate': 'SUM',
             'label': 'SUM(value1)',
             'column': {
                 'column_name': 'value1',
                 'type': 'DOUBLE'
             },
         }],
         'adhoc_filters': [
             {
                 'expressionType': 'SIMPLE',
                 'clause': 'WHERE',
                 'subject': 'value2',
                 'operator': '>',
                 'comparator': '100',
             },
             {
                 'expressionType': 'SQL',
                 'clause': 'WHERE',
                 'sqlExpression': "value3 in ('North America')",
             },
         ],
         'having':
         'SUM(value1) > 5',
     }
     datasource = self.get_datasource_mock()
     test_viz = viz.TableViz(datasource, form_data)
     query_obj = test_viz.query_obj()
     self.assertEqual(
         [{
             'col': 'value2',
             'val': '100',
             'op': '>'
         }],
         query_obj['filter'],
     )
     self.assertEqual(
         [],
         query_obj['extras']['having_druid'],
     )
     self.assertEqual("(value3 in ('North America'))",
                      query_obj['extras']['where'])
     self.assertEqual('', query_obj['extras']['having'])
Exemple #17
0
 def test_get_data_applies_percentage(self):
     form_data = {
         'percent_metrics': ['sum__A', 'avg__B'],
         'metrics': ['sum__A', 'count', 'avg__C'],
     }
     datasource = Mock()
     raw = {}
     raw['sum__A'] = [15, 20, 25, 40]
     raw['avg__B'] = [10, 20, 5, 15]
     raw['avg__C'] = [11, 22, 33, 44]
     raw['count'] = [6, 7, 8, 9]
     raw['groupA'] = ['A', 'B', 'C', 'C']
     raw['groupB'] = ['x', 'x', 'y', 'z']
     df = pd.DataFrame(raw)
     test_viz = viz.TableViz(datasource, form_data)
     data = test_viz.get_data(df)
     # Check method correctly transforms data and computes percents
     self.assertEqual(set([
         'groupA', 'groupB', 'count',
         'sum__A', 'avg__C',
         '%sum__A', '%avg__B',
     ]), set(data['columns']))
     expected = [
         {
             'groupA': 'A', 'groupB': 'x',
             'count': 6, 'sum__A': 15, 'avg__C': 11,
             '%sum__A': 0.15, '%avg__B': 0.2,
         },
         {
             'groupA': 'B', 'groupB': 'x',
             'count': 7, 'sum__A': 20, 'avg__C': 22,
             '%sum__A': 0.2, '%avg__B': 0.4,
         },
         {
             'groupA': 'C', 'groupB': 'y',
             'count': 8, 'sum__A': 25, 'avg__C': 33,
             '%sum__A': 0.25, '%avg__B': 0.1,
         },
         {
             'groupA': 'C', 'groupB': 'z',
             'count': 9, 'sum__A': 40, 'avg__C': 44,
             '%sum__A': 0.40, '%avg__B': 0.3,
         },
     ]
     self.assertEqual(expected, data['records'])
Exemple #18
0
 def test_should_be_timeseries_raises_when_no_granularity(self):
     datasource = Mock()
     form_data = {'include_time': True}
     test_viz = viz.TableViz(datasource, form_data)
     with self.assertRaises(Exception):
         test_viz.should_be_timeseries()
 def test_get_data_applies_percentage(self):
     form_data = {
         "percent_metrics": [
             {
                 "expressionType": "SIMPLE",
                 "aggregate": "SUM",
                 "label": "SUM(value1)",
                 "column": {"column_name": "value1", "type": "DOUBLE"},
             },
             "avg__B",
         ],
         "metrics": [
             {
                 "expressionType": "SIMPLE",
                 "aggregate": "SUM",
                 "label": "SUM(value1)",
                 "column": {"column_name": "value1", "type": "DOUBLE"},
             },
             "count",
             "avg__C",
         ],
     }
     datasource = self.get_datasource_mock()
     raw = {}
     raw["SUM(value1)"] = [15, 20, 25, 40]
     raw["avg__B"] = [10, 20, 5, 15]
     raw["avg__C"] = [11, 22, 33, 44]
     raw["count"] = [6, 7, 8, 9]
     raw["groupA"] = ["A", "B", "C", "C"]
     raw["groupB"] = ["x", "x", "y", "z"]
     df = pd.DataFrame(raw)
     test_viz = viz.TableViz(datasource, form_data)
     data = test_viz.get_data(df)
     # Check method correctly transforms data and computes percents
     self.assertEqual(
         set(
             [
                 "groupA",
                 "groupB",
                 "count",
                 "SUM(value1)",
                 "avg__C",
                 "%SUM(value1)",
                 "%avg__B",
             ]
         ),
         set(data["columns"]),
     )
     expected = [
         {
             "groupA": "A",
             "groupB": "x",
             "count": 6,
             "SUM(value1)": 15,
             "avg__C": 11,
             "%SUM(value1)": 0.15,
             "%avg__B": 0.2,
         },
         {
             "groupA": "B",
             "groupB": "x",
             "count": 7,
             "SUM(value1)": 20,
             "avg__C": 22,
             "%SUM(value1)": 0.2,
             "%avg__B": 0.4,
         },
         {
             "groupA": "C",
             "groupB": "y",
             "count": 8,
             "SUM(value1)": 25,
             "avg__C": 33,
             "%SUM(value1)": 0.25,
             "%avg__B": 0.1,
         },
         {
             "groupA": "C",
             "groupB": "z",
             "count": 9,
             "SUM(value1)": 40,
             "avg__C": 44,
             "%SUM(value1)": 0.40,
             "%avg__B": 0.3,
         },
     ]
     self.assertEqual(expected, data["records"])