2013-03-13 106 views
0

我想從一個實例entity_pb.EntityProto,以這種方式實例中刪除屬性如何從Protobuf中刪除屬性?

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__'

回答

1

你可以操縱的pb.property_list()的結果,所以這會工作:

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

+1的列表理解。 – 2013-03-13 21:24:13

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