Re: [Zope-dev] ZPatterns and ZCLasses

2000-11-22 Thread Joachim Schmitz


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

2000-11-22 Thread Ender

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

2000-11-22 Thread Yves-Eric Martin

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

2000-11-22 Thread Steve Spicklemire


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!

2000-11-22 Thread Steve Spicklemire


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

2000-11-22 Thread Toby Dickenson

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

2000-11-22 Thread Chris McDonough

 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!

2000-11-22 Thread bentzion

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

2000-11-22 Thread Phillip J. Eby

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

2000-11-22 Thread Phillip J. Eby

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!

2000-11-22 Thread Phillip J. Eby

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

2000-11-22 Thread Michel Pelletier


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

2000-11-22 Thread Shane Hathaway

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

2000-11-22 Thread Simon Michael

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 )