[Zope3-checkins] SVN: zope.testing/trunk/ - RENormalizing checkers can be combined via `` + `` now: ``checker1 +

Christian Zagrodnick cz at gocept.com
Sun Dec 6 06:21:57 EST 2009


Log message for revision 106221:
  - RENormalizing checkers can be combined via `` + `` now: ``checker1 +
  checker2`` creates a checker with the transformations of both checkers.
  
  

Changed:
  U   zope.testing/trunk/CHANGES.txt
  U   zope.testing/trunk/src/zope/testing/renormalizing.py

-=-
Modified: zope.testing/trunk/CHANGES.txt
===================================================================
--- zope.testing/trunk/CHANGES.txt	2009-12-06 11:13:14 UTC (rev 106220)
+++ zope.testing/trunk/CHANGES.txt	2009-12-06 11:21:57 UTC (rev 106221)
@@ -9,6 +9,9 @@
 
 - Cleaned up unused imports reported by pyflakes.
 
+- RENormalizing checkers can be combined via `` + `` now: ``checker1 +
+checker2`` creates a checker with the transformations of both checkers.
+
 3.8.3 (2009-09-21)
 ==================
 

Modified: zope.testing/trunk/src/zope/testing/renormalizing.py
===================================================================
--- zope.testing/trunk/src/zope/testing/renormalizing.py	2009-12-06 11:13:14 UTC (rev 106220)
+++ zope.testing/trunk/src/zope/testing/renormalizing.py	2009-12-06 11:21:57 UTC (rev 106221)
@@ -220,6 +220,28 @@
         + <BLANKLINE>
           options:
               -h    display this help message
+
+
+It is possible to combine RENormalizing checkers for easy reuse:
+
+    >>> address_and_time_checker = RENormalizing([
+    ...    (re.compile('[0-9]*[.][0-9]* seconds'), '<SOME NUMBER OF> seconds'),
+    ...    (re.compile('at 0x[0-9a-f]+'), 'at <SOME ADDRESS>'),
+    ...    ])
+    >>> lowercase_checker = RENormalizing([
+    ...    lambda s: s.lower(),
+    ...    ])
+    >>> combined_checker = address_and_time_checker + lowercase_checker
+    >>> len(combined_checker.transformers)
+    3
+
+Combining a checker with something else does not work:
+
+    >>> lowercase_checker + 5
+    Traceback (most recent call last):
+        ...
+    TypeError: unsupported operand type(s) for +: 'instance' and 'int'
+
 """
 
 import doctest
@@ -231,6 +253,11 @@
     def __init__(self, patterns):
         self.transformers = map(self._cook, patterns)
 
+    def __add__(self, other):
+        if not isinstance(other, RENormalizing):
+            return NotImplemented
+        return RENormalizing(self.transformers + other.transformers)
+
     def _cook(self, pattern):
         if callable(pattern):
             return pattern



More information about the Zope3-Checkins mailing list