Assuming you're using the definitions in "tutorial.thrift":
Generate the Code
Make sure the thrift compiler is installed somewhere in your PATH. Then generate new style classes (inherit from object, better introspection) for the tutorial:
thrift -gen py:new_style tutorial.thrift thrift -gen py:new_style shared.thrift
To generate old style classes:
thrift -gen py tutorial.thrift thrift -gen py shared.thrift
This makes a gen-py/
subdirectory for the generated code.
Import the Classes
First make sure you have added the gen-py/ subdirectory to your sys.path
with:
import sys sys.path.append('gen-py')
Then import the classes:
import tutorial.Calculator from tutorial.ttypes import * from thrift.protocol import TBinaryProtocol from thrift.transport import TTransport
Create Objects, Using Constants
Make a Work thrift object, and set its 'op' field to the ENUM Operation.ADD
defined in tutorial.thrift
and set two numeric fields to some values.
work = Work() work.num1 = 7 work.num2 = 9 work.op = Operation.ADD
Serialize to/from a string
Create a TMemoryBuffer
object to contain the serialized bytes, a TBinaryProtocol
object to perform the serialization, and use the thrift Work
object's write
method to produce the serialized bytes.
Then, take the serialized bytes and pass them into a new TMemoryBuffer
, pass that into another TBinaryProtocol
, create a new/empty thrift Work
object, and use it's read
method to deserialize the bytes, setting all the fields.
transportOut = TTransport.TMemoryBuffer() protocolOut = TBinaryProtocol.TBinaryProtocol(transportOut) work.write(protocolOut) bytes = transportOut.getvalue() # the string 'bytes' can be written out to disk # to be read in at a different time transportIn = TTransport.TMemoryBuffer(bytes) protocolIn = TBinaryProtocol.TBinaryProtocol(transportIn) moreWork = Work() moreWork.read(protocolIn)