====Helpful Functions====
Below are a couple of //utility functions// that might be useful when developing drivers.
===Timezone Conversion===
Assuming you have a 'pytz' object called **tz** in your class that contains the timezone that is considered 'local' for your data source, you can use the following functions...
def utcToLocal(self,dt):
if isinstance(dt,str):
if '.' in dt:
dt = datetime.strptime("%Y-%m-%d %H:%M:%S.%f",pytz.utc)
else:
dt = datetime.strptime("%Y-%m-%d %H:%M:%S",pytz.utc)
if dt.tzinfo is None:
dt = dt.replace(tzinfo = pytz.utc)
if self.timezone == "utc":
return dt
lt = dt.astimezone(self.tz)
return lt
def localToUTC(self,dt):
if isinstance(dt,str):
if '.' in dt:
dt = datetime.strptime("%Y-%m-%d %H:%M:%S.%f")
else:
dt = datetime.strptime("%Y-%m-%d %H:%M:%S")
if dt.tzinfo is None:
dt = self.tz.localize(dt)
if self.timezone == "utc":
return dt
lt = dt.astimezone(pytz.utc)
return lt
These two functions take the passed datetime (converting it from a string if required) and converts it between either UTC and the data-sources local time, or the data-sources local time and UTC.
===Event Cleanup===
Most Python objects can't be converted directly into JSON - this code converts each of the values in your dictionary to **strings** to make sure they can be sent to the ARDI server.
Note that it also does the job of converting Python **datetime** objects to both local and UTC versions (assuming your class has a 'tz' variable and is using the datetime functions detailed above).
#Convert to strings whevever possible
keys = list(dct.keys())
for d in keys:
#Convert dates
if isinstance(dct[d],datetime.datetime):
#Make local and UTC versions of dates. All raw dates should be UTC.
if self.timezone != "utc":
dct[d + "_local"] = dct[d].strftime("%Y-%m-%d %H:%M:%S")
dct[d + "_utc"] = self.localToUTC(dct[d]).strftime("%Y-%m-%d %H:%M:%S")
dct[d] = dct[d + "_utc"]
else:
dct[d] = dct[d].strftime("%Y-%m-%d %H:%M:%S")
else:
dct[d] = str(dct[d])