diff --git a/lib/py/src/protocol/TBinaryProtocol.py b/lib/py/src/protocol/TBinaryProtocol.py
new file mode 100644
index 0000000..c089ac5
--- /dev/null
+++ b/lib/py/src/protocol/TBinaryProtocol.py
@@ -0,0 +1,159 @@
+from TProtocol import *
+from struct import pack, unpack
+
+class TBinaryProtocol(TProtocolBase):
+
+  """Binary implementation of the Thrift protocol driver."""
+
+  def writeMessageBegin(self, otrans, name, type, seqid):
+    self.writeString(otrans, name)
+    self.writeByte(otrans, type)
+    self.writeI32(otrans, seqid)
+
+  def writeMessageEnd(self, otrans):
+    pass
+
+  def writeStructBegin(self, otrans, name):
+    pass
+
+  def writeStructEnd(self, otrans):
+    pass
+
+  def writeFieldBegin(self, otrans, name, type, id):
+    self.writeByte(otrans, type)
+    self.writeI16(otrans, id)
+
+  def writeFieldEnd(self, otrans):
+    pass
+
+  def writeFieldStop(self, otrans):
+    self.writeByte(otrans, TType.STOP);
+
+  def writeMapBegin(self, otrans, ktype, vtype, size):
+    self.writeByte(otrans, ktype)
+    self.writeByte(otrans, vtype)
+    self.writeI32(otrans, size)
+
+  def writeMapEnd(self, otrans):
+    pass
+
+  def writeListBegin(self, otrans, etype, size):
+    self.writeByte(otrans, etype)
+    self.writeI32(otrans, size)
+
+  def writeListEnd(self, otrans):
+    pass
+
+  def writeSetBegin(self, otrans, etype, size):
+    self.writeByte(otrans, etype)
+    self.writeI32(otrans, size)
+
+  def writeSetEnd(self, otrans):
+    pass
+
+  def writeBool(self, otrans, bool):
+    if bool:
+      self.writeByte(otrans, 1)
+    else:
+      self.writeByte(otrans, 0)
+    
+  def writeByte(self, otrans, byte):
+    buff = pack("!b", byte)
+    otrans.write(buff)
+
+  def writeI16(self, otrans, i16):
+    buff = pack("!h", i16)
+    otrans.write(buff)
+
+  def writeI32(self, otrans, i32):
+    buff = pack("!i", i32)
+    otrans.write(buff)
+    
+  def writeI64(self, otrans, i64):
+    buff = pack("!l", i64)
+    otrans.write(buff)
+
+  def writeString(self, otrans, str):
+    self.writeI32(otrans, len(str))
+    otrans.write(str)
+
+  def readMessageBegin(self, itrans):
+    name = self.readString(itrans)
+    type = self.readByte(itrans)
+    seqid = self.readI32(itrans)
+    return (name, type, seqid)
+
+  def readMessageEnd(self, itrans):
+    pass
+
+  def readStructBegin(self, itrans):
+    pass
+
+  def readStructEnd(self, itrans):
+    pass
+
+  def readFieldBegin(self, itrans):
+    type = self.readByte(itrans)
+    if type == TType.STOP:
+      return (None, type, 0)
+    id = self.readI16(itrans)
+    return (None, type, id)
+
+  def readFieldEnd(self, itrans):
+    pass
+
+  def readMapBegin(self, itrans):
+    ktype = self.readByte(itrans)
+    vtype = self.readByte(itrans)
+    size = self.readI32(itrans)
+    return (ktype, vtype, size)
+
+  def readMapEnd(self, itrans):
+    pass
+
+  def readListBegin(self, itrans):
+    etype = self.readByte(itrans)
+    size = self.readI32(itrans)
+    return (etype, size)
+
+  def readListEnd(self, itrans):
+    pass
+
+  def readSetBegin(self, itrans):
+    etype = self.readByte(itrans)
+    size = self.readI32(itrans)
+    return (etype, size)
+
+  def readSetEnd(self, itrans):
+    pass
+
+  def readBool(self, itrans):
+    byte = self.readByte(itrans)
+    if byte == 0:
+      return False
+    return True
+
+  def readByte(self, itrans):
+    buff = itrans.readAll(1)
+    val, = unpack('!b', buff)
+    return val
+
+  def readI16(self, itrans):
+    buff = itrans.readAll(2)
+    val, = unpack('!h', buff)
+    return val
+
+  def readI32(self, itrans):
+    buff = itrans.readAll(4)
+    val, = unpack('!i', buff)
+    return val
+
+  def readI64(self, itrans):
+    buff = itrans.readAll(8)
+    val, = unpack('!l', buff)
+    return val
+
+  def readString(self, itrans):
+    len = self.readI32(itrans)
+    str = itrans.readAll(len)
+    return str
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)
+
+
+    
diff --git a/lib/py/src/protocol/__init__.py b/lib/py/src/protocol/__init__.py
new file mode 100644
index 0000000..e0c1c5e
--- /dev/null
+++ b/lib/py/src/protocol/__init__.py
@@ -0,0 +1 @@
+__all__ = ["TProtocol", "TBinaryProtocol"]
