-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Wichert Akkerman wrote: > Previously Christian Theune wrote: >> Hi, >> >> Am Montag, den 20.08.2007, 08:59 -0400 schrieb Fred Drake: >>> On 8/20/07, Christian Zagrodnick <[EMAIL PROTECTED]> wrote: >>>> I think we should add a function to validate a given schema on a given >>>> class. This should include constraints and invariants: >>> I do presume you mean object, rather than class, as your example implies. >>> >>>> validateSchema(IMySchema, myobject) [or alike] >>> +1 >>> >>>> I'm not sure about return values or exceptions. There are different use >>>> cases: >>>> >>>> 1. Is the object valid? -> True/False >>>> 2. What's wrong with the object -> {attribute/field-name: what's >>>> wrong}, what's wrong with invariants. >>> There should probably be a specific exception that's defined for this >>> purpose, and it could directly support the mapping interface to allow >>> detailed information to be extracted. I suspect a common use would be >>> to simply verify the object and raise the exception in the invalid >>> case, denying whatever operation was being attempted. >>> >>> This also suggests that there's no interesting return value; either >>> the exception is raised or it isn't. Code that wants to introspect >>> the exception can catch that and act accordingly. >> >From my latest experience and research of when to use exceptions and >> when to use return values I'd say let's not use an exception. >> >> The report of "which fields are wrong" is the normal result of this >> function. Invalid data is not an uncommon output, rather, it's the sole >> purpose of this function. An exception should be raised if the >> validation could not be performed. >> >> The result could be a structure that lists all errors. Eventually a >> result that equals False could be used to signal no errors, e.g. an >> empty dict or an empty list. > > That would be confusing though: I would expect the result of a method > that checks validaty to return something that evaluates to True if > everything is valid. Code like this just messes up my brain: > > if not zope.schema.validate(obj, IMySchema): > print "Everything validates correctly!" > > to me that is very non-intuitive and looks like the if condition is > incorrect.
Returning boolean discards the information which only this function should know, and which the caller (potentially) needs: the list of errors. The name 'validate' doesn't imply a boolean return to me at all. I would expect to see it used as follows:: errors = zope.schema.validate(obj, IMySchema) if not errors: print 'OK else: print 'Errors: \n%s' % '\n'.join([str(x) for x in errors]) Tres. - -- =================================================================== Tres Seaver +1 540-429-0999 [EMAIL PROTECTED] Palladion Software "Excellence by Design" http://palladion.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGyaBB+gerLs4ltQ4RAjDQAJ9e1gY/MxrAF7dOpTcATtQPjLAQ7gCgqy4X 2QztzPecPxDIKEqfvJUr0AI= =IxRz -----END PGP SIGNATURE----- _______________________________________________ Zope3-dev mailing list Zope3-dev@zope.org Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com