def test_load_explore_json_into_cache(self, mock_update_job): async_query_manager.init_app(app) table = self.get_table(name="birth_names") user = security_manager.find_user("gamma") form_data = { "datasource": f"{table.id}__table", "viz_type": "dist_bar", "time_range_endpoints": ["inclusive", "exclusive"], "granularity_sqla": "ds", "time_range": "No filter", "metrics": ["count"], "adhoc_filters": [], "groupby": ["gender"], "row_limit": 100, } job_metadata = { "channel_id": str(uuid4()), "job_id": str(uuid4()), "user_id": user.id, "status": "pending", "errors": [], } with mock.patch.object( async_queries, "ensure_user_is_set" ) as ensure_user_is_set: load_explore_json_into_cache(job_metadata, form_data) ensure_user_is_set.assert_called_once_with(user.id) mock_update_job.assert_called_once_with( job_metadata, "done", result_url=mock.ANY )
def test_load_chart_data_into_cache(self, mock_set_form_data, mock_update_job): async_query_manager.init_app(app) query_context = get_query_context("birth_names") user = security_manager.find_user("gamma") job_metadata = { "channel_id": str(uuid4()), "job_id": str(uuid4()), "user_id": user.id, "status": "pending", "errors": [], } load_chart_data_into_cache(job_metadata, query_context) mock_set_form_data.assert_called_once_with(query_context) mock_update_job.assert_called_once_with(job_metadata, "done", result_url=mock.ANY)
def _get_screenshot(self, report_schedule: ReportSchedule) -> ScreenshotData: """ Get a chart or dashboard screenshot :raises: ReportScheduleScreenshotFailedError """ url = self._get_url(report_schedule) screenshot: Optional[BaseScreenshot] = None if report_schedule.chart: screenshot = ChartScreenshot(url, report_schedule.chart.digest) else: screenshot = DashboardScreenshot(url, report_schedule.dashboard.digest) image_url = self._get_url(report_schedule, user_friendly=True) user = security_manager.find_user(app.config["THUMBNAIL_SELENIUM_USER"]) image_data = screenshot.compute_and_cache( user=user, cache=thumbnail_cache, force=True, ) if not image_data: raise ReportScheduleScreenshotFailedError() return ScreenshotData(url=image_url, image=image_data)
def test_load_chart_data_into_cache_error(self, mock_update_job, mock_run_command): async_query_manager.init_app(app) query_context = get_query_context("birth_names") user = security_manager.find_user("gamma") job_metadata = { "channel_id": str(uuid4()), "job_id": str(uuid4()), "user_id": user.id, "status": "pending", "errors": [], } with pytest.raises(ChartDataQueryFailedError): load_chart_data_into_cache(job_metadata, query_context) mock_run_command.assert_called_once_with(cache=True) errors = [{"message": "Error: foo"}] mock_update_job.assert_called_once_with(job_metadata, "error", errors=errors)
def test_load_explore_json_into_cache_error(self, mock_update_job): async_query_manager.init_app(app) user = security_manager.find_user("gamma") form_data = {} job_metadata = { "channel_id": str(uuid4()), "job_id": str(uuid4()), "user_id": user.id, "status": "pending", "errors": [], } with pytest.raises(SupersetException): with mock.patch.object( async_queries, "ensure_user_is_set" ) as ensure_user_is_set: load_explore_json_into_cache(job_metadata, form_data) ensure_user_is_set.assert_called_once_with(user.id) errors = ["The dataset associated with this chart no longer exists"] mock_update_job.assert_called_once_with(job_metadata, "error", errors=errors)
def test_soft_timeout_load_chart_data_into_cache( self, mock_update_job, mock_run_command ): async_query_manager.init_app(app) user = security_manager.find_user("gamma") form_data = {} job_metadata = { "channel_id": str(uuid4()), "job_id": str(uuid4()), "user_id": user.id, "status": "pending", "errors": [], } errors = ["A timeout occurred while loading chart data"] with pytest.raises(SoftTimeLimitExceeded): with mock.patch.object( async_queries, "ensure_user_is_set", ) as ensure_user_is_set: ensure_user_is_set.side_effect = SoftTimeLimitExceeded() load_chart_data_into_cache(job_metadata, form_data) ensure_user_is_set.assert_called_once_with(user.id, "error", errors=errors)