Source code for wolframclient.serializers.encoders.datetime

# -*- coding: utf-8 -*-

from __future__ import absolute_import, print_function, unicode_literals

import datetime

from wolframclient.utils.dispatch import Dispatch

encoder = Dispatch()


[docs]@encoder.dispatch(datetime.datetime) def encode_datetime(serializer, o): return serializer.serialize_function( serializer.serialize_symbol(b"DateObject"), ( serializer.serialize_iterable( ( serializer.serialize_int(o.year), serializer.serialize_int(o.month), serializer.serialize_int(o.day), serializer.serialize_int(o.hour), serializer.serialize_int(o.minute), serializer.serialize_float(o.second + o.microsecond / 1000000.0), ) ), serializer.serialize_string("Instant"), serializer.serialize_string("Gregorian"), serializer.serialize_tzinfo(o.tzinfo, o), ), )
[docs]@encoder.dispatch(datetime.tzinfo) def encode_tzinfo(serializer, o): return serializer.serialize_tzinfo(o)
[docs]@encoder.dispatch(datetime.timedelta) def encode_timedelta(serializer, o): return serializer.serialize_function( serializer.serialize_symbol(b"Quantity"), ( serializer.serialize_float(o.total_seconds()), serializer.serialize_string("Seconds"), ), )
[docs]@encoder.dispatch(datetime.date) def encode_date(serializer, o): return serializer.serialize_function( serializer.serialize_symbol(b"DateObject"), ( serializer.serialize_iterable( ( serializer.serialize_int(o.year), serializer.serialize_int(o.month), serializer.serialize_int(o.day), ) ), ), )
[docs]@encoder.dispatch(datetime.time) def encode_time(serializer, o): inner = [ serializer.serialize_iterable( ( serializer.serialize_int(o.hour), serializer.serialize_int(o.minute), serializer.serialize_float(o.second + o.microsecond / 1000000.0), ) ) ] if o.tzinfo: inner.append( serializer.serialize_rule( serializer.serialize_symbol(b"TimeZone"), serializer.serialize_tzinfo(o.tzinfo, o, name_match=None), ) ) return serializer.serialize_function(serializer.serialize_symbol(b"TimeObject"), inner)