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.

Reply via email to