예제 #1
0
 def test_process_metrics(self):
     # test TableViz metrics in correct order
     form_data = {
         "url_params": {},
         "row_limit":
         500,
         "metric":
         "sum__SP_POP_TOTL",
         "entity":
         "country_code",
         "secondary_metric":
         "sum__SP_POP_TOTL",
         "granularity_sqla":
         "year",
         "page_length":
         0,
         "all_columns": [],
         "viz_type":
         "table",
         "since":
         "2014-01-01",
         "until":
         "2014-01-02",
         "metrics":
         ["sum__SP_POP_TOTL", "SUM(SE_PRM_NENR_MA)", "SUM(SP_URB_TOTL)"],
         "country_fieldtype":
         "cca3",
         "percent_metrics": ["count"],
         "slice_id":
         74,
         "time_grain_sqla":
         None,
         "order_by_cols": [],
         "groupby": ["country_name"],
         "compare_lag":
         "10",
         "limit":
         "25",
         "datasource":
         "2__table",
         "table_timestamp_format":
         "%Y-%m-%d %H:%M:%S",
         "markup_type":
         "markdown",
         "where":
         "",
         "compare_suffix":
         "o10Y",
     }
     datasource = Mock()
     datasource.type = "table"
     test_viz = viz.BaseViz(datasource, form_data)
     expect_metric_labels = [
         u"sum__SP_POP_TOTL",
         u"SUM(SE_PRM_NENR_MA)",
         u"SUM(SP_URB_TOTL)",
         u"count",
     ]
     self.assertEqual(test_viz.metric_labels, expect_metric_labels)
     self.assertEqual(test_viz.all_metrics, expect_metric_labels)
예제 #2
0
 def test_get_df_returns_empty_df(self):
     form_data = {'dummy': 123}
     query_obj = {'granularity': 'day'}
     datasource = self.get_datasource_mock()
     test_viz = viz.BaseViz(datasource, form_data)
     result = test_viz.get_df(query_obj)
     self.assertEqual(type(result), pd.DataFrame)
     self.assertTrue(result.empty)
예제 #3
0
 def test_cache_timeout(self):
     datasource = Mock()
     datasource.cache_timeout = 0
     test_viz = viz.BaseViz(datasource, form_data={})
     self.assertEqual(0, test_viz.cache_timeout)
     datasource.cache_timeout = 156
     test_viz = viz.BaseViz(datasource, form_data={})
     self.assertEqual(156, test_viz.cache_timeout)
     datasource.cache_timeout = None
     datasource.database = Mock()
     datasource.database.cache_timeout = 0
     self.assertEqual(0, test_viz.cache_timeout)
     datasource.database.cache_timeout = 1666
     self.assertEqual(1666, test_viz.cache_timeout)
     datasource.database.cache_timeout = None
     test_viz = viz.BaseViz(datasource, form_data={})
     self.assertEqual(app.config['CACHE_DEFAULT_TIMEOUT'], test_viz.cache_timeout)
예제 #4
0
 def test_cache_timeout(self):
     datasource = Mock()
     datasource.cache_timeout = 156
     test_viz = viz.BaseViz(datasource, form_data={})
     self.assertEqual(156, test_viz.cache_timeout)
     datasource.cache_timeout = None
     datasource.database = Mock()
     datasource.database.cache_timeout = 1666
     self.assertEqual(1666, test_viz.cache_timeout)
예제 #5
0
 def test_get_fillna_returns_default_on_null_columns(self):
     form_data = {
         'viz_type': 'table',
         'token': '12345',
     }
     datasource = {'type': 'table'}
     test_viz = viz.BaseViz(datasource, form_data)
     self.assertEqual(test_viz.default_fillna,
                      test_viz.get_fillna_for_columns())
예제 #6
0
    def test_get_df_handles_dttm_col(self):
        form_data = {'dummy': 123}
        query_obj = {'granularity': 'day'}
        results = Mock()
        results.query = Mock()
        results.status = Mock()
        results.error_message = Mock()
        datasource = Mock()
        datasource.type = 'table'
        datasource.query = Mock(return_value=results)
        mock_dttm_col = Mock()
        datasource.get_col = Mock(return_value=mock_dttm_col)

        test_viz = viz.BaseViz(datasource, form_data)
        test_viz.df_metrics_to_num = Mock()
        test_viz.get_fillna_for_columns = Mock(return_value=0)

        results.df = pd.DataFrame(data={DTTM_ALIAS: ['1960-01-01 05:00:00']})
        datasource.offset = 0
        mock_dttm_col = Mock()
        datasource.get_col = Mock(return_value=mock_dttm_col)
        mock_dttm_col.python_date_format = 'epoch_ms'
        result = test_viz.get_df(query_obj)
        print(result)
        import logging
        logging.info(result)
        pd.testing.assert_series_equal(
            result[DTTM_ALIAS],
            pd.Series([datetime(1960, 1, 1, 5, 0)], name=DTTM_ALIAS),
        )

        mock_dttm_col.python_date_format = None
        result = test_viz.get_df(query_obj)
        pd.testing.assert_series_equal(
            result[DTTM_ALIAS],
            pd.Series([datetime(1960, 1, 1, 5, 0)], name=DTTM_ALIAS),
        )

        datasource.offset = 1
        result = test_viz.get_df(query_obj)
        pd.testing.assert_series_equal(
            result[DTTM_ALIAS],
            pd.Series([datetime(1960, 1, 1, 6, 0)], name=DTTM_ALIAS),
        )

        datasource.offset = 0
        results.df = pd.DataFrame(data={DTTM_ALIAS: ['1960-01-01']})
        mock_dttm_col.python_date_format = '%Y-%m-%d'
        result = test_viz.get_df(query_obj)
        pd.testing.assert_series_equal(
            result[DTTM_ALIAS],
            pd.Series([datetime(1960, 1, 1, 0, 0)], name=DTTM_ALIAS),
        )
예제 #7
0
 def test_cache_timeout(self):
     datasource = Mock()
     form_data = {'cache_timeout': '10'}
     test_viz = viz.BaseViz(datasource, form_data)
     self.assertEqual(10, test_viz.cache_timeout)
     del form_data['cache_timeout']
     datasource.cache_timeout = 156
     self.assertEqual(156, test_viz.cache_timeout)
     datasource.cache_timeout = None
     datasource.database = Mock()
     datasource.database.cache_timeout = 1666
     self.assertEqual(1666, test_viz.cache_timeout)
예제 #8
0
    def test_get_df_handles_dttm_col(self):
        datasource = Mock()
        datasource.type = 'table'
        datasource.offset = 1
        mock_dttm_col = Mock()
        mock_dttm_col.python_date_format = 'epoch_ms'
        datasource.get_col = Mock(return_value=mock_dttm_col)
        form_data = {'dummy': 123}
        query_obj = {'granularity': 'day'}
        results = Mock()
        results.query = Mock()
        results.status = Mock()
        results.error_message = Mock()
        df = Mock()
        df.columns = [DTTM_ALIAS]
        f_datetime = datetime(1960, 1, 1, 5, 0)
        df.__getitem__ = Mock(return_value=pd.Series([f_datetime]))
        df.__setitem__ = Mock()
        df.replace = Mock()
        df.fillna = Mock()
        results.df = df
        results.df.empty = False
        datasource.query = Mock(return_value=results)
        test_viz = viz.BaseViz(datasource, form_data)

        test_viz.df_metrics_to_num = Mock()
        test_viz.get_fillna_for_columns = Mock(return_value=0)
        test_viz.get_df(query_obj)
        mock_call = df.__setitem__.mock_calls[0]
        self.assertEqual(mock_call[1][0], DTTM_ALIAS)
        self.assertFalse(mock_call[1][1].empty)
        self.assertEqual(mock_call[1][1][0], f_datetime)
        mock_call = df.__setitem__.mock_calls[1]
        self.assertEqual(mock_call[1][0], DTTM_ALIAS)
        self.assertEqual(mock_call[1][1][0].hour, 6)
        self.assertEqual(mock_call[1][1].dtype, 'datetime64[ns]')
        mock_dttm_col.python_date_format = 'utc'
        test_viz.get_df(query_obj)
        mock_call = df.__setitem__.mock_calls[2]
        self.assertEqual(mock_call[1][0], DTTM_ALIAS)
        self.assertFalse(mock_call[1][1].empty)
        self.assertEqual(mock_call[1][1][0].hour, 7)
        mock_call = df.__setitem__.mock_calls[3]
        self.assertEqual(mock_call[1][0], DTTM_ALIAS)
        self.assertEqual(mock_call[1][1][0].hour, 6)
        self.assertEqual(mock_call[1][1].dtype, 'datetime64[ns]')
        mock_call = df.__setitem__.mock_calls[4]
        self.assertEqual(mock_call[1][0], DTTM_ALIAS)
        self.assertEqual(mock_call[1][1][0].hour, 7)
        self.assertEqual(mock_call[1][1].dtype, 'datetime64[ns]')
예제 #9
0
 def test_get_df_returns_empty_df(self):
     datasource = Mock()
     datasource.type = 'table'
     form_data = {'dummy': 123}
     query_obj = {'granularity': 'day'}
     results = Mock()
     results.query = Mock()
     results.status = Mock()
     results.error_message = None
     results.df = pd.DataFrame()
     datasource.query = Mock(return_value=results)
     test_viz = viz.BaseViz(datasource, form_data)
     result = test_viz.get_df(query_obj)
     self.assertEqual(type(result), pd.DataFrame)
     self.assertTrue(result.empty)
예제 #10
0
 def test_process_metrics(self):
     # test TableViz metrics in correct order
     form_data = {
         'url_params': {},
         'row_limit': 500,
         'metric': 'sum__SP_POP_TOTL',
         'entity': 'country_code',
         'secondary_metric': 'sum__SP_POP_TOTL',
         'granularity_sqla': 'year',
         'page_length': 0,
         'all_columns': [],
         'viz_type': 'table',
         'since': '2014-01-01',
         'until': '2014-01-02',
         'metrics': [
             'sum__SP_POP_TOTL',
             'SUM(SE_PRM_NENR_MA)',
             'SUM(SP_URB_TOTL)',
         ],
         'country_fieldtype': 'cca3',
         'percent_metrics': [
             'count',
         ],
         'slice_id': 74,
         'time_grain_sqla': None,
         'order_by_cols': [],
         'groupby': [
             'country_name',
         ],
         'compare_lag': '10',
         'limit': '25',
         'datasource': '2__table',
         'table_timestamp_format': '%Y-%m-%d %H:%M:%S',
         'markup_type': 'markdown',
         'where': '',
         'compare_suffix': 'o10Y',
     }
     datasource = Mock()
     datasource.type = 'table'
     test_viz = viz.BaseViz(datasource, form_data)
     expect_metric_labels = [u'sum__SP_POP_TOTL',
                             u'SUM(SE_PRM_NENR_MA)',
                             u'SUM(SP_URB_TOTL)',
                             u'count',
                             ]
     self.assertEqual(test_viz.metric_labels, expect_metric_labels)
     self.assertEqual(test_viz.all_metrics, expect_metric_labels)
예제 #11
0
 def test_get_df_returns_empty_df(self):
     datasource = Mock()
     datasource.type = 'table'
     mock_dttm_col = Mock()
     mock_dttm_col.python_date_format = Mock()
     datasource.get_col = Mock(return_value=mock_dttm_col)
     form_data = {'dummy': 123}
     query_obj = {'granularity': 'day'}
     results = Mock()
     results.query = Mock()
     results.status = Mock()
     results.error_message = None
     results.df = Mock()
     results.df.empty = True
     datasource.query = Mock(return_value=results)
     test_viz = viz.BaseViz(datasource, form_data)
     result = test_viz.get_df(query_obj)
     self.assertEqual(type(result), pd.DataFrame)
     self.assertTrue(result.empty)
     self.assertEqual(test_viz.error_message, 'No data.')
     self.assertEqual(test_viz.status, utils.QueryStatus.FAILED)
예제 #12
0
 def test_constructor_exception_no_datasource(self):
     form_data = {}
     datasource = None
     with self.assertRaises(Exception):
         viz.BaseViz(datasource, form_data)