Custom python trigger time-conditioned won't launch Scenario
Hello,
I am confronted in the same problem.
I have create a custpm trigger:
from dataiku.scenario import Trigger from datetime import datetime, date import dataiku from loguru import logger # Run every seconds: 10800 = 3600 x 3 = 3 hours t = Trigger() execution_date = date.today() logger.info(f"execution_date: {execution_date}") now = datetime.today() logger.info(f"now: {now}") execution_hour = now.hour logger.info(f"execution_hour: {execution_hour}") date_format = "%d-%m-%Y" update_date_str = dataiku.get_custom_variables().get("update_date") if update_date_str: update_date = datetime.strptime(update_date_str, date_format) logger.info(f"update_date: {update_date}") else: update_date = (datetime.fromtimestamp(0)).date() logger.info(f"update_date: {update_date}") delta_days = execution_date - update_date logger.info(f"delta_days: {delta_days}") # lire la date d'update stockée en tant que variable globale weekday_execution = execution_date.weekday() logger.info(f"weekday_execution: {weekday_execution}") if weekday_execution < 2: # lundi 0, mardi 1 value: 2 # 5 execution par jour 8,11,14,17,20 if execution_hour >= 8 and execution_hour =< 20: if delta_days > 3: t.fire()
i have added a step : Build only this dataset
first test: Run every seconds : 60, la the scenario was never launched (Auto-triggers: on and custom trigger: on)
second test: I have added the second Time based trigger and activate it. The script launched even the condition in the custom trigger not verified.
can someone help me ?
Thanks
Answers
-
Turribeach Dataiku DSS Core Designer, Neuron, Dataiku DSS Adv Designer, Registered, Neuron 2023 Posts: 2,112 Neuron
Thanks for posting again, much easier to reproduce now. OK the problem is that your code has some errors:
It should be "<=" not "=<". It's highly advisable that you test your custom Python trigger code in a Jupyter Notebook or at least you review the Scenario logs to catch any Python errors. With regards to the the second Time based trigger you added you should note all scenario triggers are evaluated individually so currently there is no option to combine them into a logical criteria. I have actually raised an enhancement request for this so feel free to vote for it by clicking on the up arrow:
-
Thank you for the answer
from dataiku.scenario import Trigger from datetime import datetime, date import dataiku from loguru import logger now = datetime.today() execution_date = now.replace(hour=0, minute=0, second=0, microsecond=0) logger.info(f"execution_date: {execution_date}") execution_hour = now.hour logger.info(f"execution_hour: {execution_hour}") update_date = now.replace(day=1, hour=0, minute=0, second=0, microsecond=0) logger.info(f"update_date: {update_date}") delta_days = (execution_date - update_date).days logger.info(f"delta_days: {delta_days}") # lire la date d'update stockée en tant que variable globale weekday_execution = execution_date.weekday() logger.info(f"weekday_execution: {weekday_execution}") if weekday_execution < 5: # lundi 0, mardi 1 value: 2 # 5 execution par jour 8,11,14,17,20 if execution_hour >= 8 and execution_hour <= 20: if delta_days > 3: print("Fire")
I have fix the code. Now i try to run the scenarion to populate the table using the custom trigger every 300 seconds. The scenario never launched. How can I launch it automatically ?
Thanks
Regars
-
Turribeach Dataiku DSS Core Designer, Neuron, Dataiku DSS Adv Designer, Registered, Neuron 2023 Posts: 2,112 Neuron
I removed the t.fire() as I was testing on Notebook. You should put it back in, that's the statement that fires the trigger.
-
Yes, i have replaced the print with t.fire(). but the trigger not launch automatically
The code used is below:
from dataiku.scenario import Trigger from datetime import datetime, date import dataiku from loguru import logger # Run every seconds: 10800 = 3600 x 3 = 3 hours t = Trigger() now = datetime.today() logger.info(f"now: {now}") execution_hour = now.hour logger.info(f"execution_hour: {execution_hour}") execution_date = now.replace(hour=0, minute=0, second=0, microsecond=0) logger.info(f"execution_date: {execution_date}") date_format = "%d-%m-%Y" update_date_str = dataiku.get_custom_variables().get("update_date") if update_date_str: update_date = datetime.strptime(update_date_str, date_format) logger.info(f"update_date: {update_date}") else: update_date = (datetime.fromtimestamp(0)).date() logger.info(f"update_date: {update_date}") delta_days = (execution_date - update_date).days logger.info(f"delta_days: {delta_days}") # lire la date d'update stockée en tant que variable globale weekday_execution = execution_date.weekday() logger.info(f"weekday_execution: {weekday_execution}") if weekday_execution < 2: # lundi 0, mardi 1 value: 2 # 5 execution par jour 8,11,14,17,20 if execution_hour >= 8 and execution_hour <= 20: if delta_days > 3: t.fire()
-
Turribeach Dataiku DSS Core Designer, Neuron, Dataiku DSS Adv Designer, Registered, Neuron 2023 Posts: 2,112 Neuron
The code is only meant to execute the trigger on Monday and Tuesday between 8 and 20hs. Not sure why you expect it to run today which is a Friday. Also note the datetime object will be based on the Dataiku's server date time, which may be different than your local date time.
-
Thanks
i have tested by modifiying this conditions:if weekday_execution < 6: # lundi 0, mardi 1 value: 2 # 5 execution par jour 8,11,14,17,20 if execution_hour >= 8 and execution_hour <= 20: if delta_days > 3: t.fire()
That means that the trigger is executed all the week except sunday between 8 and 20 o'clock.
The trigger is not launchedThanks.
Regards
-
Turribeach Dataiku DSS Core Designer, Neuron, Dataiku DSS Adv Designer, Registered, Neuron 2023 Posts: 2,112 Neuron
Not really at it depends on the delta_days which depends on a project variable. You are logging of all these values with your logger.info() calls so I am surprised you haven't looked at the execution logs to see the values of all different variables of your code. My guess is that your update_date_str is empty hence update_date defaults to 1970-01-01 and delta_days is huge.
-
The output of my logger when i'am testing using notebook.
Unfortunatly, i'm not admin to see the log of the trigger.
2024-04-26 15:29:00.467 | INFO | __main__:<module>:9 - execution_date: 2024-04-26 00:00:00 2024-04-26 15:29:00.469 | INFO | __main__:<module>:11 - execution_hour: 15 2024-04-26 15:29:00.470 | INFO | __main__:<module>:13 - update_date: 2024-04-01 00:00:00 2024-04-26 15:29:00.472 | INFO | __main__:<module>:16 - delta_days: 25 2024-04-26 15:29:00.473 | INFO | __main__:<module>:20 - weekday_execution: 4
Regards