Re: [Zope-dev] Python Product as DataSkin
Steve Alexander wrote: > > Michael R. Bernstein wrote: > > > > File /home/webmaven/Products/ZPatterns/DataSkins.py, line 208, in > > __set_attr__ (Object: ElementWithAttributes) KeyError: (see above) > > What version of ZPatterns are you using? 0.4.3b2 on Zope 2.2.0 > I certainly don't have the __set_attr__ method covering line 208 in my > version. In my DataSkins.py, line 208 is the one marked below: > def __set_attr__(self,name,val,_v_dm_=_v_dm_): > try: > 208>>> dm = self.__dict__[_v_dm_] > except KeyError: > if name=='id' and val==self.__dict__['id']: return > raise > > If they don't, you'll get the error that you're reporting. Well, that's the version I've got, and that is how the __set_attr__ method reads. What do I check next? Backtracking a bit more, line 46 in ArchiveImage.py is in the manage_addArchiveImage method, marked below: def manage_addArchiveImage(self, id, file, title='', displays=None, precondition='', content_type='', REQUEST=None): """ Add a new ArchiveImage object. """ # This constructor basically ripped off from Image/File id, title = cookId(id, title, file) self=self.this() # First, we create the ArchiveImage without data: 46>self._setObject(id, ArchiveImage(id,title,'',displays,content_type,precondition)) # Now we "upload" the data. By doing this in two steps, we # can use a database trick to make the upload more efficient. self._getOb(id).manage_upload(file) if REQUEST: try:url=self.DestinationURL() except: url=REQUEST['URL1'] REQUEST.RESPONSE.redirect('%s/manage_main' % url) return id Does this help? Thanks, Michael Bernstein. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
Michael R. Bernstein wrote: > > File /home/webmaven/Products/ZPatterns/DataSkins.py, line 208, in > __set_attr__ (Object: ElementWithAttributes) KeyError: (see above) What version of ZPatterns are you using? I certainly don't have the __set_attr__ method covering line 208 in my version. This looks like a bug I reported (w/ patch) for the last but one "official" release, the fix to which made it into ZPatterns-0.4.3b2 (the latest one on the ZPatterns page). The first few lines of the __set_attr__ method of DataSkin.py should look like this: def __set_attr__(self,name,val,_v_dm_=_v_dm_): try: dm = self.__dict__[_v_dm_] except KeyError: if name=='id' and val==self.__dict__['id']: return raise If they don't, you'll get the error that you're reporting. Try installing the latest ZPatterns and see what happens. If you're using Zope 2.2.x, use the "official" one. If you're using Zope 2.3, you'll need to apply various patches, or use my interim version, which works only with Zope 2.3. http://www.cat-box.net/steve/ZPatterns-stevea-20010204.tar.gz -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
Ok, to recap: 1) Add 'import Globals' to the start of the myClass.py file 2) Change the def __init__ in the 'class myClass' definition to: def __init__(self, id, title): myClass.inheritedAttribute('__init__')(self, id) # rest of your __init__ method 3) add the following line at the end of the file (with no indenting): Globals.default__class_init__(myClass) Is this supposed to work and let me instantiate a DataSkin derived class through the 'normal' mgmt interface? if so, something is wrong, because I'm still getting the same error: --8<-- This resource may be trying to reference a nonexistent object or variable _v_dm_ The URL may be incorrect. The parameters passed to this resource may be incorrect. A resource that this resource relies on may be encountering an error. Traceback (innermost last): File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 222, in publish_module File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 187, in publish File /usr/local/Zope-2.2.0-src/lib/python/Zope/__init__.py, line 221, in zpublisher_exception_hook File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 171, in publish File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/mapply.py, line 160, in mapply (Object: manage_addArchiveImage) File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 112, in call_object (Object: manage_addArchiveImage) File /home/webmaven/Products/ArchiveImage/ArchiveImage.py, line 46, in manage_addArchiveImage (Object: ApplicationDefaultPermissions) File /home/webmaven/Products/ArchiveImage/ArchiveImage.py, line 80, in __init__ (Object: ElementWithAttributes) File /home/webmaven/Products/ZPatterns/DataSkins.py, line 208, in __set_attr__ (Object: ElementWithAttributes) KeyError: (see above) --8<-- For your reference, line 80 in ArchiveImage.py is the first line in the '__init__' function after the 'ArchiveImage.inheritedAttribute('__init__')(self, id)' line, and reads: self.__name__=id I don't know what to try next. Any suggestions? If I zip up the whole Product, could you (or anyone else on the list) take a look at it? I have a feeling I'm missing something obvious. Thanks, Michael Bernstein. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
Michael R. Bernstein wrote: > >> In Zope 2.3) it is aliased to Globals.InitializeClass. > > So, if I'm developing this on 2.2, I need to use > Globals.default__class_init__(FooClass) instead of > Globals.InitializeClass(FooClass)? Yes. At least, using default__class_init__ will work on Zope 2.2 and 2.3. I don't know whether InitializeClass is in Zope 2.2, but it is definitely in Zope 2.3. >> Use it by having >> >> import Globals >> >> somewhere in your class definition, > > If 'import Globals' appears at the start of the FooClass.py > file, does it still need to appear in the class definition > itself? Sorry -- my imprecise language! "import Globals" needs to be in the .py file that your class is defined in, at the module level of indentation. You're importing Globals so that you can use it in the module rather than in the Class definition. >> Globals.InitializeClass(YourClassName) >> >> at the end. > > > At the end on the file, or the end of the class definition? After the class definition, so, qiute probably at the end of the file. -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
Steve Alexander wrote: > > Michael R. Bernstein wrote: > > > Steve Alexander wrote: > > > >> Is the __init__ method of DataSkin getting called? > >> > >> This would happen if, for example, you define an __init__ method in your > >> class, but you don't use something like: > >> > >> from Globals import default__class_init__ > >> > >> default__class_init__(yourClass) > >> > >> At least, I *think* that's one of the things that default__class_init__ > >> does. > > Nope... I got confused. Globals.default__class_init__ sets up the security > attributes for you class, from whatever combination of security > declarations you've used. > > In Zope 2.3) it is aliased to Globals.InitializeClass. So, if I'm developing this on 2.2, I need to use Globals.default__class_init__(FooClass) instead of Globals.InitializeClass(FooClass)? > Use it by having > > import Globals > > somewhere in your class definition, If 'import Globals' appears at the start of the FooClass.py file, does it still need to appear in the class definition itself? > and > > Globals.InitializeClass(YourClassName) > > at the end. At the end on the file, or the end of the class definition? Thanks for the help, Michael Bernstein. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
Michael R. Bernstein wrote: > Steve Alexander wrote: > >> Is the __init__ method of DataSkin getting called? >> >> This would happen if, for example, you define an __init__ method in your >> class, but you don't use something like: >> >> from Globals import default__class_init__ >> >> default__class_init__(yourClass) >> >> At least, I *think* that's one of the things that default__class_init__ >> does. Nope... I got confused. Globals.default__class_init__ sets up the security attributes for you class, from whatever combination of security declarations you've used. In Zope 2.3) it is aliased to Globals.InitializeClass. Use it by having import Globals somewhere in your class definition, and Globals.InitializeClass(YourClassName) at the end. See the following URL for more information: http://www.zope.org//Wikis/DevSite/Projects/DeclarativeSecurity/ZopeSecurityForDevelopers >> Otherwise, you'll need to make sure you call DataSkin.__init__ >> from your __init__ method, probably using Acquisition.inheritedAttribute.) So, at the start of your __init__ method, call: NameOfYourClass.inheritedAttribute('__init__')(self, id) Your __init__ method might look like this: def __init__(self, id, title): FooClass.inheritedAttribute('__init__')(self, id) # rest of your __init__ method -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
"Phillip J. Eby" wrote: > > At 10:47 PM 2/18/01 -0800, Michael R. Bernstein wrote: > > > >Hmm. So I need to refactor the 'manage_add' method inside > >the python product into two methods, 'manage_add' which > >would be used by the 'normal' object creation process and > >that would also call a second 'setup' method which could be > >called by the specialists 'myadd' method directly, bypassing > >the 'manage_add' method entirely. > > > >Is that correct? > > Pretty much Ok, but in that case a simple should at least execute without error, and it doesn't: Error Type: TypeError Error Value: not enough arguments; expected 4, got 2 Traceback (innermost last): File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 222, in publish_module File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 187, in publish File /usr/local/Zope-2.2.0-src/lib/python/Zope/__init__.py, line 221, in zpublisher_exception_hook (Object: ProviderContainer) File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 171, in publish File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/mapply.py, line 160, in mapply (Object: addArchiveImage) File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 112, in call_object (Object: addArchiveImage) File /usr/local/Zope-2.2.0-src/lib/python/OFS/DTMLMethod.py, line 167, in __call__ (Object: addArchiveImage) File /usr/local/Zope-2.2.0-src/lib/python/DocumentTemplate/DT_String.py, line 502, in __call__ (Object: addArchiveImage) File /usr/local/Zope-2.2.0-src/lib/python/DocumentTemplate/DT_Util.py, line 337, in eval (Object: newItem(REQUEST.id)) (Info: newItem) File, line 0, in ? File /home/webmaven/Products/ZPatterns/Specialists.py, line 40, in newItem (Object: ProviderContainer) File /home/webmaven/Products/ZPatterns/Rack.py, line 73, in newItem (Object: ProviderContainer) File /home/webmaven/Products/ZPatterns/Rack.py, line 135, in createItem (Object: ProviderContainer) File /home/webmaven/Products/ZPatterns/Rack.py, line 232, in _RawItem (Object: ProviderContainer) TypeError: (see above) What am I doing wrong? Michael Bernstein. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
Steve Alexander wrote: > > Is the __init__ method of DataSkin getting called? > > This would happen if, for example, you define an __init__ method in your > class, but you don't use something like: > > from Globals import default__class_init__ > > default__class_init__(yourClass) > > (At least, I *think* that's one of the things that default__class_init__ > does. Otherwise, you'll need to make sure you call DataSkin.__init__ > from your __init__ method, probably using Acquisition.inheritedAttribute.) This sounds like it's on the right track because I *am* defining an __init__ method, and I don't have any code resembling what you typed. Where do I put this again? Does this go in the myclass.py file or the products __init__.py file? And where in the file does the code in the second line get used exactly? Sorry for being a little dense, Michael Bernstein ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
Michael R. Bernstein wrote: > > Hmm. I thought I was doing it wrong. Here is the error and traceback > from trying to instantiate the modified Product (through the > standard mgmt interface): > > This resource may be trying to reference a nonexistent object or > variable _v_dm_ > Any ideas? Is the __init__ method of DataSkin getting called? This would happen if, for example, you define an __init__ method in your class, but you don't use something like: from Globals import default__class_init__ default__class_init__(yourClass) (At least, I *think* that's one of the things that default__class_init__ does. Otherwise, you'll need to make sure you call DataSkin.__init__ from your __init__ method, probably using Acquisition.inheritedAttribute.) -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
Philip, I have gone spelunking into the DataSkin class source to try to find out why subclassing from DataSkin is interfering with 'normal' (not in a rack) instantiation of the product, but with no success. Any assistance you could give would be appreciated. BTW, I think the first line needs to read: from Products.ZPatterns.DataSkins import DataSkin Thanks, Michael Bernstein. Michael Bernstein wrote: > > "Phillip J. Eby" wrote: > > > > At 12:51 PM 2/18/01 -0800, Michael R. Bernstein wrote: > > > > > >What do I need to change (import/subclass) in order to use > > >it in this way? > > > > from ZPatterns.DataSkins import DataSkin > > > > class MyClass(DataSkin,...all other bases...): > > Here is the error and > traceback from trying to instantiate the modified Product > (through the standard mgmt interface): > > This resource may be trying to reference a > nonexistent object or variable _v_dm_ > > The URL may be incorrect. > The parameters passed to this resource may be incorrect. > A resource that this resource relies on may be encountering > an error. > > Traceback (innermost last): > File > /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, > line 222, in publish_module > File > /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, > line 187, in publish > File > /usr/local/Zope-2.2.0-src/lib/python/Zope/__init__.py, line > 221, in zpublisher_exception_hook > File > /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, > line 171, in publish > File > /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/mapply.py, > line 160, in mapply > (Object: manage_addArchiveImage) > File > /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, > line 112, in call_object > (Object: manage_addArchiveImage) > File /home/webmaven/Products/ArchiveImage/ArchiveImage.py, > line 46, in manage_addArchiveImage > (Object: ApplicationDefaultPermissions) > File /home/webmaven/Products/ArchiveImage/ArchiveImage.py, > line 79, in __init__ > (Object: ElementWithAttributes) > File /home/webmaven/Products/ZPatterns/DataSkins.py, line > 208, in __set_attr__ > (Object: ElementWithAttributes) > KeyError: (see above) ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
At 10:47 PM 2/18/01 -0800, Michael R. Bernstein wrote: > >Hmm. So I need to refactor the 'manage_add' method inside >the python product into two methods, 'manage_add' which >would be used by the 'normal' object creation process and >that would also call a second 'setup' method which could be >called by the specialists 'myadd' method directly, bypassing >the 'manage_add' method entirely. > >Is that correct? Pretty much >Is there anything else I would need to change? Anything that carries any assumptions about the normal Zope management creation process. For example, manage_afterAdd is only called when a DataSkin is added to a Folder, not a Rack. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
"Phillip J. Eby" wrote: > > At 09:49 PM 2/18/01 -0800, Michael R. Bernstein wrote: > > > >Ok, assuming that the 'normal' instantiation is either > >solved or a non-issue, do I need to do anything special to > >get the newItem() method to call my products manage_add > >method? > > newItem() will not do that. A Rack's newItem() method always takes only an > 'id' method. You'll need a method on the object itself that can be given > anything else you want to give it, which you'll call from a method you > create on the specialist, e.g. a "myAdd" method that takes all four > parameters and then does something like: > > newObject = self.newItem(id) > newObject.setup(extraParm1,extraParm2,...) > return newObject Hmm. So I need to refactor the 'manage_add' method inside the python product into two methods, 'manage_add' which would be used by the 'normal' object creation process and that would also call a second 'setup' method which could be called by the specialists 'myadd' method directly, bypassing the 'manage_add' method entirely. Is that correct? Is there anything else I would need to change? Thanks, Michael Bernstein. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
At 09:49 PM 2/18/01 -0800, Michael R. Bernstein wrote: > >Ok, assuming that the 'normal' instantiation is either >solved or a non-issue, do I need to do anything special to >get the newItem() method to call my products manage_add >method? newItem() will not do that. A Rack's newItem() method always takes only an 'id' method. You'll need a method on the object itself that can be given anything else you want to give it, which you'll call from a method you create on the specialist, e.g. a "myAdd" method that takes all four parameters and then does something like: newObject = self.newItem(id) newObject.setup(extraParm1,extraParm2,...) return newObject ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
"Phillip J. Eby" wrote: > > At 12:51 PM 2/18/01 -0800, Michael R. Bernstein wrote: > >I have an existing Python Product that I would like to use > >as a DataSkin in a Rack. > > > >What do I need to change (import/subclass) in order to use > >it in this way? > > > > from ZPatterns.DataSkins import DataSkin > > class MyClass(DataSkin,...all other bases...): Ok, assuming that the 'normal' instantiation is either solved or a non-issue, do I need to do anything special to get the newItem() method to call my products manage_add method? The manage_add method takes an id, an optional title, and an uploaded file. When I try passing these to newItem(), it complains that it's getting "too many arguments, expected 2 got 4", but when I only pass the id, it complains that "not enough arguments; expected 4, got 2" As far as I can determine, the fourth/second argument that it gets in each case is 'self'. So what do I do next? Michael Bernstein. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
"Phillip J. Eby" wrote: > > At 12:51 PM 2/18/01 -0800, Michael R. Bernstein wrote: > >I have an existing Python Product that I would like to use > >as a DataSkin in a Rack. > > > >What do I need to change (import/subclass) in order to use > >it in this way? > > > > from ZPatterns.DataSkins import DataSkin > > class MyClass(DataSkin,...all other bases...): Hmm. I thought I was doing it wrong. Here is the error and traceback from trying to instantiate the modified Product (through the standard mgmt interface): This resource may be trying to reference a nonexistent object or variable _v_dm_ The URL may be incorrect. The parameters passed to this resource may be incorrect. A resource that this resource relies on may be encountering an error. Traceback (innermost last): File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 222, in publish_module File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 187, in publish File /usr/local/Zope-2.2.0-src/lib/python/Zope/__init__.py, line 221, in zpublisher_exception_hook File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 171, in publish File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/mapply.py, line 160, in mapply (Object: manage_addArchiveImage) File /usr/local/Zope-2.2.0-src/lib/python/ZPublisher/Publish.py, line 112, in call_object (Object: manage_addArchiveImage) File /home/webmaven/Products/ArchiveImage/ArchiveImage.py, line 46, in manage_addArchiveImage (Object: ApplicationDefaultPermissions) File /home/webmaven/Products/ArchiveImage/ArchiveImage.py, line 79, in __init__ (Object: ElementWithAttributes) File /home/webmaven/Products/ZPatterns/DataSkins.py, line 208, in __set_attr__ (Object: ElementWithAttributes) KeyError: (see above) Any ideas? Michael Bernstein. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] Python Product as DataSkin
At 12:51 PM 2/18/01 -0800, Michael R. Bernstein wrote: >I have an existing Python Product that I would like to use >as a DataSkin in a Rack. > >What do I need to change (import/subclass) in order to use >it in this way? > from ZPatterns.DataSkins import DataSkin class MyClass(DataSkin,...all other bases...): ... ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
[Zope-dev] Python Product as DataSkin
I have an existing Python Product that I would like to use as a DataSkin in a Rack. What do I need to change (import/subclass) in order to use it in this way? Thanks, Michael Bernstein. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )