forked from apache/superset
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: call screenshot to store
query_context
(apache#15846)
* feat: call screenshot to store query_context * Add unit test * Move updateQueryContext to ExploreChartPanel * Add error handling * Fix code * Fix logic
- Loading branch information
1 parent
8c7e09e
commit 2ce676d
Showing
6 changed files
with
121 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -50,7 +50,6 @@ | |
ReportScheduleNotFoundError, | ||
ReportScheduleNotificationError, | ||
ReportSchedulePreviousWorkingError, | ||
ReportSchedulePruneLogError, | ||
ReportScheduleScreenshotFailedError, | ||
ReportScheduleScreenshotTimeout, | ||
ReportScheduleWorkingTimeoutError, | ||
|
@@ -133,6 +132,7 @@ def create_report_notification( | |
validator_config_json: Optional[str] = None, | ||
grace_period: Optional[int] = None, | ||
report_format: Optional[ReportDataFormat] = None, | ||
name: Optional[str] = None, | ||
) -> ReportSchedule: | ||
report_type = report_type or ReportScheduleType.REPORT | ||
target = email_target or slack_channel | ||
|
@@ -154,11 +154,14 @@ def create_report_notification( | |
recipient_config_json=json.dumps(config_json), | ||
) | ||
|
||
if name is None: | ||
name = "report_with_csv" if report_format else "report" | ||
|
||
report_schedule = insert_report_schedule( | ||
type=report_type, | ||
name=f"report_with_csv" if report_format else f"report", | ||
crontab=f"0 9 * * *", | ||
description=f"Daily report", | ||
name=name, | ||
crontab="0 9 * * *", | ||
description="Daily report", | ||
sql=sql, | ||
chart=chart, | ||
dashboard=dashboard, | ||
|
@@ -217,6 +220,7 @@ def create_report_email_chart(): | |
def create_report_email_chart_with_csv(): | ||
with app.app_context(): | ||
chart = db.session.query(Slice).first() | ||
chart.query_context = '{"mock": "query_context"}' | ||
report_schedule = create_report_notification( | ||
email_target="[email protected]", | ||
chart=chart, | ||
|
@@ -226,6 +230,21 @@ def create_report_email_chart_with_csv(): | |
cleanup_report_schedule(report_schedule) | ||
|
||
|
||
@pytest.fixture() | ||
def create_report_email_chart_with_csv_no_query_context(): | ||
with app.app_context(): | ||
chart = db.session.query(Slice).first() | ||
chart.query_context = None | ||
report_schedule = create_report_notification( | ||
email_target="[email protected]", | ||
chart=chart, | ||
report_format=ReportDataFormat.DATA, | ||
name="report_csv_no_query_context", | ||
) | ||
yield report_schedule | ||
cleanup_report_schedule(report_schedule) | ||
|
||
|
||
@pytest.fixture() | ||
def create_report_email_dashboard(): | ||
with app.app_context(): | ||
|
@@ -254,6 +273,7 @@ def create_report_slack_chart(): | |
def create_report_slack_chart_with_csv(): | ||
with app.app_context(): | ||
chart = db.session.query(Slice).first() | ||
chart.query_context = '{"mock": "query_context"}' | ||
report_schedule = create_report_notification( | ||
slack_channel="slack_channel", | ||
chart=chart, | ||
|
@@ -660,6 +680,47 @@ def test_email_chart_report_schedule_with_csv( | |
assert_log(ReportState.SUCCESS) | ||
|
||
|
||
@pytest.mark.usefixtures( | ||
"load_birth_names_dashboard_with_slices", | ||
"create_report_email_chart_with_csv_no_query_context", | ||
) | ||
@patch("superset.utils.csv.urllib.request.urlopen") | ||
@patch("superset.utils.csv.urllib.request.OpenerDirector.open") | ||
@patch("superset.reports.notifications.email.send_email_smtp") | ||
@patch("superset.utils.csv.get_chart_csv_data") | ||
@patch("superset.utils.screenshots.ChartScreenshot.get_screenshot") | ||
def test_email_chart_report_schedule_with_csv_no_query_context( | ||
screenshot_mock, | ||
csv_mock, | ||
email_mock, | ||
mock_open, | ||
mock_urlopen, | ||
create_report_email_chart_with_csv_no_query_context, | ||
): | ||
""" | ||
ExecuteReport Command: Test chart email report schedule with CSV (no query context) | ||
""" | ||
# setup screenshot mock | ||
screenshot_mock.return_value = SCREENSHOT_FILE | ||
|
||
# setup csv mock | ||
response = Mock() | ||
mock_open.return_value = response | ||
mock_urlopen.return_value = response | ||
mock_urlopen.return_value.getcode.return_value = 200 | ||
response.read.return_value = CSV_FILE | ||
|
||
with freeze_time("2020-01-01T00:00:00Z"): | ||
AsyncExecuteReportScheduleCommand( | ||
TEST_ID, | ||
create_report_email_chart_with_csv_no_query_context.id, | ||
datetime.utcnow(), | ||
).run() | ||
|
||
# verify that when query context is null we request a screenshot | ||
screenshot_mock.assert_called_once() | ||
|
||
|
||
@pytest.mark.usefixtures( | ||
"load_birth_names_dashboard_with_slices", "create_report_email_dashboard" | ||
) | ||
|