I am using Python to write a tool to control our backends which communicate 
using protocol buffers.

We would like our tool to be independent on current version of backends and 
therefore independent on .proto files that were used to build the 
particular version of the backend.

Therefore the tool receives serialized FileDescriptorSet over network, 
which should allow to create messages from the same descriptors, that are 
used at the backend side.

This is possible to implement in C++ (and we actually use it in another 
component) using DynamicMessage. (Create DescriptorPool, load all the 
to the pool using BuildFile(), and then retrieve Descriptor from the pool. 
Then it is possible to create message using DynamicMessageFactory)

However, after thorough research on the web and of the source code of 
protocol buffers python bindings, I couldn't figure out how to do this 
(version 2.4.0). 

I was able to deserialize FileDescriptorSet, iterate over FileDescriptorProtos 
and get DescriptorProto object. However I didn't find a way to construct 
objects, which are needed to create classes for message types(with 
as a metaclass).

I tried another way, when I found some access to C++ library API in 
google.protobuf.internal (which is probably not a good idea to use). I 
tried to indirectly use the C++ descriptor pool by cpp_message.BuildFile(), 
but there is no way to get the Descriptor object back from the pool (it 
would be C++ object anyway). However there is a method 
cpp_message.NewCMessage, which can construct a message using descriptors 
from the pool. I was able to construct messages that way, but I was unable 
to set any fields. Only method that appeared usable was SetScalar, which 
requires C++ decriptor, which I was unable to get. Not to mention all of 
the Python magic is gone when dealing directly with the C++ API.

Is there any way to create messages of arbitrary type, which is distributed 
over network, in Python ? I see those possibilities in both Java and C++, 
is Python library lacking such funcionality ?

Thank you very much, hope I was clear enough.
Best regards,¨

Jan Koritak

You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To view this discussion on the web visit 
To post to this group, send email to protobuf@googlegroups.com.
To unsubscribe from this group, send email to 
For more options, visit this group at 

Reply via email to