From: Jens K. <ye...@us...> - 2005-02-08 12:04:24
|
Update of /cvsroot/collective/LindeMerkur In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6055 Modified Files: validators.py version.txt Log Message: added DTMLValidator and other nice faetures Index: version.txt =================================================================== RCS file: /cvsroot/collective/LindeMerkur/version.txt,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- version.txt 4 Feb 2005 18:59:09 -0000 1.11 +++ version.txt 8 Feb 2005 12:03:42 -0000 1.12 @@ -1 +1 @@ -0.1 build 36 +0.1 build 37 Index: validators.py =================================================================== RCS file: /cvsroot/collective/LindeMerkur/validators.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- validators.py 3 Feb 2005 16:07:13 -0000 1.1 +++ validators.py 8 Feb 2005 12:03:42 -0000 1.2 @@ -1,19 +1,44 @@ #------------------------------------------------------------------------------ # Name: validators.py -# Purpose: adding ZPT validation to Archetypes string and lines fields +# Purpose: adding TALES/ZPT/DTML/Script validation to Archetypes fields # # Author: Daniel Nouri <dan...@co...> -# Copy from: PloneFormMailer +# Jens Klein <jen...@je...> +# copy from: PloneFormMailer, http://sf.net/projects/collective # # Created: 2004-01-28 # RCS-ID: $Id$ -# Copyright: (c) 2004 by Daniel Nouri, Austria +# Copyright: (c) 2004-2005 by Daniel Nouri, Austria and +# Klein & Partner KEG, Austria # Licence: GNU General Public Licence (GPL) Version 2 or later #------------------------------------------------------------------------------ from Products.validation import validation, interfaces +from Products.CMFCore import Expression +from Products.PageTemplates import TALES from Products.PageTemplates.PageTemplate import PageTemplate +from DocumentTemplate import HTML as DTHTML +from DocumentTemplate.DT_Util import ParseError + +class TALESValidator: + __implements__ = (interfaces.ivalidator,) + + name = 'talesvalidator' + + def __call__(self, value, *args, **kwargs): + if type(value) != type([]) and type(value) != type(()): + value=(value,) + for expr in value: + try: + if expr.strip(): + Expression.Expression(expr) + except TALES.CompilerError, e: + return 'TALES expression "%s" has errors.' % expr + return 1 + +validation.register(TALESValidator()) + class ZPTValidator: @@ -30,3 +55,20 @@ return 1 validation.register(ZPTValidator()) + + +class DTMLValidator: + + __implements__ = (interfaces.ivalidator,) + + name = 'dtmlvalidator' + + def __call__(self, value, *args, **kwargs): + dt = DTHTML() + try: + dt.parse(value) + except ParseError, e: + return e + return 1 + +validation.register(DTMLValidator()) |