Yes, exactly, I finally found the problem yesterday, gaeutlities session
behaves different on each object. So how about this solution: I have a base
handler class for all the handlers and what I added is to refresh the user
param from the datastore for every __init__ function. How that sounds?
class scRequestHandler(webapp.RequestHandler):
def __init__(self):
webapp.RequestHandler.__init__(self)
self.Session = scSession()
# reload the user object, this is because the refeernce property in
the Session
# object is somehow pickled and the put() operation does not update
the real entity.
# even though they have the same keys().
# The solution is to get the user from DS for every request.
if self.Session.user:
self.Session.user = db.get(self.Session.user.key())
On Mon, Mar 8, 2010 at 2:55 PM, Nick Johnson (Google) <
[email protected]> wrote:
> Hi Sumer,
>
> You're storing an entity in the session, and unless the gaeutilities
> session object handles this specially, this results in it pickling the
> 'user' entity and storing it in the session. Calling .put() on the user
> object will update the datastore with the new value, but won't change the
> pickled value the session object is storing. Next request, it will
> deserialize the same data it did previously, with no update.
>
> -Nick Johnson
>
>
> On Sat, Mar 6, 2010 at 2:22 PM, Sumer Cip <[email protected]> wrote:
>
>> Hi all,
>>
>> Below is the code code I am using in my tests to update a reference
>> tied to my session, the session object I use if from gaeutilities
>> (wrapped it a little). I put a reference object in the session and all
>> working fine.
>>
>> if not self.Session.user:
>> user = scMember.all().filter("name = ",
>> "testmember").get()
>> self.Session.user = user
>> else:
>> self.Session.user.playcount += 1
>> self.Session.user.put()
>>
>> The problem with this code is the put() is not working, if I do not
>> restart app engine SDK. In the error scenario, user is set into the
>> session object, and in the second request I can update the playcount
>> only once. BUt the subsequent operations fail without any notice of
>> error and playcount stays "1" everytime even I have incremented it.
>> This is the testhandler and there is no other code running paralelly.
>> When I restart the SDK, the problem goes away, it works fine.
>> So, I am not sure if I am doing something wrong, it took me 6 hours to
>> identify this thing.
>>
>> Any help will be appericiated.
>>
>> Thanks,
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Google App Engine" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<google-appengine%[email protected]>
>> .
>> 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 [email protected].
> To unsubscribe from this group, send email to
> [email protected]<google-appengine%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine?hl=en.
>
--
Sumer Cip
--
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine?hl=en.