[Zope] Globals disappearing in extmethod?
Joseph A Knapka
jknapka@earthlink.net
Mon, 04 Feb 2002 15:52:07 +0000
"Thomas B. Passin" wrote:
>
> [Joseph A Knapka]
>
> > OK, I lied, Zope wasn't using the re-globalfied version, which
> > still breaks. However, I've managed to narrow the problem down:
> > The problem with global data being "missing" only
> > happens when the DTML doc that calls my external method is
> > invoked from a particular other DTML document.
> >
> > Also, I discovered that if I create an empty module
> > called "myGlobals", and explicitly place all my
> > global data there, everything works. Still confused,
> > trying to build a simple case that breaks the same
> > way as my original code.
> >
>
> Well, in Python you can invoke any function with your own context (globals
> and locals). Zope may supply its own globals when it calls an external
> method , and maybe in some cases that would prevent yours from being known.
I thought of that, but it's still bizarre, because my code says:
def myExtMethod(REQUEST):
global req_data
req_data = REQUEST
...
and then later in code called from myExtMethod(), it's
*req_data* that can't be found in the
global namespace. Since it's being assigned at a place
which every single call to this code passes through, I'm
quite mystified. But it does seem to be an animal of the
general nature you suggest.
> It's an area I don't know much about. I'd still prefer to pass everything
> as explicit parameters, but I can see cases where it would be useful to use
> various global variables.
Sometimes globals are good. Sometimes even "goto" is good :)
> How are you making use of your myGlobals module? Just importing * from it?
import myGlobals
def myExtMethod(REQUEST):
myGlobals.req_data = REQUEST
...
... then use "myGlobals.req_data" instead of just "req_data"
everywhere else in the file.
The problem definitely smells of some weird interaction
between Zope and the Python namespace mechanism. I may
just tear the hood off of Zope some time soon and poke
around a bit.
Cheers,
-- Joe
"I should like to close this book by sticking out any part of my neck
which is not yet exposed, and making a few predictions about how the
problem of quantum gravity will in the end be solved."
--- Physicist Lee Smolin, "Three Roads to Quantum Gravity"