Show exception as step in scenario run log
I have a scenario with a custom python step running the below code. Essentially I'm checking if the tables are accessible (not locked for loading) and I check if the source data is newer than the destination table.
Checking the tables for access is done using the scenario function execute_sql. This is convenient because it prints a step to the scenario run log. Is there a way I can print a python step to the scenario log just the like execute_sql()?
from dataiku.scenario import Scenario
import time
import datetime
from datetime import timedelta
from dataiku.core.sql import SQLExecutor2
from dateutil.relativedelta import relativedelta
TD_executor = SQLExecutor2(connection="TD")
SSO_executor = SQLExecutor2(connection="SSO")
today = datetime.datetime.now().date()
counter = 0
max_tries = 35
sec = 60
wait_time = 10
state_list = ['QQ']
view_list = ['xxx', 'yyy', 'zzz']
scenario = Scenario()
def check_views_access(conn_name, state, view):
scenario.execute_sql(conn_name, "select max(dt) from {state}.{view}".format(state=state, view=view))
def check_eeee(conn_name):
scenario.execute_sql(conn_name,"select top 1 XX from [ddd].[TBL1]")
scenario.execute_sql(conn_name,"select top 1 XX from [ddd].[TBL2]")
def compare_sss_dt_to_iii_dt(TD_exec, SSO_exec):
sss_pd_dt = TD_exec.query_to_df("select max(dt) as dt from view.tbl").iloc[0,0]
sss_pd_dt = datetime.datetime.strptime(sss_pd_dt, "%Y-%m-%dT%H:%M:%S.%fZ")
iii_pd_dt = SSO_exec.query_to_df("select max(dt) as dt from db.schema.tbl").iloc[0,0]
iii_pd_dt = datetime.datetime.strptime(iii_pd_dt, "%Y-%m-%dT%H:%M:%S.%fZ")
if sss_pd_dt == iii_pd_dt:
raise Exception("sss and iii are same")
elif sss_pd_dt > iii_pd_dt:
pass
elif sss_pd_dt < iii_pd_dt:
raise Exception("sss is lower than iii")
while counter < max_tries:
try:
for state in state_list:
for view in view_list:
check_views_access(conn_name = 'TD',
state = state,
view = view)
check_eeee(conn_name = 'TTT')
compare_sss_dt_to_iii_dt(TD_exec=TD_executor, SSO_exec=SSO_executor)
break
except:
time.sleep(sec * wait_time)
counter += 1
if counter >= max_tries:
raise Exception("failed to run")
I want to be able to see in the scenario log that my function (compare_sss_dt_to_iii_dt) raised an exception.

Answers
-
One solution I came up with is to create another scenario in the project and put just one function in there. Then I have my main scenario use scenario.run_scenario("other_scenario") in a custom python step to call that auxiliary scenario so that it shows the outcome of that function as a single step within my main scenario.
