Former-commit-id:06a8b51d6d
[formerly9f19e3f712
[formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f]] Former-commit-id:9f19e3f712
Former-commit-id:a02aeb236c
194 lines
3.3 KiB
Python
194 lines
3.3 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
# Copyright (c) 2006- Facebook
|
|
# Distributed under the Thrift Software License
|
|
#
|
|
# See accompanying file LICENSE or visit the Thrift site at:
|
|
# http://developers.facebook.com/thrift/
|
|
|
|
from thrift.Thrift import *
|
|
|
|
class TProtocolException(TException):
|
|
|
|
"""Custom Protocol Exception class"""
|
|
|
|
UNKNOWN = 0
|
|
INVALID_DATA = 1
|
|
NEGATIVE_SIZE = 2
|
|
SIZE_LIMIT = 3
|
|
BAD_VERSION = 4
|
|
|
|
def __init__(self, type=UNKNOWN, message=None):
|
|
TException.__init__(self, message)
|
|
self.type = type
|
|
|
|
class TProtocolBase:
|
|
|
|
"""Base class for Thrift protocol driver."""
|
|
|
|
def __init__(self, trans):
|
|
self.trans = trans
|
|
|
|
def writeMessageBegin(self, name, type, seqid):
|
|
pass
|
|
|
|
def writeMessageEnd(self):
|
|
pass
|
|
|
|
def writeStructBegin(self, name):
|
|
pass
|
|
|
|
def writeStructEnd(self):
|
|
pass
|
|
|
|
def writeFieldBegin(self, name, type, id):
|
|
pass
|
|
|
|
def writeFieldEnd(self):
|
|
pass
|
|
|
|
def writeFieldStop(self):
|
|
pass
|
|
|
|
def writeMapBegin(self, ktype, vtype, size):
|
|
pass
|
|
|
|
def writeMapEnd(self):
|
|
pass
|
|
|
|
def writeListBegin(self, etype, size):
|
|
pass
|
|
|
|
def writeListEnd(self):
|
|
pass
|
|
|
|
def writeSetBegin(self, etype, size):
|
|
pass
|
|
|
|
def writeSetEnd(self):
|
|
pass
|
|
|
|
def writeBool(self, bool):
|
|
pass
|
|
|
|
def writeByte(self, byte):
|
|
pass
|
|
|
|
def writeI16(self, i16):
|
|
pass
|
|
|
|
def writeI32(self, i32):
|
|
pass
|
|
|
|
def writeI64(self, i64):
|
|
pass
|
|
|
|
def writeDouble(self, dub):
|
|
pass
|
|
|
|
def writeString(self, str):
|
|
pass
|
|
|
|
def readMessageBegin(self):
|
|
pass
|
|
|
|
def readMessageEnd(self):
|
|
pass
|
|
|
|
def readStructBegin(self):
|
|
pass
|
|
|
|
def readStructEnd(self):
|
|
pass
|
|
|
|
def readFieldBegin(self):
|
|
pass
|
|
|
|
def readFieldEnd(self):
|
|
pass
|
|
|
|
def readMapBegin(self):
|
|
pass
|
|
|
|
def readMapEnd(self):
|
|
pass
|
|
|
|
def readListBegin(self):
|
|
pass
|
|
|
|
def readListEnd(self):
|
|
pass
|
|
|
|
def readSetBegin(self):
|
|
pass
|
|
|
|
def readSetEnd(self):
|
|
pass
|
|
|
|
def readBool(self):
|
|
pass
|
|
|
|
def readByte(self):
|
|
pass
|
|
|
|
def readI16(self):
|
|
pass
|
|
|
|
def readI32(self):
|
|
pass
|
|
|
|
def readI64(self):
|
|
pass
|
|
|
|
def readDouble(self):
|
|
pass
|
|
|
|
def readString(self):
|
|
pass
|
|
|
|
def skip(self, type):
|
|
if type == TType.STOP:
|
|
return
|
|
elif type == TType.BOOL:
|
|
self.readBool()
|
|
elif type == TType.BYTE:
|
|
self.readByte()
|
|
elif type == TType.I16:
|
|
self.readI16()
|
|
elif type == TType.I32:
|
|
self.readI32()
|
|
elif type == TType.I64:
|
|
self.readI64()
|
|
elif type == TType.DOUBLE:
|
|
self.readDouble()
|
|
elif type == TType.STRING:
|
|
self.readString()
|
|
elif type == TType.STRUCT:
|
|
name = self.readStructBegin()
|
|
while True:
|
|
(name, type, id) = self.readFieldBegin()
|
|
if type == TType.STOP:
|
|
break
|
|
self.skip(type)
|
|
self.readFieldEnd()
|
|
self.readStructEnd()
|
|
elif type == TType.MAP:
|
|
(ktype, vtype, size) = self.readMapBegin()
|
|
for i in range(size):
|
|
self.skip(ktype)
|
|
self.skip(vtype)
|
|
self.readMapEnd()
|
|
elif type == TType.SET:
|
|
(etype, size) = self.readSetBegin()
|
|
for i in range(size):
|
|
self.skip(etype)
|
|
self.readSetEnd()
|
|
elif type == TType.LIST:
|
|
(etype, size) = self.readListBegin()
|
|
for i in range(size):
|
|
self.skip(etype)
|
|
self.readListEnd()
|
|
|
|
class TProtocolFactory:
|
|
def getProtocol(self, trans):
|
|
pass
|