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.
For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.