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
<michael@looma.co.nz>
To: Leticia Larrosa
<LETICIA@tesla.cujae.edu.cu>
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="reproducingError/init">
> > <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="init2">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 )
>
>