Survey banner
Switching to Dataiku - a new area to help users who are transitioning from other tools and diving into Dataiku! CHECK IT OUT

Dataiku 12.4 API breaking change

Solved!
Turribeach
Dataiku 12.4 API breaking change

For anyone out there moving to Dataiku 12.4 be aware that there is a breaking change in Dataiku 12.4 API. Dataiku has decided to add add timezone to their date/time objects returned by the API so if you do any sort of date/time calculations with the API date/time fields you might get an error. 

The following sample code:

import dataikuapi
import datetime

# Create a Dataiku client
dataiku_url = 'url'
dataiku_api_key = 'key'

dataiku_client = dataikuapi.DSSClient(dataiku_url, dataiku_api_key)
dataiku_client._session.verify = False

project = dataiku_client.get_project('project')
scenario = project.get_scenario('scenario')
 
last_run = scenario.get_last_finished_run()
run_since_delta = datetime.datetime.now() - last_run.end_time

Fails with this error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[6], line 1
----> 1 run_since_delta = datetime.datetime.now() - last_run.end_time

TypeError: can't subtract offset-naive and offset-aware datetimes

 

 

1 Solution
Turribeach
Author

Forgot to post posible solutions. If you are outside Dataiku one option is to downgrade the Dataiku API package:

pip install dataiku-api-client==12.3.2

Another option is to strip out the time zone component from the date/time object:

run_since_delta = datetime.datetime.now() - last_run.end_time.replace(tzinfo=None)

And the cleanest solution is to modify your code to also use time zone:

import pytz
run_since_delta = datetime.datetime.now().replace(tzinfo=pytz.UTC) - last_run.end_time

But this will probably require further changes in your code. 

View solution in original post

1 Reply
Turribeach
Author

Forgot to post posible solutions. If you are outside Dataiku one option is to downgrade the Dataiku API package:

pip install dataiku-api-client==12.3.2

Another option is to strip out the time zone component from the date/time object:

run_since_delta = datetime.datetime.now() - last_run.end_time.replace(tzinfo=None)

And the cleanest solution is to modify your code to also use time zone:

import pytz
run_since_delta = datetime.datetime.now().replace(tzinfo=pytz.UTC) - last_run.end_time

But this will probably require further changes in your code. 

Labels

?
Labels (2)
A banner prompting to get Dataiku