Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AttributeError: Assignment not allowed to composite field "task" in protocol message object

I'm using protocol-buffers python lib to send data,but it's have some problems, so

Traceback (most recent call last):   File "test_message.py", line 17, in <module>     ptask.task = task   File "build\bdist.win32\egg\google\protobuf\internal\python_message.py", line 513, in setter AttributeError: Assignment not allowed to composite field "_task" in protocol message object. 

the src as follows:

proto file:

message task {     required int32 id = 1;     required string msg = 2; }  message task_info {     required task task = 1; } 

python code:

task = yacc.task() task.id = 1000 task.msg = u"test" ptask = yacc.task_info()  ptask.task = task # this line happen the runtime error  
like image 635
gezhonglunta Avatar asked Aug 22 '13 09:08

gezhonglunta


2 Answers

Try CopyFrom:

ptask.task.CopyFrom(task) 
like image 88
John McFarlane Avatar answered Sep 18 '22 00:09

John McFarlane


I don't know protocol-buffers but I took a look at the docs and it says:

You cannot assign a value to an embedded message field. Instead, assigning a value to any field within the child message implies setting the message field in the parent.

So I'm assuming this should work:

task = yacc.task() task.id = 1000 task.msg = u"test" ptask = yacc.task_info()  ptask.task.id = task.id ptask.task.msg = task.msg 
like image 23
Martin Maillard Avatar answered Sep 21 '22 00:09

Martin Maillard