Hi:
 
 Thanks to Michael Dunstan. I test with the recomendation of Michael but I still get the error. In pages where I get the error, if I wait some seconds and refresh the pages, I obtain the correct information (no get the error).
 
I thinks that the problem maybe are similar to the guess of Michael, but I test "breaking up ``init2`` into two scripts" and the error don't disappear. :(
 
Any help will be useful.
 
Thanks in advance,
 
Leticia Larrosa

-----Original Message-----
From: Michael Dunstan <[EMAIL PROTECTED]>
To: Leticia Larrosa <[EMAIL PROTECTED]>
Cc: zope@zope.org
Date: Tue, 21 Jun 2005 10:19:53 +1200
Subject: Re: [Zope] accessing session data error

> Hi Leticia,
>
> The mixture of ``response.write()`` including _javascript_ to drive the  
> browser to a new location along with writing objects in ZODB all  
> within the same transaction can break some of the promises that you'd  
> normally expect Zope and a browser to keep.
>
> My guess is that browser is being told to visit ``end`` before the  
> transaction started by ``init2`` has finished. Perhaps a conflict  
> error is causing that transaction to take longer than you expect.  
> Normally this would not trip you up as your browser does not see  
> anything until after the transaction has finished. (In this normal  
> mode you might see a conflict error rendered in the browser if the  
> publication machinery had to give up.)
>
> For your example try breaking up ``init2`` into two scripts. The  
> first that writes the session data and then redirects the browser to  
> the second. The second then does not touch session data and manages  
> all the ``response.write()``s. And remove the unused ``sessionData =  
> context.REQUEST.SESSION`` from ``external``.
>
> Cheers
> Michael
>
> On 21/06/2005, at 6:20 AM, Leticia Larrosa wrote:
>
> > Hi all:
> >
> > I think that I found a ZOPE bug. Is really very important for me  
> > know what can I do for avoid it. The first 9 steps are to recreate  
> > the situation and the other steps are to provoke the error.
> >
> > Step 1: Crate a folder called "reproducingError" in Zope Interface  
> > Manage
> >
> > Step 2: create a page template called "index_html" in the  
> > "reproducingError" folder with the following content:
> > "
> > <!-- index_html page template -->
> > <form name="form1" method="post" action="">
> >   <input type="text" name="user">
> >   <input type="submit" name="Submit" value="Submit">
> > </form>
> > "
> >
> > Step 3: create a python script called "init" in the  
> > "reproducingError" folder with the following content:
> > "
> > # init script
> > sessionData = container.REQUEST.SESSION
> > sessionData.set("userId", container.REQUEST.user)
> > return context.init2_html()
> > "
> >
> > Step 4: create a page template called "init2_html" in the  
> > "reproducingError" folder with the following content:
> > "
> > <!-- init2_html page template -->
> > <a href="">passing face 2</a>
> > "
> >
> > Step 5: create a python script called "init2" in the  
> > "reproducingError" folder with the following content:
> > "
> > # init2 script
> > request = context.REQUEST
> > sessionData = request.SESSION
> > sessionData.set('idService', 'testService')
> > context.first()
> > return context.external(context)
> > "
> >
> > Step 6: create a page template called "first_html" in the  
> > "reproducingError" folder with the following content:
> > "
> > First Response
> > "
> >
> > Step 7: create a python script called "first" in the  
> > "reproducingError" folder with the following content:
> > "
> > # first script
> > response = container.REQUEST.RESPONSE
> > str = container.first_html()
> > response.write(str)
> > response.flush()
> > "
> >
> > Step 8: create an external method called "external" in the  
> > "reproducingError" folder with the following content, in where the  
> > function of the external method is "communicationResponse" and the  
> > module is any name that you give to the file:
> > "
> > # external method
> > import time
> > def communicationResponse(context):
> >     response = context.REQUEST.RESPONSE
> >     sessionData = context.REQUEST.SESSION
> >     strDetailEnd = "<script>window.location='reproducingError/end'</
> > script>"
> >
> >     for item in range(1, 40):
> >         time.sleep(3)
> >         response.write("Response iteration:" + str(item))
> >         response.flush()
> >     response.write(strDetailEnd)
> >     response.flush()
> > "
> >
> > Step 9: create a python script called "end" in the  
> > "reproducingError" folder with the following content:
> > "
> > # end script
> > idService = context.REQUEST.SESSION['idService']
> > return "Fin - " + idService
> > "
> >
> > Step 10: open two explorer in wich call the object  
> > "reproducingError" (Example: localhost:8080/reproducingError)
> >
> > Step 11: enter an example text in each one.
> >
> > Step 12: clink in the link of one of them, and 5 second later clink  
> > on the link of the other explorer. The waiting for around 5 second  
> > is necesary because with other time interval not allways get the  
> > error.
> >
> > Stpe 13: and wait the "Response iteration"...  Please if the error  
> > don't appear in any of the pages, begins at Step 9 again. and try  
> > to count to 5 witch other velocity :)
> >
> > The correct result is:
> > "
> > Fin - testService
> > "
> >
> > The error is:
> > "
> > Site Error
> > An error was encountered while publishing this resource.
> > Error Type: KeyError
> > Error Value: 'idService'
> > "
> > The traceback:
> > "
> > Traceback (innermost last):
> >   Module ZPublisher.Publish, line 101, in publish
> >   Module ZPublisher.mapply, line 88, in mapply
> >   Module ZPublisher.Publish, line 39, in call_object
> >   Module Shared.DC.Scripts.Bindings, line 306, in __call__
> >   Module Shared.DC.Scripts.Bindings, line 343, in _bindAndExec
> >   Module Products.PythonScripts.PythonScript, line 323, in _exec
> >   Module None, line 2, in end
> >    - <PythonScript at /approach/reproducingError/end>
> >    - Line 2
> >   Module AccessControl.ZopeGuards, line 67, in guarded_getitem
> >   Module Products.Transience.TransientObject, line 176, in
> __getitem__
> > KeyError: 'idService'
> > "
> >
> > I will appreciate if you try until the error appear, because I not  
> > always obtain the error. I thinks that it is bacause the time  
> > interval between the two request.
> >
> > A curious thing is that when I obtain the error, if I wait around  
> > 15 second and refresh the page in wich i obtain the error, the  
> > correct result appear.. and no errors come.
> >
> > Sorry for the extended message, but I need any help that you can  
> > give me, because this describe error environment imitate a  
> > funcionality that I must give in a system very import that i'm doing.
> >
> > I'm using Zope 2.7.6 for Windows.
> >
> > Thanks in advanced.
> > Leticia
> > _______________________________________________
> > Zope maillist  -  Zope@zope.org
> > http://mail.zope.org/mailman/listinfo/zope
> > **   No cross posts or HTML encoding!  **
> > (Related lists -
> >  http://mail.zope.org/mailman/listinfo/zope-announce
> >  http://mail.zope.org/mailman/listinfo/zope-dev )
> >
>
> _______________________________________________
> Zope maillist  -  Zope@zope.org
> http://mail.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists -
>  http://mail.zope.org/mailman/listinfo/zope-announce
>  http://mail.zope.org/mailman/listinfo/zope-dev )
>
>
_______________________________________________
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to