Even more diagnostic information the pecurliar 'namespace' error. I loaded Zope 2-4-3 onto my box and loaded in the product and folder (with info) in their appropriate places. Then I loaded the python scripts into the editor and pressed the "Save Changes" button do recompile. It didn't help. Same problem. NameError: global name 'namespace' is not defined. I'm wondering if my technique for getting information from an object isn't frought with peril. Is there a technique where I could return a particular object from a list of objects? Getting an actual object is easy to do. However, the problem comes when the search is unsuccessful. What do you return? The below code is what I developed to remedy that problem. The problem with the remedy is that it doesn't work in Zope 2-4-3 (although it did in 2-3-1). Note, the DTML code from which the python script is called used the contents namespace. Here is the original python script code: found = 0 # flag to indicate that the object was/wasn't found... contents = [] # the return list... # Run through the objects in the current (context) folder to see if there is a match (with given_title)... for obj in context.objectValues('Image'): if found == 0: if given_title == obj.title: url = obj.absolute_url title = obj.title contents.append(namespace(url=url, title=title)[0]) found = 1 # Set flag on success... # If you can't find it in the context, then check the container... for obj in container.objectValues('Image'): if found == 0: if given_title == obj.title: url = obj.absolute_url title = obj.title contents.append(namespace(url=url, title=title)[0]) found = 1 # Set flag on success... # Return indicative values if the desired object was not found... if found == 0: contents.append(namespace(url='', title='')[0]) vars = namespace(contents=contents) return vars ----- As the namespace issue wss causing the problem, I tried to get around it by doing the following: found = 0 # flag to indicate that the object was/wasn't found... # Run through the objects in the current (context) folder to see if there is a match (with given_title)... for obj in context.objectValues('Image'): if found == 0: if given_title == obj.title: ret_obj = obj found = 1 # Set flag on success... # If you can't find it in the context, then check the container... for obj in container.objectValues('Image'): if found == 0: if given_title == obj.title: ret_obj = obj found = 1 # Set flag on success... return ret_obj ### ... which works just fine _IF_ you find the object. If not, the DTML code is still going to look for a property and not find one (because nothing is returned). To fix that, I added a "dummy" object for errors, to wit: class myErrorClass: element_number = -1 ... was tacked on at the beginning of the script, and ... if found == 0: an_Error = myErrorClass() return an_Error else: return ret_obj ... was tacked on at the end. Unfortunately, when you run into a condition where no legitimate object was found (i.e., found == 0), you get a screwy response from Zope. The username/password challenge comes up (even if you are in the manage session as the manager). No username/password combination exists to get through that. In short, something about instantiating the class screwed up Zope. What does one do in such a situation? Thank you all in advance. Ron --- complaw@hal-pc.org wrote:
As I said before, the above code works just fine in Zope 2-3-1. However, it fails (gets the NameError) in both versions 2-4-2 and 2-4-3. Is this because Zope went to python 2.x instead of 1.5?
Do I have to rewrite my code? Do I have to tell my client to get 2-3-1?
Any hints would be greatly appreciated.
Thanks,
Ron
This may be a version problem, or it may not.
I wrote a fairly straightforward Zope application in Zope 2-3-1 on Linux.
(That
instance of Zope has been working just fine for months and hey, it wasn't broke so I didn't fix it. The Linux box has been up for 132 days and I like the fact that I only have to fuss with Zope, if anything at all.)
I created a simple product and associated folder (with a slew of Folders, DTML Documents, python scripts, and DTML Methods. Then I exported them and shipped both the product and the site off to a client who had downloaded and installed Zope 2-3-4 for Windows.
The client got into the Zope management screen (after a little hand-holding, but he didn't read any documentation, so I can't complain). I talked him through the processes of unzip/untar the product, and loading the particular site.
Now the client can pull up a browser and accurately read index_html of the main folder. However, when he tries to read any of the DTML Documents, Folders, etc. he gets:
Zope Error
Error Type: NameError Error Value: global name 'namespace' is not defined
Is this problem between different versions of Zope? namespace is pretty fundamental. I don't see how it could have worked fine under 2-3-1 and not under 2-4-3.
Thanks in advance for any help.
Ron
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )