Ok, cheers Nick.
2010/1/20 Nick Johnson (Google) <nick.john...@google.com> > Hi Nickolas, > > On Tue, Jan 19, 2010 at 1:09 AM, Nickolas Daskalou <n...@daskalou.com>wrote: > >> I've managed to get this going, with the help of the comments in this >> thread and Nick Johnson's blog post ( >> http://blog.notdot.net/2009/11/API-call-hooks-for-fun-and-profit). >> >> My hook code now looks like this: >> >> >> def hook(service, call, request, response): >> assert service == 'datastore_v3' >> if call == 'Put': >> for i in range(request.entity_size()): >> entity_pb = request.mutable_entity(i) >> entity = db.model_from_protobuf(entity_pb) >> try: >> entity.pre_put() >> entity_pb.CopyFrom(db.model_to_protobuf(entity)) >> except: >> pass >> >> This seems highly inefficient though, because before an entity is put into >> the Datastore, it's converted from a Model instance to an EntityProto >> instance, then back to a Model instance and finally back to an EntityProto >> instance (Model->EntityProto->Model->EntityProto). >> >> Google guys, is there a more efficient way to do this? >> > > Monkeypatching the db module to call pre_put in the appropriate place would > be a better way to do this, though it's subject to breakage as the API > changes. > > -Nick Johnson > > >> >> 2010/1/18 Nickolas Daskalou <n...@daskalou.com> >> >> Will do, thanks Andy. >>> >>> >>> 2010/1/18 Andy Freeman <ana...@earthlink.net> >>> >>>> I asked that question wrt db.class_for_kind and was told that it was >>>> safe to assume that it would always be there. >>>> >>>> I'd guess that model_from_protobuf should be safe as well. >>>> >>>> File a bug requesting that it be added to the documented function >>>> list. >>>> >>>> On Jan 17, 6:26 pm, Nickolas Daskalou <n...@daskalou.com> wrote: >>>> > Since these are not documented online anywhere, is it possible these >>>> > functions may change in the future (and hence break my code)? >>>> > >>>> > 2010/1/18 Andy Freeman <ana...@earthlink.net> >>>> > >>>> > >>>> > >>>> > > Search in google/appengine/ext/db/__init__.py for protobuf >>>> functions. >>>> > >>>> > > On Jan 16, 9:21 pm, Nickolas Daskalou <n...@daskalou.com> wrote: >>>> > > > Does anyone have an answer for this? Google guys? >>>> > >>>> > > > 2010/1/15 Kapil Kaisare <kksm19820...@gmail.com> >>>> > >>>> > > > > As an aside: what is an EntityProto, and is there a link in the >>>> GAE >>>> > > > > documentation for it? >>>> > >>>> > > > > Regards, >>>> > > > > Kaisare, Kapil Sadashiv >>>> > >>>> > > > > On Fri, Jan 15, 2010 at 09:37, Nickolas Daskalou < >>>> n...@daskalou.com >>>> > > >wrote: >>>> > >>>> > > > >> How can I convert an EntityProto to a Model instance? >>>> > >>>> > > > >> I have a Model method, pre_put(), that I want to call on each >>>> Model >>>> > > > >> instance before it's Put into the Datastore, using hooks (eg: >>>> > > > >>http://code.google.com/appengine/articles/hooks.html). >>>> > >>>> > > > >> My hook code looks like this: >>>> > >>>> > > > >> def hook(service, call, request, response): >>>> > > > >> assert service == 'datastore_v3' >>>> > > > >> if call == 'Put': >>>> > > > >> for entity in request.entity_list(): >>>> > > > >> entity.pre_put() >>>> > >>>> > > > >> When the hook is called and runs, I get this error: >>>> > >>>> > > > >> AttributeError: EntityProto instance has no attribute 'pre_put' >>>> > >>>> > > > >> Is there any way to convert the entities in >>>> request.entity_list() to >>>> > > their >>>> > > > >> original Models, manipulate them, and then convert them back to >>>> an >>>> > > > >> EntityProto instance? Or even better, if the EntityProto >>>> instances >>>> > > have >>>> > > > >> references to the actual Model instances which we can access >>>> and >>>> > > manipulate? >>>> > >>>> > > > >> -- >>>> > > > >> 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-appeng...@googlegroups.com. >>>> > > > >> To unsubscribe from this group, send email to >>>> > > > >> google-appengine+unsubscr...@googlegroups.com<google-appengine%2bunsubscr...@googlegroups.com> >>>> <google-appengine%2bunsubscrib...@googlegroups.com> >>>> > > <google-appengine%2bunsubscrib...@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<google-appengine%2bunsubscr...@googlegroups.com> >>>> <google-appengine%2bunsubscrib...@googlegroups.com> >>>> > > <google-appengine%2bunsubscrib...@googlegroups.com> >>>> > > > > . >>>> > > > > For more options, visit this group at >>>> > > > >http://groups.google.com/group/google-appengine?hl=en.-Hidequoted >>>> > > text - >>>> > >>>> > > > - Show quoted text - >>>> > >>>> > > -- >>>> > > 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-appeng...@googlegroups.com. >>>> > > To unsubscribe from this group, send email to >>>> > > google-appengine+unsubscr...@googlegroups.com<google-appengine%2bunsubscr...@googlegroups.com> >>>> <google-appengine%2bunsubscrib...@googlegroups.com> >>>> > > . >>>> > > For more options, visit this group at >>>> > >http://groups.google.com/group/google-appengine?hl=en.- Hide quoted >>>> text - >>>> > >>>> > - Show quoted text - >>>> >>>> -- >>>> 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-appeng...@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> google-appengine+unsubscr...@googlegroups.com<google-appengine%2bunsubscr...@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-appeng...@googlegroups.com. >> To unsubscribe from this group, send email to >> google-appengine+unsubscr...@googlegroups.com<google-appengine%2bunsubscr...@googlegroups.com> >> . >> For more options, visit this group at >> http://groups.google.com/group/google-appengine?hl=en. >> > > > > -- > Nick Johnson, Developer Programs Engineer, App Engine > Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: > 368047 > > -- > 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-appeng...@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine+unsubscr...@googlegroups.com<google-appengine%2bunsubscr...@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-appeng...@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.