AttributeError: Assignment not allowed to composite field "task" in protocol message object
Question:
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 "buildbdist.win32egggoogleprotobufinternalpython_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
Answers:
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
I’m new to protocol-buffers too and faced with the same problem. I’ve found this method helpful.
I think it should work:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task.MergeFrom(task)
Try CopyFrom:
ptask.task.CopyFrom(task)
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 "buildbdist.win32egggoogleprotobufinternalpython_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
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
I’m new to protocol-buffers too and faced with the same problem. I’ve found this method helpful.
I think it should work:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task.MergeFrom(task)
Try CopyFrom:
ptask.task.CopyFrom(task)