from time import strptime
import datetime
import cattr
from dateutil.tz import tzutc
from attr import attrs, attr
TIME_FORMAT = '%Y-%m-%dT%H:%M:%S.%fZ'
@attrs
class MyRecord:
a_string: str = attr()
a_datetime: datetime.datetime = attr()
converter = cattr.Converter()
converter.register_unstructure_hook(datetime.datetime, lambda dt: dt.strftime(TIME_FORMAT))
converter.register_structure_hook(datetime.datetime, lambda string, _: datetime.datetime.strptime(string, TIME_FORMAT))
my_record = MyRecord('test', datetime.datetime(2019, 5, 25, 14, 49, 12, 950604, tzinfo=tzutc()))
r = converter.unstructure(my_record)
print(r)
s = converter.structure(r, MyRecord)
print(s)