Author: mark
Date: 2008-08-12 06:43:48 -0600 (Tue, 12 Aug 2008)
New Revision: 3544

Modified:
   FormEncode/trunk/formencode/compound.py
Log:
first implementation of Pipe() as deviation from All()

Modified: FormEncode/trunk/formencode/compound.py
===================================================================
--- FormEncode/trunk/formencode/compound.py     2008-08-12 12:39:35 UTC (rev 
3543)
+++ FormEncode/trunk/formencode/compound.py     2008-08-12 12:43:48 UTC (rev 
3544)
@@ -5,7 +5,7 @@
 from api import *
 
 # @@ ianb 2005-05: should CompoundValidator be included?
-__all__ = ['Any', 'All']
+__all__ = ['Any', 'All', 'Pipe']
 
 ############################################################
 ## Compound Validators
@@ -169,3 +169,46 @@
     def is_empty(self, value):
         # sub-validators should handle emptiness.
         return False
+
+class Pipe(All):
+    """
+    This class works like 'All', all validators muss pass, but the result
+    of one validation pass is handled over to the next validator. A behaviour
+    known to Unix and GNU users as 'pipe'.
+
+    ::
+
+        >>> from validators import DictConverter
+        >>> pv = Pipe(validators=[DictConverter({1: 2}), DictConverter({2: 
3}), DictConverter({3: 4})])
+        >>> pv.to_python(1)
+        4
+        >>> pv.to_python(1)
+        4
+        >>> pv.from_python(4)
+        1
+        >>> pv.from_python(4)
+        1
+        >>> pv.to_python(1)
+        4
+
+    """
+
+    def __repr__(self):
+        return '<Pipe %s>' % self.validators
+
+    def attempt_convert(self, value, state, validate):
+        # To preserve the order of the transformations, we do them
+        # differently when we are converting to and from python.
+        if validate is from_python:
+            validators = list(self.validators)
+            validators.reverse()
+        else:
+            validators = self.validators
+        try:
+            for validator in validators:
+                value = validate(validator, value, state)
+            return value
+        except Invalid:
+            if self.if_invalid is NoDefault:
+                raise
+            return self.if_invalid


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
FormEncode-CVS mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/formencode-cvs

Reply via email to