Example #1
0
 def default(self, obj):
     serializable = None
     if isinstance(obj, bytearray) or isinstance(obj, bytes):
         serializable = {"__bytes__": base64.b64encode(obj).decode()}
     elif isinstance(obj, datetime.datetime):
         pack = struct.pack("d", ntp.datetime2ntp(obj))
         serializable = {"__ntp__": base64.b64encode(pack).decode()}
     else:
         try:
             serializable = _json.JSONEncoder.default(self, obj)
         except TypeError as e:
             logger = logging.getLogger("boing.net.json._ProductEncoder")
             logger.warning(str(e))
     return serializable
Example #2
0
def _arg_encode(arg, typetag):
    if typetag == "i":
        return struct.pack("!i", int(arg))
    elif typetag == "f":
        return struct.pack("!f", float(arg))
    elif typetag == "s":
        if not isinstance(arg, bytes):
            arg = str(arg).encode()
        size = _pad(len(arg) + 1)
        return struct.pack("!%ds" % size, arg)
    elif typetag == "b":
        if not isinstance(arg, bytes):
            arg = str(arg).encode()
        realsize = len(arg)
        size = _pad(realsize)
        return struct.pack("!i%ds" % size, realsize, arg)
    elif typetag == "t":
        if arg is None:
            return struct.pack("!q", IMMEDIATELY)
        if type(arg) is datetime.datetime:
            return ntp.ntpEncode(ntp.datetime2ntp(arg))
        raise ValueError("Time tag should be a datetime.datetime object or None for IMMEDIATELY")
    else:
        raise TypeError("Unsupported type tag (%s)" % typetag)