如何从Protobuf中删除属性?

时间:2013-03-13 18:55:11

标签: python google-app-engine protocol-buffers

我想从实例化的entity_pb.EntityProto中删除一个属性,以这种方式实例化:

pb = entity_pb.EntityProto()
prop1 = pb.add_property()
prop1.set_name('prop1')
prop2 = pb.add_property()
prop2.set_name('prop2')

假设我不再需要prop1了。我该如何删除它?

这个问题涉及想要将protobufs注入AppEngine数据存储区,但是不能放置具有__scatter__属性的现有protobufs。如果我尝试放置实体,则会返回此错误:BadRequestError: cannot store entity with reserved property name '__scatter__'

2 个答案:

答案 0 :(得分:1)

您可以操纵pb.property_list()的结果,这样就可以了:

 properties = pb.property_list()
 properties[:] = [e for e in properties if e.name() != '__scatter__']

答案 1 :(得分:0)

查看protobuf documentation,操作单个EntityProtos没有任何内容。 entity_pb.py中的代码也没有显示任何相关的方法,所以我选择“让我们直接操纵对象,即使你不是真的应该接近”。

props = element.property_
for i in range(len(props)):
    if props[i].name() == '__scatter__':
        props.pop(i)
        break