コード例 #1
0
ファイル: json.py プロジェクト: olivopaolo/boing
def _productHook(dct):
    if "__bytes__" in dct:
        rvalue = base64.b64decode(dct["__bytes__"].encode())
    elif "__ntp__" in dct:
        pack = base64.b64decode(dct["__ntp__"].encode())
        ntptime = struct.unpack("d", pack)[0]
        rvalue = ntp.ntp2datetime(ntptime)
    else:
        rvalue = dct
    return rvalue
コード例 #2
0
ファイル: osc.py プロジェクト: olivopaolo/boing
def _arg_decode(data, typetag):
    if typetag == "T":
        arg = None
    elif typetag == "F":
        arg = None
    elif typetag == "N":
        arg = None
    elif typetag == "I":
        arg = None
    elif typetag == "i":
        if len(data) < 4:
            raise ValueError("Wrong data size for an int")
        arg, data = struct.unpack("!i", data[:4])[0], data[4:]
    elif typetag == "f":
        if len(data) < 4:
            raise ValueError("Wrong data size for a float")
        arg, data = struct.unpack("!f", data[:4])[0], data[4:]
    elif typetag == "s":
        eos = data.find(b"\0")
        if eos == -1:
            raise ValueError("Not a string")
        size = _pad(eos + 1)
        arg, data = data[:eos].decode(), data[size:]
    elif typetag == "b":
        realsize = struct.unpack("!i", data[0:4])[0]
        size = _pad(realsize)
        if len(data) < size:
            raise ValueError("Wrong data size for a %d bytes blob" % realsize)
        arg, data = data[4 : 4 + realsize], data[size:]
    elif typetag == "t":
        if len(data) < 8:
            raise ValueError("Wrong data size for a time tag")
        argdata, data = data[:8], data[8:]
        if struct.unpack("!q", argdata)[0] == IMMEDIATELY:
            arg = None
        else:
            arg = ntp.ntp2datetime(ntp.ntpDecode(argdata))
    else:
        raise TypeError("Unsupported type tag (%s)" % typetag)
    return (arg, data)