"""Utility functions and classes for track backends"""fromdatetimeimportdatetime,dateimportjsonfrompytzimportUTCclassDateTimeJSONEncoder(json.JSONEncoder):"""JSON encoder aware of datetime.datetime and datetime.date objects"""defdefault(self,obj):# pylint: disable=method-hidden""" Serialize datetime and date objects of iso format. datatime objects are converted to UTC. """ifisinstance(obj,datetime):ifobj.tzinfoisNone:# Localize to UTC naive datetime objectsobj=UTC.localize(obj)else:# Convert to UTC datetime objects from other timezonesobj=obj.astimezone(UTC)returnobj.isoformat()elifisinstance(obj,date):returnobj.isoformat()returnsuper(DateTimeJSONEncoder,self).default(obj)