Source code for wolframclient.serializers.normalizer.datetime
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
import datetime
[docs]def update_dispatch(dispatch):
@dispatch.multi(datetime.datetime)
def normalizer(self, o):
return self.serialize_function(
self.serialize_symbol(b"DateObject"),
(self.serialize_iterable(
(self.serialize_int(o.year), self.serialize_int(o.month),
self.serialize_int(o.day), self.serialize_int(o.hour),
self.serialize_int(o.minute),
self.serialize_float(o.second + o.microsecond / 1000000.))),
self.serialize_string("Instant"),
self.serialize_string("Gregorian"),
self.serialize_tzinfo(o.tzinfo, o)))
@dispatch.multi(datetime.tzinfo)
def normalizer(self, o):
return self.serialize_tzinfo(o)
@dispatch.multi(datetime.timedelta)
def normalizer(self, o):
return self.serialize_function(
self.serialize_symbol(b"Quantity"), (
self.serialize_float(o.total_seconds()),
self.serialize_string("Seconds"),
))
@dispatch.multi(datetime.date)
def normalizer(self, o):
return self.serialize_function(
self.serialize_symbol(b"DateObject"), (self.serialize_iterable((
self.serialize_int(o.year),
self.serialize_int(o.month),
self.serialize_int(o.day),
)), ))
@dispatch.multi(datetime.time)
def normalizer(self, o):
inner = [
self.serialize_iterable(
(self.serialize_int(o.hour), self.serialize_int(o.minute),
self.serialize_float(o.second + o.microsecond / 1000000.)))
]
if o.tzinfo:
inner.append(
self.serialize_rule(
self.serialize_symbol(b"TimeZone"),
self.serialize_tzinfo(o.tzinfo, o, name_match=None)))
return self.serialize_function(
self.serialize_symbol(b"TimeObject"), inner)