Re: [Zope-dev] ZPatterns and ZCLasses
On Tue, 21 Nov 2000, Phillip J. Eby wrote: At 11:08 AM 11/21/00 +0100, Joachim Schmitz wrote: I have an existing ZClass/Data Structure like this RecruitingPlatform Company Recruiting Candidates Student Profiles Address Highschool IT Jobprefs ... I want to store the data in the ZClass instances, must each ZClass have the Base class _ZClass_for_DataSkin and do I need a Rack for each class ? If you are storing dataskins in a regular folder hierarchy (or other persistent hierarchy), you don't need racks. You just need a Folder w/Customization support in the objects' acquisition hierarchy. Of course, if you don't need DataSkin-ish behavior (i.e. triggers and attribute providers), you don't need the FwCS either. DataSkins stored outside of Racks will "pretend" to be ordinary persistent Zope objects if they can't find an appropriate Customizer. That is, they act like regular Zope objects, only it takes them more work because they're pretending. :) I created a FwCS and in it a customizer, but in my list of to customize object types are only meta_types listed, which have the Base class "_ZClass_for_DataSkin",. Is this a requirement, and if yes, is there a way to add this to existing ZClasses ? Mit freundlichen Grüßen Joachim Schmitz AixtraWare, Ing. Büro für Internetanwendungen Hüsgenstr. 33a, D-52457 Aldenhoven Telefon: +49-2464-8851, FAX: +49-2464-905163 ___ 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] Conflict Errors
Chris Withers wrote: i'm no expert but deeply nested data structures in a single object are rife with possibilities for conflict errors. if data might be changing concurrently in the structures or frequently changing you would be better off to switch the structure to nested persistent objects. No, for once it has nothing to do with the catalog. ;-) This is a python product of ours that stores lots of data in somewhat nested, persistent dictionaries. How can this be improved so this doesn't happen? I know your next questions are going to be "why?" and "how do I fix it?" and "why don't you fix it?". While I'd love it if you'd fix our code for free, it's probably beyond the OSS remit ;-) Any clues about how to make our code 'less bad' would be cool... cheers, Chris ___ 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 )
[Zope-dev] Interface localization: zzLocale 0-0-4a release
Hello, Since the SkinnableAndLocalizable project is on hold, and since people here in Japan and other non-english speaking countries have repeatedly expressed their wish for localized versions of Zope, I decided to continue zzLocale development and turn it into an actually usable Product. Here is a big step towards it: zzLocale release 0-0-4a. zzLocale is a Zope locale support Product that provides a framework for Zope interface internationalization. Main new features are: o New failover code that should break less stuff (previous version broke various Products, like ZGadflyDA or LoginManager. All reported broken Products are now working) o Localization of management tabs o Localization of buttons (all should work now). o Fixed hideous bug that prevented uninstall Altogether, this should hopefully make this version actually usable: a few things are still not internationalized (like MessageDialogs), but it should *work*. Please email me if you can still find things that break when using zzLocale. Download urls: from zope.org: http://www.zope.org/Members/yemartin/zzLocale from zope.ne.jp: http://www.zope.ne.jp/users/yemartin/zzLocale Note that no actual localization file is provided with this release. Language packs will be made available as we receive translations. (If you have a few hours to kill, how about translating Zope into your mother tongue (if it is not English)? ;) ). Cheers, -- Yves-Eric Martin Digital Garage Inc. [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] ZPatterns: Methods of specialits
Hi Roch'e, I'm guessing that getAllContactsForCustomer is a "DTML Method". If I remember correctly the third argument is a 'mapping object' that can be used to augment the effective namespace available to the method. Passing _.None should do nothing (I'm guessing you could just use "getAllContactsForCustomer( this(), _ )" and it would work just fine. This issue has been pretty much hashed to death here in the past. There is even a fishbowl proposal to 'fix it'. http://dev.zope.org/Wikis/DevSite/Proposals/NamespacePassingRevisited -steve "Roch'e" == Roch'e Compaan [EMAIL PROTECTED] writes: Roch'e I have a specialist Contacts and for Contacts I have a Roch'e method getAllContactsForCustomer. Whenever I want to call Roch'e this method I have to pass on the whole namespace and the Roch'e object itself to get it to work eg: Roch'e getAllContactsForCustomer(this(), _, _.None). Why is this Roch'e the case? And what does _.None actually mean? Roch'e 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 Project Help!
Hi Ben, GAPs are sort of deprecated at this point in favor of SkinScript. In SkinScript you might do something like this: WITH accounts.getItem(self.account_id) COMPUTE account_object=RESULT or more carefully... WITH accounts.getItem(self.account_id) COMPUTE account_object=(RESULT is _.None) and NOT_FOUND or RESULT -steve "bentzion" == bentzion [EMAIL PROTECTED] writes: bentzion Another question... bentzion I want to have a GAP that will add some other Object to bentzion an attribute of my DataSkin. This is what I have tried bentzion with no success. bentzion fromexpr: accounts.getItem(self.account_id) attrsexprs: bentzion account_object=RESULT bentzion This way in my UI Methods in my DataSkin I can access bentzion (and change) the attributes of "account_object". bentzion Q. How can I do this? Should I be doing this in a bentzion different/better way? bentzion Thanks, -Ben ___ 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] Conflict Errors
On Tue, 21 Nov 2000 17:03:17 +, Chris Withers [EMAIL PROTECTED] wrote: It happens when more than one thread tries to modify the same object in storage at the same time. It's Zope's equivalent of record-locking... It's normal. There's no corruption or anything, it's telling you that it avoided a write that might have caused problems. Zope tries three times to retry the write. If the object is still locked by another database connection after three writes, it propogates the exception up to the app level. That's the error you see. Hurm, well, it appears to happen when we're doing a lot of sequential write to a product (automated bulk data upload), but the thing that triggers it off is actually trying to read a page from the same area of the site... confusing. Although that could also be a one-off coincidence... ZODB marks each persistent object that is modified during a transaction. Before committing, it checks whether any of those objects have been modified-and-commited in another transaction. If it has, it raises a ConflictError. If your 'page read' really doesnt modify any objects (check your undo log, or use tranalyzer) then it cant cause a ConflictError. You say no corruption or anything, but if a submit results in that error, does the submitted form data get processed or not? As Chris explianed, the publisher will retry up to three ConflictErrors. If you see this message only in a log then it probably suceeded on one of those retries. If you see it in a traceback returned over http then the transaction has been aborted. No corruption, however your request has not been processed. Careful application coding can reduce the chance of conflict errors. Can you describe what you mean by careful application coding? "Minimise the chance of a single persistent object being modified by two concurrent transactions." Some examples: 1. The much-maligned ZODB-page-hit-counter is bad in this respect. Each 'read' of a page modifies the counter object, causing the second concurrent read (which is actually a write) to raise ConflictError. 2. Folder objects are pretty good, although you cant concurrently add two objects to a folder since both transactions modify the folder object. 3. If you need something folderlike with a higher hit rate, it is possible to avoid some conflicts by splitting the folder. For example, having one sub-folder for each initial letter of the id. You can add objects 'chrisw' and 'tdickenson' concurrently (into subfolders with the id 'c' and 't'), however concurrently adding 'chrisw' and 'chrism' would cause one ConflictErrorm because they both modify the sub-folder 'c'. (BTreeFolders have the same advantage, for the same reason, only neater) Toby Dickenson [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] Conflict Errors
Hurm, well, it appears to happen when we're doing a lot of sequential write to a product (automated bulk data upload), but the thing that triggers it off is actually trying to read a page from the same area of the site... confusing. Although that could also be a one-off coincidence... Conflict errors can be raised by three things: the storage, the transaction, and the connection. The storage will only raise the conflict error on a write, this is for sure. The transaction and the connection objects I looked at a little today, and it's unclear .. although as I understand it, the idea of a ConflictError is to prevent the modification of an object by two threads at the same time, and should have nothing to do with reads. You say no corruption or anything, but if a submit results in that error, does the submitted form data get processed or not? No... the transaction is aborted... Careful application coding can reduce the chance of conflict errors. Can you describe what you mean by careful application coding? Ah I knew I wasn't gonna get away with that one. ;-) I probably shoulda kept my mouth shut. If you're writing a ZODB-based app that uses multiple database connections (like Zope ;-), you should take care to stagger high-load writes against an object in the threads that use those database connections. The ZODB tries hard to avoid error conditions for you by retrying conflicting writes, but if you really pound the snot out of a particular object, it'll let you know. That said, I doubt I can be more specific, because to be honest I don't know the *real* answer myself. Sigh. I think I need to learn more about pickling (to figure out how the objects get split up into component pieces) and step through a real-world ConflictError situation. Neither of which I have time to do right now... sorry, Chris. I bet it happens on a catalog write for you. No, for once it has nothing to do with the catalog. ;-) This is a python product of ours that stores lots of data in somewhat nested, persistent dictionaries. How can this be improved so this doesn't happen? Can you replicate the error on demand? Or is it intermittent? This should be something covered in developer docs (along with a zillion other things). I suppose a gross hack would be to raise the number of write retries on conflicts in the ZODB code if you didn't want to analyze your app code. But y'know, as I think more about it, I'm afraid I'm gonna need to bail on this one by saying "I don't know" because it's one of those things where learning exactly what is going on can chew up time like nobody's business, because I'd need to step through the code line-by-line. I shouldn't even be in here. :-( Sorry, C ___ 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 Project Help!
Thanks for answering Steve. Unfortunitly I am working with version 0.3 of ZPatterns so I have to use GAP. When I try to translate your Skinscript into GAP like this "attrsexprs:account_object=(RESULT is _.None) and NOT_FOUND or RESULT" and I try to access the object's id with dtml-var "account_object.id" I get a "NameError" on account_object. Alternativly if I do dtml-var account_object I get a "KeyError". (BTW. for testing I used "accounts.getItem('1434')" which is a valid object. If I do "account_object=RESULT.id" it works fine.) I appreciate any help on this. -Ben Hi Ben, GAPs are sort of deprecated at this point in favor of SkinScript. In SkinScript you might do something like this: WITH accounts.getItem(self.account_id) COMPUTE account_object=RESULT or more carefully... WITH accounts.getItem(self.account_id) COMPUTE account_object=(RESULT is _.None) and NOT_FOUND or RESULT -steve "bentzion" == bentzion [EMAIL PROTECTED] writes: bentzion Another question... bentzion I want to have a GAP that will add some other Object to bentzion an attribute of my DataSkin. This is what I have tried ___ 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 and ZCLasses
At 10:29 AM 11/22/00 +0100, Joachim Schmitz wrote: I created a FwCS and in it a customizer, but in my list of to customize object types are only meta_types listed, which have the Base class "_ZClass_for_DataSkin",. Is this a requirement, and if yes, is there a way to add this to existing ZClasses ? It is a requirement. The only way to add it (or any other base class) to existing ZClasses is to use the "setbasesholdontoyourbutts" hack, which I have never done, but a search of the mailing list or Zope site might reveal the technique. ___ 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: Methods of specialits
At 12:41 PM 11/22/00 +0200, Roch'e Compaan wrote: I have a specialist Contacts and for Contacts I have a method getAllContactsForCustomer. Whenever I want to call this method I have to pass on the whole namespace and the object itself to get it to work eg: getAllContactsForCustomer(this(), _, _.None). Why is this the case? And what does _.None actually mean? If your method is a DTML method or document, it does not automatically supply a "self", so currently you must call such methods in a specialist like this: Specialist.someDTMLthing(Specialist,_,...) Where "..." represents any other arguments you wish to pass the method. (They must be passed as keyword arguments.) This is a DTML issue, not a ZPatterns one. Hopefully, in later versions of Zope, if method binding is standardized across DTML, Python, etc. method objects, then you will be able to avoid this issue by setting binding settings on the method object itself. ___ 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 Project Help!
At 10:21 AM 11/22/00 -0500, [EMAIL PROTECTED] wrote: Thanks for answering Steve. Unfortunitly I am working with version 0.3 of ZPatterns so I have to use GAP. When I try to translate your Skinscript into GAP like this "attrsexprs:account_object=(RESULT is _.None) and NOT_FOUND or RESULT" and I try to access the object's id with dtml-var "account_object.id" I get a "NameError" on account_object. Alternativly if I do dtml-var account_object I get a "KeyError". (BTW. for testing I used "accounts.getItem('1434')" which is a valid object. If I do "account_object=RESULT.id" it works fine.) Perhaps this is a security issue? When you set account_object=RESULT.id, then the account_object attribute is a string, and has no security protection from access by DTML. When it is an object, however, your DTML must have permissions to the object itself. I am not positive, but I think ZPatterns 0.3 may have executed GAP expressions as the superuser, so it may be that your GAP is able to access the object, but not the DTML which is using the DataSkin. ___ 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] Interface localization: zzLocale 0-0-4a release
Can we see a screenshot of what the Zope managment interface looks like in Japanese? (just a personal curiousity) -Michel Yves-Eric Martin wrote: Hello, Since the SkinnableAndLocalizable project is on hold, and since people here in Japan and other non-english speaking countries have repeatedly expressed their wish for localized versions of Zope, I decided to continue zzLocale development and turn it into an actually usable Product. Here is a big step towards it: zzLocale release 0-0-4a. zzLocale is a Zope locale support Product that provides a framework for Zope interface internationalization. Main new features are: o New failover code that should break less stuff (previous version broke various Products, like ZGadflyDA or LoginManager. All reported broken Products are now working) o Localization of management tabs o Localization of buttons (all should work now). o Fixed hideous bug that prevented uninstall Altogether, this should hopefully make this version actually usable: a few things are still not internationalized (like MessageDialogs), but it should *work*. Please email me if you can still find things that break when using zzLocale. Download urls: from zope.org: http://www.zope.org/Members/yemartin/zzLocale from zope.ne.jp: http://www.zope.ne.jp/users/yemartin/zzLocale Note that no actual localization file is provided with this release. Language packs will be made available as we receive translations. (If you have a few hours to kill, how about translating Zope into your mother tongue (if it is not English)? ;) ). Cheers, -- Yves-Eric Martin Digital Garage Inc. [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 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] ANNOUNCE: PartitionedFileStorage
For all who are interested in breaking database size barriers without moving to Oracle or Berkeley Storage, here's something to try out. http://www.zope.org/Members/hathawsh/PartitionedFileStorage I *highly* recommend you back up Data.fs before installing. What is known to work: - Reads and writes of logical files greater than 3 GB on versions of Linux that support only 2 GB files. - Undo and packing. - Fast random reads and writes. - Using simple binary concatenation to move back to a standard single file. - Using PartitionedFile completely independent of Zope or ZODB. What has not been tested, but will very likely work: - Tranalyzer. - Putting the partitions on different physical devices. (Poor man's RAID :-) ) What couldn't be tested by my limited resources: - Platforms other than Linux. - Running this on a busy Zope site. (No, www.zope.org is not running PartitionedFileStorage. :-) ) BTW to all in the U.S., Happy Thanksgiving! Shane ___ 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] zwiki ZUnit support added
This is great, Lalo! Thanks. I checked in ZUnit support to ZWiki-cvs, and the first couple of unit tests. Suddenly, I feel all Extreme! FWIW, here's how I run the tests. I made a TestRunner called ZWikiTests, pointing to "Products.ZWiki.TestSuite". I have these rules in a makefile: unit-test test: @wget -nv 'http://username:password@localhost:port/ZWikiTests/manage_startTests' -O TESTOUTPUT @cat TESTOUTPUT refresh: @wget --spider -nv 'http://username:password@localhost:port/Control_Panel/Products/ZWiki/manage_refresh?performRefresh=1quickRefresh=1' After making some changes to the product files, I make refresh test 200 OK 14:03:17 URL:http://username:password@localhost:port/ZWikiTests/manage_startTests [34] - "TESTOUTPUT" [1] . . . Time: 1.329s OK (3 tests) This rocks. In fact, as I ran the above it caught a typo in ZWiki/Tests.py which otherwise you all would have had to deal with. -Simon ___ 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 )