[Zope] Promlem getting the current object in PythonScript

Jérôme Loisel jerome@levinux.org
Wed, 4 Apr 2001 16:56:49 -0400


Hi!

Evan Simpson -- Mercredi 04 Avril 2001 13:58:
> From: "Jérôme Loisel" <jerome@levinux.org>
>
> > My basic question is this: I have code which is called from
> > standard_html_footer. When that code was a DTML Method, I used this().
> > Now that this code is a PythonScript, how do I access the same object?
> > "context" and "context.this()" do not work reliably.
>
> In this sort of situation, "context" is very different from "this()".
>
> Short answer:
>
> Use the Script's Bindings tab to bind the caller's namespace to "_" (or
> some other name) and use _["this"] to refer to the document.

Hm... I really appreciate the info, but I am having *really* weird problems 
now. You can look at my script's source (the bound version). It is fairly 
readable and commented in English. It is all really simple stuff.

http://zope.levinux.org/adminMenu.txt

The weird problem is that binding namespace to _ radically changed my 
script's behavior. The first thing I noticed was that anonymous users were no 
longer allowed to view the site. Considering that my script starts with the 
following code...

user = context.REQUEST.AUTHENTICATED_USER
if user.getId() == None:
    return ""

I find that weird. I can tell that the return does indeed work because 
nothing at all gets printed. Yet commenting out the three lines towards the 
end which refer to owner_info once again allower anonymous users to view the 
site. You can read the specfic error message I got on that problem here:

http://zope.levinux.org/error1.html

And remember that none of that happens if namespace is not bound...

Having commented out the owner_info code, I was still not out of the woods. 
Authenticated AND unauthenticated users get errors when viewing any page: 
TypeError: no arguments expected. You can read the error message here:
 
http://zope.levinux.org/error2.html

Again, let me remind you that these errors only occur when I try to bind 
namespace to _. Am I going nuts or is this not expected behavior?

Thanks in advance for all your help. Cheers,

Jérôme


PS: Fun with AUTHENTICATED_USER

I ran some tests to see what happened to AUTHENTICATED_USER in PythonScript 
when binding the namespace. The sort answer is: nothing. Yet the following 
code yields very different behavior from the code in adminMenu.py:

user = context.REQUEST.AUTHENTICATED_USER
print "Hello!"
print user.getId()
return printed

I get a Zope error: TypeError, call of non-function (type list). I find this 
very puzzling. You can see the full error message here:

http://zope.levinux.org/error3.html

The following code, however, raises no error:

user = context.REQUEST.AUTHENTICATED_USER
print "Hello!"
print user
return printed

But for anonymous user, it returns "Anonymous User" instead of None. Yet 
trying to use

if user == "Anonymous User"

in Python code does not work. It raises no error, but always evaluates to 
false.

I thought I was starting to know my way around Zope. But this is as confusing 
as it gets. Meesa not understand.

-- 
Jérôme Loisel, étudiant et webmestre
Lévinux: GNU/Linux pour la communauté
http://www.levinux.org/