Implementation of the basic Thrift stack in Python
Summary: Framework, install script, base classes, TSocket, TBinaryProtocol
Notes: Code-gen is coming around the bend...
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664778 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/py/src/protocol/TProtocol.py b/lib/py/src/protocol/TProtocol.py
new file mode 100644
index 0000000..3105e25
--- /dev/null
+++ b/lib/py/src/protocol/TProtocol.py
@@ -0,0 +1,180 @@
+class TType:
+ STOP = 0
+ VOID = 1
+ BOOL = 2
+ BYTE = 3
+ I08 = 4
+ I16 = 6
+ I32 = 8
+ I64 = 10
+ STRING = 11
+ UTF7 = 11
+ STRUCT = 12
+ MAP = 13
+ SET = 14
+ LIST = 15
+ UTF8 = 16
+ UTF16 = 17
+
+class TMessageType:
+ CALL = 1
+ REPLY = 2
+
+class TProtocolBase:
+
+ """Base class for Thrift protocol driver."""
+
+ def writeMessageBegin(self, otrans, name, type, seqid):
+ pass
+
+ def writeMessageEnd(self, otrans):
+ pass
+
+ def writeStructBegin(self, otrans, name):
+ pass
+
+ def writeStructEnd(self, otrans):
+ pass
+
+ def writeFieldBegin(self, otrans, name, type, id):
+ pass
+
+ def writeFieldEnd(self, otrans):
+ pass
+
+ def writeFieldStop(self, otrans):
+ pass
+
+ def writeMapBegin(self, otrans, ktype, vtype, size):
+ pass
+
+ def writeMapEnd(self, otrans):
+ pass
+
+ def writeListBegin(self, otrans, etype, size):
+ pass
+
+ def writeListEnd(self, otrans):
+ pass
+
+ def writeSetBegin(self, otrans, etype, size):
+ pass
+
+ def writeSetEnd(self, otrans):
+ pass
+
+ def writeBool(self, otrans, bool):
+ pass
+
+ def writeByte(self, otrans, byte):
+ pass
+
+ def writeI16(self, otrans, i16):
+ pass
+
+ def writeI32(self, otrans, i32):
+ pass
+
+ def writeI64(self, otrans, i64):
+ pass
+
+ def writeString(self, otrans, str):
+ pass
+
+ def readMessageBegin(self, itrans):
+ pass
+
+ def readMessageEnd(self, itrans):
+ pass
+
+ def readStructBegin(self, itrans):
+ pass
+
+ def readStructEnd(self, itrans):
+ pass
+
+ def readFieldBegin(self, itrans):
+ pass
+
+ def readFieldEnd(self, itrans):
+ pass
+
+ def readMapBegin(self, itrans):
+ pass
+
+ def readMapEnd(self, itrans):
+ pass
+
+ def readListBegin(self, itrans):
+ pass
+
+ def readListEnd(self, itrans):
+ pass
+
+ def readSetBegin(self, itrans):
+ pass
+
+ def readSetEnd(self, itrans):
+ pass
+
+ def readBool(self, itrans):
+ pass
+
+ def readByte(self, itrans):
+ pass
+
+ def readI16(self, itrans):
+ pass
+
+ def readI32(self, itrans):
+ pass
+
+ def readI64(self, itrans):
+ pass
+
+ def readString(self, itrans):
+ pass
+
+ def skip(self, itrans, type):
+ if type == TType.STOP:
+ return
+ elif type == TType.BOOL:
+ self.readBool(itrans)
+ elif type == TType.BYTE:
+ self.readByte(itrans)
+ elif type == TType.I16:
+ self.readI16(itrans)
+ elif type == TType.I32:
+ self.readI32(itrans)
+ elif type == TType.I64:
+ self.readI64(itrans)
+ elif type == TType.STRING:
+ self.readString(itrans)
+ elif type == TType.STRUCT:
+ name = self.readStructBegin(itrans)
+ while True:
+ (name, type, id) = self.readFieldBegin(itrans)
+ if type == TType.STOP:
+ break
+ self.skip(itrans, type)
+ self.readFieldEnd(itrans)
+ self.readStructEnd(itrans)
+ elif type == TType.MAP:
+ (ktype, vtype, size) = self.readMapBegin(itrans)
+ for i in range(size):
+ self.skip(itrans, ktype)
+ self.skip(itrans, vtype)
+ self.readMapEnd(itrans)
+ elif type == TType.SET:
+ (etype, size) = self.readSetBegin(itrans)
+ for i in range(size):
+ self.skip(itrans, etype)
+ self.readSetEnd(itrans)
+ elif type == TType.LIST:
+ (etype, size) = self.readListBegin(itrans)
+ for i in range(size):
+ self.skip(itrans, etype)
+ self.readListEnd(itrans)
+
+
+