Hey Greg,
  Assuming you are deleting the property definition from the Model,
then I think you can also use:

     your_entity._entity.pop('property_to_delete', None)

  It is shorter, and probably a little clearer.


Robert







On Tue, Apr 5, 2011 at 00:17, Greg <g.fawc...@gmail.com> wrote:
> I've stumbled across what looks like a neat way to remove obsolete
> properties from entities, without having to switch models to Expando
> and back again. I convert the entity to a protocol buffer, which
> reveals the obsolete properties. Then I remove them, convert back to
> an entity and save it.
>
> So far my testing has shown this doesn't have any ill effects, but I'd
> like feedback in case what I'm doing is dangerous. In particular, I
> don't understand what would happen to the indexes for the removed
> properties - how does the datastore handle these?
>
> Cheers
> Greg.
>
> # !!! EXPERIMENTAL CODE !!!
> # !!! USE ENTIRELY AT YOUR OWN RISK !!!
> # !!! NOT ENDORSED BY GOOGLE (YET) !!!
>
> from google.appengine.ext import db
>
> def remove_stale_properties(e):
>        current_properties=e.properties().keys()
>        epb=db.model_to_protobuf(e)
>        for i in reversed(range(len(epb.property_))):
>                if epb.property_[i].name() not in current_properties:
>                        logging.info('Deleting property %s:%s'%
> (epb.property_[i].name(),epb.property_[i].value()))
>                        del epb.property_[i]
>        for i in reversed(range(len(epb.raw_property_))):
>                if epb.raw_property_[i].name() not in current_properties:
>                        logging.info('Deleting raw property %s:%s'%
> (epb.raw_property_[i].name(),epb.raw_property_[i].value()))
>                        del epb.raw_property_[i]
>        return db.model_from_protobuf(epb)
>
> # Example usage
>
> entity_list=Foo.all().fetch(1000)
> for entity in entity_list:
>        entity=remove_stale_properties(entity)
> db.put(entity_list)
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Google App Engine" group.
> To post to this group, send email to google-appengine@googlegroups.com.
> To unsubscribe from this group, send email to 
> google-appengine+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/google-appengine?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to