Is it a bug of python protobuf v2.6.1?

1,219 views
Skip to first unread message

wpc062

unread,
Aug 5, 2015, 4:11:33 PM8/5/15
to Protocol Buffers
I am using dynamic reflection functionality of python protobuf v2.6.1, and have a function like below:
# initilization code

        des_db_
= descriptor_database.DescriptorDatabase()
        des_pool_
= descriptor_pool.DescriptorPool(des_db_)


        fdp
= descriptor_pb2.FileDescriptorProto.FromString(
            a_pb_module
.DESCRIPTOR.serialized_pb)
        des_db_
.Add(fdp)


def unpack_PB_msg(type_name, pb_msg_str)
        factory
= message_factory.MessageFactory(des_pool_)
        msg_class
= factory.GetPrototype(des_pool_.FindMessageTypeByName(type_name))

        pb_msg
= msg_class()
        pb_msg
.ParseFromString(pb_msg_str)

       
return pb_msg


But following client code will fail

    hello = Hello_msg()
    hello_str
= hello.SerializeToString()
    hello2
= unpack_PB_msg(Hello_msg.DESCRIPTOR.full_name, hello_str)

    hello3
= Hello_msg()
    hello3
.CopyFrom(hello2)# failed here!!!


The error message is:
hello3.CopyFrom(hello2)
  File "C:\Localdata\Python27\lib\site-packages\google\protobuf\message.py", line 119, in CopyFrom
    self.MergeFrom(other_msg)
  File "C:\Localdata\Python27\lib\site-packages\google\protobuf\internal\python_message.py", line 971, in MergeFrom
    "expected %s got %s." % (cls.__name__, type(msg).__name__))
TypeError: Parameter to MergeFrom() must be instance of same class: expected Hello_msg got Hello_msg.



It seems CopyFrom fails because isinstance fails.
  def MergeFrom(self, msg):
   
if not isinstance(msg, cls):
     
raise TypeError(
         
"Parameter to MergeFrom() must be instance of same class: "
         
"expected %s got %s." % (cls.__name__, type(msg).__name__))


Is this a protobuf bug?

Thanks,

Lokman Dz

unread,
Sep 24, 2018, 8:14:34 PM9/24/18
to Protocol Buffers
Did you manage to solve the problem? I am running into similar situation.

Thanks
Reply all
Reply to author
Forward
0 new messages