This is an automated email from the ASF dual-hosted git repository.

bkyryliuk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 801fb40  Allow empty observations in alerting (#10939)
801fb40 is described below

commit 801fb4063c65cab13ceb7550d10f8911810c2a9f
Author: Bogdan <[email protected]>
AuthorDate: Mon Sep 21 08:48:02 2020 -0700

    Allow empty observations in alerting (#10939)
    
    Co-authored-by: bogdan kyryliuk <[email protected]>
---
 superset/tasks/alerts/observer.py | 8 ++++----
 tests/alerts_tests.py             | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/superset/tasks/alerts/observer.py 
b/superset/tasks/alerts/observer.py
index 34ff668..482faed 100644
--- a/superset/tasks/alerts/observer.py
+++ b/superset/tasks/alerts/observer.py
@@ -48,7 +48,7 @@ def observe(alert_id: int, session: Session) -> Optional[str]:
 
     error_msg = validate_observer_result(df, alert.id, alert.label)
 
-    if not error_msg and df.to_records()[0][1] is not None:
+    if not error_msg and not df.empty and df.to_records()[0][1] is not None:
         value = float(df.to_records()[0][1])
 
     observation = SQLObservation(
@@ -74,9 +74,9 @@ def validate_observer_result(
     Returns an error message if the result is invalid.
     """
     try:
-        assert (
-            not sql_result.empty
-        ), f"Observer for alert <{alert_id}:{alert_label}> returned no rows"
+        if sql_result.empty:
+            # empty results are used for the not null validator
+            return None
 
         rows = sql_result.to_records()
 
diff --git a/tests/alerts_tests.py b/tests/alerts_tests.py
index 81c94b0..b09ac93 100644
--- a/tests/alerts_tests.py
+++ b/tests/alerts_tests.py
@@ -128,11 +128,11 @@ def test_alert_observer(setup_database):
     assert alert3.sql_observer[0].observations[-1].value is None
     assert alert3.sql_observer[0].observations[-1].error_msg is None
 
-    # Test SQLObserver with empty SQL return
+    # Test SQLObserver with empty SQL return, expected
     alert4 = create_alert(dbsession, "SELECT first FROM test_table WHERE first 
= -1")
     observe(alert4.id, dbsession)
     assert alert4.sql_observer[0].observations[-1].value is None
-    assert alert4.sql_observer[0].observations[-1].error_msg is not None
+    assert alert4.sql_observer[0].observations[-1].error_msg is None
 
     # Test SQLObserver with str result
     alert5 = create_alert(dbsession, "SELECT 'test_string' as string_value")

Reply via email to