You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by bk...@apache.org on 2020/09/24 17:30:24 UTC

[incubator-superset] branch master updated: Support jinja templates (#11008)

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 b2fdf12  Support jinja templates (#11008)
b2fdf12 is described below

commit b2fdf12f626925093160eb36cbe3af042660f919
Author: Bogdan <b....@gmail.com>
AuthorDate: Thu Sep 24 10:29:44 2020 -0700

    Support jinja templates (#11008)
    
    Co-authored-by: bogdan kyryliuk <bo...@dropbox.com>
---
 superset/tasks/alerts/observer.py |  8 ++++----
 tests/alerts_tests.py             | 21 +++++++++++++++++++++
 2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/superset/tasks/alerts/observer.py b/superset/tasks/alerts/observer.py
index 482faed..b6805cf 100644
--- a/superset/tasks/alerts/observer.py
+++ b/superset/tasks/alerts/observer.py
@@ -22,8 +22,8 @@ from typing import Optional
 import pandas as pd
 from sqlalchemy.orm import Session
 
+from superset import jinja_context
 from superset.models.alerts import Alert, SQLObservation
-from superset.sql_parse import ParsedQuery
 
 logger = logging.getLogger("tasks.email_reports")
 
@@ -42,9 +42,9 @@ def observe(alert_id: int, session: Session) -> Optional[str]:
 
     value = None
 
-    parsed_query = ParsedQuery(sql_observer.sql)
-    sql = parsed_query.stripped()
-    df = sql_observer.database.get_df(sql)
+    tp = jinja_context.get_template_processor(database=sql_observer.database)
+    rendered_sql = tp.process_template(sql_observer.sql)
+    df = sql_observer.database.get_df(rendered_sql)
 
     error_msg = validate_observer_result(df, alert.id, alert.label)
 
diff --git a/tests/alerts_tests.py b/tests/alerts_tests.py
index b09ac93..53245e6 100644
--- a/tests/alerts_tests.py
+++ b/tests/alerts_tests.py
@@ -154,6 +154,27 @@ def test_alert_observer(setup_database):
     assert alert7.sql_observer[0].observations[-1].value is None
     assert alert7.sql_observer[0].observations[-1].error_msg is not None
 
+    # Test multiline SQLObserver
+    alert8 = create_alert(
+        dbsession,
+        """
+        -- comment
+        SELECT
+            1 -- comment
+        FROM test_table
+            WHERE first = 1
+        """,
+    )
+    observe(alert8.id, dbsession)
+    assert alert8.sql_observer[0].observations[-1].value == 1.0
+    assert alert8.sql_observer[0].observations[-1].error_msg is None
+
+    # Test jinja
+    alert9 = create_alert(dbsession, "SELECT {{ 2 }}")
+    observe(alert9.id, dbsession)
+    assert alert9.sql_observer[0].observations[-1].value == 2.0
+    assert alert9.sql_observer[0].observations[-1].error_msg is None
+
 
 @patch("superset.tasks.schedules.deliver_alert")
 def test_evaluate_alert(mock_deliver_alert, setup_database):