[Zope-dev] Another caching scheme...
Hello, all. The reason that brings me here is to ask for the good people's cooperation. Ok, bad people can cooperate too ;) In the long hard way of creating some sort of internal cache scheme for zope, one that wouldn't depend on meta-tags and would be transparent to the developer/user, I came up with CachePool (http://www.zope.org/Members/neli/CachePool). But that just isn't enough... though it works for a specific caching scheme, it's not a site wide, or should I say, server wide. Mindstorming with my fellow workers, one (the boss, and that's why he's the boss) came up with the magic words... cache the html on it's way out and make some callback on request to test if we have that particular request in store. So I did... First try was to integrate SiteAccess with a traversal interfaced CachePool, one you could call /Cacher/thing/to/grab in order to cache /thing/to/grab from the root. But __bobo_traverse__ just isn't my friend. Next thing I did, I took out the surgeon gloves and went to get my hands dirty. I started tampering with ZPublisher/Publish.py. And this is where I need your help. To those of you who don't suffer from a faint heart and wish to increase zope's performance by about 6x (my number, your's *will* be different), I ask to point your browsers to my Member page, where instructions and source will be available. btw, the one on my Members page is for Zope 2.2.2, and will only work with zope's with the exact same Publish.py. Both win and linux 2.2.2 versions have the same Publish.py. Oh, and of course, I would appreciate any feedback on bugs/features/comments/you_have_no_idea_what_your_doin/hello_how_are_you Hope I haven't bothered you, but I tend to get carried away! -- "Kill processes, not people." - Larry Cohen Carlos Neves [EMAIL PROTECTED] ___ 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] Another caching scheme...
Carlos Neves wrote: But that just isn't enough... though it works for a specific caching scheme, it's not a site wide, or should I say, server wide. Mindstorming with my fellow workers, one (the boss, and that's why he's the boss) came up with the magic words... cache the html on it's way out and make some callback on request to test if we have that particular request in store. So I did... Um, what you're describing is already supported using HTTP caching headers. Set up Apache as a reverse proxy, give Zope the appropiate header handling code (I posted how on Zope-dev a while back) and you'll get wonderful speed up without messing with Zope's internals. -- Itamar S.T. [EMAIL PROTECTED] Fingerprint = D365 7BE8 B81E 2B18 6534 025E D0E7 92DB E441 411C ___ 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] Confera status?
Hi! I read something about Confera being obsolete or not working properly anymore. Is that true? I wanted to run Confera on a 2.1.6 server but I get horribly bad results (1 req/sec). Is there a solution to the performance problem? Or a replacement to Confera? I searched but couldn't find any more information... Thilo -- [EMAIL PROTECTED] e-business manager innominate AG the linux architects tel: +49-30-308806-0fax: -77 www.innominate.com ___ 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] Objects that are properties
I have a Customer and Address ZClasses based on Dataskin as well as a CustomerManager specialist. The Customer ZClass has a external method setAddress: def setAddress(self, Address) self.Address = Address CustomerManager has a defaultRack and addressRack. The methods that adds the instance contains this: dtml-let newCustomer="newItem(name)" dtml-call "newCustomer.propertysheets.Basic.manage_changeProperties(test=test)" dtml-let address="addressRack.newItem(id)" dtml-call "address.propertysheets.basic.manage_changeProperties(test=test)" dtml-call "newCustomer.setAddress(address)" /dtml-let /dtml-let and it seems to work fine. Then to retrieve the Customer addresses I call: addressRack.getPersistentItemIDs()" but there seems to be a problem with permissions because Zope prompts me for username and password although i'm already working in the management interface. Roché ___ 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] JPython Product?
Steve: That is good to know, being a Mac fan myself. I'll have to play with and test the different browsers on the client side as well as server-side jdks. From what I have learned so far on the server end, the project seems reasonably feasible. I think the interesting part will be creating the precise dividing line between the JPython and CPython worlds. I doubt much JPython will exist in the product excepting some "glue" to get Zope/CPython to interact with it in a robust way. That will probably be the fun part. Thanks for the comments, Casey D. -Original Message- From: Steve Spicklemire [mailto:[EMAIL PROTECTED]] Sent: Wednesday, November 08, 2000 5:33 AM To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: Re: [Zope-dev] JPython Product? Hi Casey, I think this is a fine idea. The main thing that keeps me from doing it is that JPython doesn't work on Netscape (Mac) and so (at this point at least) I can't use it, unless I have a context where I can insist that users use a particular browser. The other annoyance is the long download time for the JPython implementation The other annoyance is the general flakiness of Java VMs out there But.. I think the concept is a good one.. and once the JPython implementation is cached it should be pretty fast. Then you just have to worry about all the JVM bugs. ;-) good luck! -steve ___ 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] ZPatterns, MySQL, Full Text Searching
Hello, I've read that ZPatterns and ZCatalog don't interact too well and I was wondering if this is also true of the new ZPatterns release. I might be looking to move something to ZPatterns so that it can get all benefits of Zope's security system and things like the Catalog, obviously if the Catalog doesn't work with ZPatterns, that's a bit of a problem :-S On a related note, has anyone thought of using MySQL's new full text searching to implement the Catalog interface? Has anyone thought of or actually made the Catalog stuff into an interface so people can implement other options to ZCatalog? cheers, Chris PS: Is there a ZPatterns demo/tutorial around anywhere? How should I start getting into ZPatterns? What should I read? Where should I start? (The four most common ZPatterns FAQ's if I'm not mistaken ;-) ___ 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] ZPatterns, MySQL, Full Text Searching
Chris Withers wrote: I've read that ZPatterns and ZCatalog don't interact too well and I was wondering if this is also true of the new ZPatterns release. I might be looking to move something to ZPatterns so that it can get all benefits of Zope's security system and things like the Catalog, obviously if the Catalog doesn't work with ZPatterns, that's a bit of a problem :-S CatalogAwareness and DataSkings don't work together. However, I wrote and stevea maintains a replacement, for DataSkins, thats better than CatalogAwareness - it automatically recatalogs when the object changes - no more reindex_object() calls. The product is DataSkinAddons. Older version of ZPatterns didn't support subtransactions - newest version does, so it should work fine with ZCatalog. -- Itamar S.T. [EMAIL PROTECTED] ___ 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] ZPatterns: Non-ZODB storage and Racks
In Rack.py I noticed the following: a = self.loadAttrib if not a: slot = self._writeableSlot(key) slot[SelfKey] = item.aq_base# strip acquisition wrapping item._setSlot(slot) # Not needed for non-ZODB storage If item._setSlot set is not needed for non-ZODB storage should I subclass rack and override createItem? Roché ___ 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] ZPatterns, MySQL, Full Text Searching
Hi Chris, ZPatterns and ZCatalog work fine. Here is a skin script I've been using to keep a catalog up to day with DataSkins: WHEN OBJECT ADDED CALL Catalog.catalog_object(self, _.string.join(self.getPhysicalPath(),'/')) WHEN OBJECT DELETED CALL Catalog.uncatalog_object(_.string.join(self.getPhysicalPath(),'/')) WHEN OBJECT CHANGED CALL Catalog.uncatalog_object(_.string.join(self.getPhysicalPath(),'/')), Catalog.catalog_object(self, _.string.join(self.getPhysicalPath(),'/')) The problem (I think) is DataSkins and CatalogAware, which don't mix. -steve "Chris" == Chris Withers [EMAIL PROTECTED] writes: Chris Hello, Chris I've read that ZPatterns and ZCatalog don't interact too Chris well and I was wondering if this is also true of the new Chris ZPatterns release. I might be looking to move something to Chris ZPatterns so that it can get all benefits of Zope's Chris security system and things like the Catalog, obviously if Chris the Catalog doesn't work with ZPatterns, that's a bit of a Chris problem :-S Chris On a related note, has anyone thought of using MySQL's new Chris full text searching to implement the Catalog interface? Has Chris anyone thought of or actually made the Catalog stuff into Chris an interface so people can implement other options to Chris ZCatalog? Chris cheers, Chris Chris Chris PS: Is there a ZPatterns demo/tutorial around anywhere? How Chris should I start getting into ZPatterns? What should I read? Chris Where should I start? (The four most common ZPatterns Chris FAQ's if I'm not mistaken ;-) Chris ___ Zope-Dev Chris maillist - [EMAIL PROTECTED] Chris http://lists.zope.org/mailman/listinfo/zope-dev ** No cross Chris posts or HTML encoding! ** (Related lists - Chris http://lists.zope.org/mailman/listinfo/zope-announce Chris http://lists.zope.org/mailman/listinfo/zope ) ___ 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] Objects that are properties
This is a known problem. Use: dtml-let itemIDs="[]" dtml-in "addressRack.getPersistentItemIDs()" sort dmtl-call "itemIDs.append(_['sequence-item'])" /dtml-in Now you have the required itemIDs in itemIDs. /dtml-in Thanks Steve and thank you Phillip for ZPatterns. I've managed to create a very basic framework storing attributes in the ZODB and in a SQL RDBMS. I'm elated. This is the way to write applications, IMHO. A couple of things are still unclear but I at least feel that I can create now. Roché ___ 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] ZPatterns: Non-ZODB storage and Racks
At 06:10 PM 11/8/00 +0200, Roch'e Compaan wrote: In Rack.py I noticed the following: a = self.loadAttrib if not a: slot = self._writeableSlot(key) slot[SelfKey] = item.aq_base# strip acquisition wrapping item._setSlot(slot) # Not needed for non-ZODB storage If item._setSlot set is not needed for non-ZODB storage should I subclass rack and override createItem? I'm not sure I understand your question. If you don't have something special you want to do by subclassing Rack, then the answer would be "no". :) The comment is perhaps misleading. What it means is that the _setSlot call isn't needed if your Rack implements a non-ZODB storage mechanism. The reason *why* it isn't needed, is that the DataSkin will ask for a slot on demand, so that a ZODB record is only created if something needs to be stored persistently. However, in the case where you have not set a "load" attribute (i.e., you are storing actual objects in the ZODB), then one might as well tell the object its slot, because the slot is where the object itself is going to be stored. Technically, the _setSlot call isn't necessary even then, because the DataSkin could still ask for it on demand. However, since the code at this point has gone to the trouble of getting the slot object, it might as well pass it to the DataSkin immediately. ___ 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] Cache parameters
Just wondering what kind of cache parameters people run on their Zope installation. It would seem running a high target size and maximum time between accesses would speed up those requests it can find the cache, but not cached request take longer since more RAM is used in the maintaining of the cache (guess). Has anyone found a sweet spot away from the standard, I guess of course it all depends on the individual Zope site, this one is particulary ZCatalog heavy. Or should I just leave it at the default, which I found seems to work fine. -- Andy McKay, Developer. ActiveState. ___ 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] REQUEST in id causes errors
Any id with 'REQUEST' in it cannot be edited or viewed. If you don't believe me, try it out yourself. In my case, I *need* a URL named 'BIG_REQUESTS.html' -- it's a Zope-based mirror of content from somewhere else. This fixes it: /lib/python/ZPublisher/BaseRequest.py: 243c243 if find(path, '/REQUEST/') = 0: --- if find(path, 'REQUEST') = 0: I'm not sure if I did quite the right thing here... are delimiters always slash? should we also check if the URL terminates in "/REQUEST"? What about cgi parameters named 'REQUEST'? Zope gurus, your comments please? -- Neil Kandalgaonkar [EMAIL PROTECTED] Web Application Developer, ActiveState ___ 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] ZPatterns: Non-ZODB storage and Racks
I'm not sure I understand your question. If you don't have something special you want to do by subclassing Rack, then the answer would be "no". :) You do answer my question below. I was wondering if this line would not cause an object to be stored in the ZODB by default. The comment is perhaps misleading. What it means is that the _setSlot call isn't needed if your Rack implements a non-ZODB storage mechanism. The reason *why* it isn't needed, is that the DataSkin will ask for a slot on demand, so that a ZODB record is only created if something needs to be stored persistently. However, in the case where you have not set a "load" attribute (i.e., you are storing actual objects in the ZODB), then one might as well tell the object its slot, because the slot is where the object itself is going to be stored. Technically, the _setSlot call isn't necessary even then, because the DataSkin could still ask for it on demand. However, since the code at this point has gone to the trouble of getting the slot object, it might as well pass it to the DataSkin immediately. Here I loose you. What does "setting the load attribute" mean? I did manage to store objects in a SQL RDBMS through some skinscript methods that call sql methods. I assumed selecting a ZClass on the storage tab simply informs the ZClass what it's rack is. I couldn't verify if these objects were stored in the ZODB as well as in my RDBMS. Besides writing some skinscript and sql methods is there anything else one should do to only use non-ZODB storage. When will I use attribute and sheetproviders and do they come into play at all with non-ZODB storage. Roché ___ 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] REQUEST in id causes errors
D'oh. The diff I posted was backwards. I assume you all got the general idea. With more context: *** C:\Documents and Settings\neilk\My Documents\BaseRequest-old.py Wed Nov 08 12:21:32 2000 --- lib\python\ZPublisher\BaseRequest.pyWed Nov 08 12:22:05 2000 *** *** 242,244 # Make sure that REQUEST cannot be traversed. ! if find(path, 'REQUEST') = 0: return response.notFoundError(path) --- 242,244 # Make sure that REQUEST cannot be traversed. ! if find(path, '/REQUEST/') = 0: return response.notFoundError(path) -- Neil Kandalgaonkar [EMAIL PROTECTED] Web Application Developer, ActiveState ___ 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] Re: Problems with LoginManager 0.8.8b1
Jeff, The behavior is exactly the same with a "plain" Zope User Folder. It also has nothing to do with acquisition, at least not in the way you think. The problem is that a user who is defined in a subfolder is *not* granted roles to any folder above them. This means that they have no access to "standard_html_header", unless it is set to be viewable by Anonymous. Hope that answers your question. At 11:50 AM 11/7/00 -0500, Jeff Hoffman wrote: Phillip and Ty, I posted this to the Zope list two to three days ago. No one has responded, so I am writing you directly in the hopes that one of you may have some insight on my problem. If I can do anything to help you narrow it down, such as tarring up my Zope install and sending it to you (with my ZODB and products), let me know. Thanks, --Jeff --- Jeff K. Hoffman 704.849.0731 x108 Chief Technology Officer mailto:[EMAIL PROTECTED] Going Virtual, L.L.C. http://www.goingv.com/ -- Forwarded message -- Date: Sun, 5 Nov 2000 16:02:14 -0500 (EST) From: Jeff Hoffman [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: [Zope] Problems with LoginManager 0.8.8b1 Hello, I am having an odd problem with LoginManager 0.8.8b1 and am writing the list in the hopes that someone can either help me out, or confirm that I've encountered a bug. I am running Zope 2.2.2 with Python 1.5.2 on a Linux box. I installed LoginManager as described, and compiled DynPersist and so forth for ZPatterns. All seems to be working well. I created a temporary folder called 'sandbox', inside of which I instantiated a LoginManager. In its UserSource (a Generic User Source), I created four Python Methods (with Python Methods v0.1.7): --- userAuthenticate paramsself, REQUEST, username, password/params if username == 'XXX' and password == 'XXX': return 1 else: return 0 --- userExists paramsself, REQUEST, username/params if username == 'XXX': return 1 else: return 0 --- userDomains paramsself, REQUEST, username/params return [] --- userRoles paramsself, REQUEST, username/params if username == 'XXX': return ['Manager', 'Member'] else: return ['Member'] Once done, I pointed my browser to http://myhost/sandbox/index_html. This method is a standard DTML Method, inluding standard_html_header and footer and putting some text in the middle. I get the following error: Traceback (innermost last): File /usr/local/zope/lib/python/ZPublisher/Publish.py, line 222, in publish_module File /usr/local/zope/lib/python/ZPublisher/Publish.py, line 187, in publish File /usr/local/zope/lib/python/Zope/__init__.py, line 221, in zpublisher_exception_hook (Object: Traversable) File /usr/local/zope/lib/python/ZPublisher/Publish.py, line 171, in publish File /usr/local/zope/lib/python/ZPublisher/mapply.py, line 160, in mapply (Object: index_html) File /usr/local/zope/lib/python/ZPublisher/Publish.py, line 112, in call_object (Object: index_html) File /usr/local/zope/lib/python/OFS/DTMLMethod.py, line 172, in __call__ (Object: index_html) File /usr/local/zope/lib/python/DocumentTemplate/DT_String.py, line 528, in __call__ (Object: index_html) KeyError: standard_html_header Zope can't find standard_html_header. I am guessing the acquisition path is getting hosed somewhere along the way. If I simply delete acl_users from sandbox (my LoginManager), index_html works fine. Moreover, it is not just standard_html_header that I can't acquire. I created a DTML Method called foo, and could not acquire it, either. Any ideas? --Jeff --- Jeff K. Hoffman 704.849.0731 x108 Chief Technology Officer mailto:[EMAIL PROTECTED] Going Virtual, L.L.C. http://www.goingv.com/ ___ Zope maillist - [EMAIL PROTECTED] 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-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] JPython Product?
Somehow I think the other way around would be even more interesting: a Java application server accessing Zope (Jope?). The platform market is really tough, and competing with Java isn't easy. If you can't beat them, join them... I guess there are millions of reasons why it can't be done, though? -Original Message- From: Casey Duncan [mailto:[EMAIL PROTECTED]] Posted At: Wednesday, November 08, 2000 23:20 Posted To: Zope Developer Conversation: [Zope-dev] JPython Product? Subject: RE: [Zope-dev] JPython Product? Steve: That is good to know, being a Mac fan myself. I'll have to play with and test the different browsers on the client side as well as server-side jdks. From what I have learned so far on the server end, the project seems reasonably feasible. I think the interesting part will be creating the precise dividing line between the JPython and CPython worlds. I doubt much JPython will exist in the product excepting some "glue" to get Zope/CPython to interact with it in a robust way. That will probably be the fun part. Thanks for the comments, Casey D. -Original Message- From: Steve Spicklemire [mailto:[EMAIL PROTECTED]] Sent: Wednesday, November 08, 2000 5:33 AM To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: Re: [Zope-dev] JPython Product? Hi Casey, I think this is a fine idea. The main thing that keeps me from doing it is that JPython doesn't work on Netscape (Mac) and so (at this point at least) I can't use it, unless I have a context where I can insist that users use a particular browser. The other annoyance is the long download time for the JPython implementation The other annoyance is the general flakiness of Java VMs out there But.. I think the concept is a good one.. and once the JPython implementation is cached it should be pretty fast. Then you just have to worry about all the JVM bugs. ;-) good luck! -steve ___ 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 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] ZPatterns: Non-ZODB storage and Racks
It's determined by the radio button setting on the Storage tab. If you neglected to set it to "loaded by accessing attribute " and fill in the blank, then your objects have been stored in the ZODB, as well as in the RDBMS. Thanks. I set "loaded by accessing attribute" to the attribute "id". Storing items in the RDBMS works fine. But when I try to retrieve them with getPersistentItemIDs() nothing is returned? I have a skinsript method getCustomer: WITH getCustomerSQL(CUSTOMER_ID=self.id) COMPUTE id=CUSTOMER_ID, name=NAME and getCustomerSQL is a SQL method. Roché ___ 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 )