[Zope] Re: [Zope-dev] Re: sessions in the presence of conflicts

David H bluepaul at earthlink.net
Tue Dec 20 00:59:14 EST 2005


Dennis Allison wrote:

>The interaction between sessions, conflicts, and persistence is a bit
>confusing.  I am still trying to understand the code in depth.  
>
>One thing is for sure, request.SESSION and/or request['SESSION'] must be
>persistent for things to work.  Mutable objects in the session variable
>set (dictionaries and lists) have to be handled specially to get the
>persistence machinery to recognize they have been changed.
>
>In this case, I am trying to ensure that the session variables get 
>identified as persistent.  My question is whether using update (an 
>implicit assignment) triggers the persistence mechanism.  It is the 
>moral equivalent of writing 
>
>	request['SESSION']['alpha'] = 'a'B
>	request['SESSION']['beta'] = 'b'
>
>but I am unsure whether the persistence mechanism will recognize it as 
>such.  
>
>Doing session variable initialization in a Script(Python) object has a
>downside because one cannot set a _p_changed attribute and so must rely on
>the assignment paradigm.  Perhaps the interface should be in a Product or
>External Method which is less constrained.
>
>Anyhow, David, thanks for the assist.
>
>
>On Mon, 19 Dec 2005, David H wrote:
>
>  
>
>>Dennis Allison wrote:
>>
>>    
>>
>>>Chris McDonough identified a persistence problem with the routine(s) that 
>>>manage sessions variables.  (Thanks Chris)  I have put the correction in 
>>>place which resolved some (but not all) of the problems.
>>>
>>>There are still problems which are apparently due conflicts in accessing
>>>the session variables.  To minimize frequency of conflicts, I am rewriting
>>>several routines using Dieter's rules of the thumb (Thanks Dieter).
>>>
>>>One routine being modified is a Script(Python) that initializes a number
>>>of session variables.  I am collecting the session values in a dictionary
>>>and then use update to set their value, for example:
>>>
>>>	s = {}
>>>	s['alpha'] = 'a'
>>>	s['beta'] = 'b'
>>>	request['SESSION'].update(s)
>>>
>>>Is the persistence machinery smart enough to detect this as a change?  I
>>>suspect that it has to be flagged since the assignment won't be seen.  
>>>Usually this means setting the _p_changed=1 attribute, but it is not clear
>>>to me where to set it in this particular context.  
>>>
>>>      
>>>
>
>  
>
>>Dennis,
>>
>>Did you means request['SESSION']['someDictionary'].update(s)?
>>Anyway your idea seems correct - The SESSIONS chapter (at least on 
>>plope.com) addresses SESSION "staleness" and mutable objects.
>>
>>1) someDict = SESSION['someDict']
>>2) someDict['someKey'] = "newValue"
>>
>>But (2) does not guarentee that a subsequent lookups like:
>>SESSION['someDict'] will return "newValue".
>>
>>But this WILL:
>>3) SESSION['someDict'] = someDict.
>>
>>Which looks like your example.  How this connect to your primary issue:  
>>*conflicts* is not clear to me.  :-\
>>
>>David
>>
>>
>>    
>>
>
>  
>
Dennis,
Lets just put the question out there:  Does:

SESSION['someKey'] = someValue

Force a commited transaction?

As opposed to ...
someDict = Session['SomeKey']
someDict['aKey'] = 'aNewValue'

David


David


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zope/attachments/20051219/d079261f/attachment.htm


More information about the Zope mailing list