[Checkins] SVN: RestrictedPython/trunk/ Filtered DeprecationWarnings when importing Python's ``sets`` module.

Tres Seaver tseaver at palladion.com
Tue Mar 17 12:46:58 EDT 2009


Log message for revision 98198:
  Filtered DeprecationWarnings when importing Python's ``sets`` module.
  
  Added tests for ``Utilities`` module.
  

Changed:
  U   RestrictedPython/trunk/CHANGES.txt
  U   RestrictedPython/trunk/setup.py
  U   RestrictedPython/trunk/src/RestrictedPython/Utilities.py
  A   RestrictedPython/trunk/src/RestrictedPython/tests/testUtiliities.py

-=-
Modified: RestrictedPython/trunk/CHANGES.txt
===================================================================
--- RestrictedPython/trunk/CHANGES.txt	2009-03-17 15:48:20 UTC (rev 98197)
+++ RestrictedPython/trunk/CHANGES.txt	2009-03-17 16:46:57 UTC (rev 98198)
@@ -1,6 +1,13 @@
 Changes
 =======
 
+After 3.5.0 (unreleased)
+------------------------
+
+- Added tests for ``Utilities`` module.
+
+- Filtered DeprecationWarnings when importing Python's ``sets`` module.
+
 3.5.0 (2009-02-09)
 ------------------
 

Modified: RestrictedPython/trunk/setup.py
===================================================================
--- RestrictedPython/trunk/setup.py	2009-03-17 15:48:20 UTC (rev 98197)
+++ RestrictedPython/trunk/setup.py	2009-03-17 16:46:57 UTC (rev 98198)
@@ -22,7 +22,7 @@
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
 
 setup(name='RestrictedPython',
-      version='3.5.0',
+      version='3.5.1dev',
       url='http://cheeseshop.python.org/pypi/RestrictedPython',
       license='ZPL 2.1',
       description='RestrictedPython provides a restricted execution '

Modified: RestrictedPython/trunk/src/RestrictedPython/Utilities.py
===================================================================
--- RestrictedPython/trunk/src/RestrictedPython/Utilities.py	2009-03-17 15:48:20 UTC (rev 98197)
+++ RestrictedPython/trunk/src/RestrictedPython/Utilities.py	2009-03-17 16:46:57 UTC (rev 98198)
@@ -13,8 +13,21 @@
 
 __version__='$Revision: 1.7 $'[11:-2]
 
-import string, math, random, sets
+import math
+import random
+import string
+import warnings
 
+_old_filters = warnings.filters[:]
+warnings.filterwarnings('ignore', category=DeprecationWarning)
+try:
+    try:
+        import sets
+    except ImportError:
+        sets = None
+finally:
+    warnings.filters[:] = _old_filters
+
 utility_builtins = {}
 
 utility_builtins['string'] = string
@@ -46,39 +59,47 @@
 utility_builtins['same_type'] = same_type
 
 def test(*args):
-    l=len(args)
-    for i in range(1, l, 2):
-        if args[i-1]: return args[i]
+    length = len(args)
+    for i in range(1, length, 2):
+        if args[i-1]:
+            return args[i]
 
-    if l%2: return args[-1]
+    if length % 2:
+        return args[-1]
 utility_builtins['test'] = test
 
 def reorder(s, with_=None, without=()):
     # s, with_, and without are sequences treated as sets.
     # The result is subtract(intersect(s, with_), without),
     # unless with_ is None, in which case it is subtract(s, without).
-    if with_ is None: with_=s
-    d={}
-    tt=type(())
-    for i in s:
-        if type(i) is tt and len(i)==2: k, v = i
-        else:                           k= v = i
-        d[k]=v
-    r=[]
-    a=r.append
-    h=d.has_key
+    if with_ is None:
+        with_ = s
+    orig = {}
+    for item in s:
+        if isinstance(item, tuple) and len(item) == 2:
+            key, value = item
+        else:
+            key = value = item
+        orig[key] = value
 
-    for i in without:
-        if type(i) is tt and len(i)==2: k, v = i
-        else:                           k= v = i
-        if h(k): del d[k]
+    result = []
 
-    for i in with_:
-        if type(i) is tt and len(i)==2: k, v = i
-        else:                           k= v = i
-        if h(k):
-            a((k,d[k]))
-            del d[k]
+    for item in without:
+        if isinstance(item, tuple) and len(item) == 2:
+            key, ignored = item
+        else:
+            key = item
+        if key in orig:
+            del orig[key]
 
-    return r
+    for item in with_:
+        if isinstance(item, tuple) and len(item) == 2:
+            key, ignored = item
+        else:
+            key = item
+        if key in orig:
+            result.append((key, orig[key]))
+            del orig[key]
+
+    return result
 utility_builtins['reorder'] = reorder

Added: RestrictedPython/trunk/src/RestrictedPython/tests/testUtiliities.py
===================================================================
--- RestrictedPython/trunk/src/RestrictedPython/tests/testUtiliities.py	                        (rev 0)
+++ RestrictedPython/trunk/src/RestrictedPython/tests/testUtiliities.py	2009-03-17 16:46:57 UTC (rev 98198)
@@ -0,0 +1,166 @@
+##############################################################################
+#
+# Copyright (c) 2009 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Run tests in README.txt
+"""
+import unittest
+
+class UtilitiesTests(unittest.TestCase):
+
+    def test_string_in_utility_builtins(self):
+        import string
+        from RestrictedPython.Utilities import utility_builtins
+        self.failUnless(utility_builtins['string'] is string)
+
+    def test_math_in_utility_builtins(self):
+        import math
+        from RestrictedPython.Utilities import utility_builtins
+        self.failUnless(utility_builtins['math'] is math)
+
+    def test_whrandom_in_utility_builtins(self):
+        import random
+        from RestrictedPython.Utilities import utility_builtins
+        self.failUnless(utility_builtins['whrandom'] is random)
+
+    def test_random_in_utility_builtins(self):
+        import random
+        from RestrictedPython.Utilities import utility_builtins
+        self.failUnless(utility_builtins['random'] is random)
+
+    def test_sets_in_utility_builtins_if_importable(self):
+        import warnings
+        from RestrictedPython.Utilities import utility_builtins
+        _old_filters = warnings.filters[:]
+        warnings.filterwarnings('ignore', category=DeprecationWarning)
+        try:
+            try:
+                import sets
+            except ImportError:
+                sets = None
+        finally:
+            warnings.filters[:] = _old_filters
+        self.failUnless(utility_builtins['sets'] is sets)
+
+    def test_DateTime_in_utility_builtins_if_importable(self):
+        try:
+            import DateTime
+        except ImportError:
+            pass
+        else:
+            from RestrictedPython.Utilities import utility_builtins
+            self.failUnless('DateTime' in utility_builtins)
+
+    def test_sequence_in_utility_builtins_if_importable(self):
+        try:
+            import DocumentTemplate.sequence
+        except ImportError:
+            pass
+        else:
+            from RestrictedPython.Utilities import utility_builtins
+            self.failUnless('sequence' in utility_builtins)
+
+    def test_same_type_in_utility_builtins(self):
+        from RestrictedPython.Utilities import same_type
+        from RestrictedPython.Utilities import utility_builtins
+        self.failUnless(utility_builtins['same_type'] is same_type)
+
+    def test_test_in_utility_builtins(self):
+        from RestrictedPython.Utilities import test
+        from RestrictedPython.Utilities import utility_builtins
+        self.failUnless(utility_builtins['test'] is test)
+
+    def test_reorder_in_utility_builtins(self):
+        from RestrictedPython.Utilities import reorder
+        from RestrictedPython.Utilities import utility_builtins
+        self.failUnless(utility_builtins['reorder'] is reorder)
+
+    def test_sametype_only_one_arg(self):
+        from RestrictedPython.Utilities import same_type
+        self.failUnless(same_type(object()))
+
+    def test_sametype_only_two_args_same(self):
+        from RestrictedPython.Utilities import same_type
+        self.failUnless(same_type(object(), object()))
+
+    def test_sametype_only_two_args_different(self):
+        from RestrictedPython.Utilities import same_type
+        class Foo(object):
+            pass
+        self.failIf(same_type(object(), Foo()))
+
+    def test_sametype_only_multiple_args_same(self):
+        from RestrictedPython.Utilities import same_type
+        self.failUnless(same_type(object(), object(), object(), object()))
+
+    def test_sametype_only_multipe_args_one_different(self):
+        from RestrictedPython.Utilities import same_type
+        class Foo(object):
+            pass
+        self.failIf(same_type(object(), object(), Foo()))
+
+    def test_test_single_value_true(self):
+        from RestrictedPython.Utilities import test
+        self.failUnless(test(True))
+
+    def test_test_single_value_False(self):
+        from RestrictedPython.Utilities import test
+        self.failIf(test(False))
+
+    def test_test_even_values_first_true(self):
+        from RestrictedPython.Utilities import test
+        self.assertEqual(test(True, 'first', True, 'second'), 'first')
+
+    def test_test_even_values_not_first_true(self):
+        from RestrictedPython.Utilities import test
+        self.assertEqual(test(False, 'first', True, 'second'), 'second')
+
+    def test_test_odd_values_first_true(self):
+        from RestrictedPython.Utilities import test
+        self.assertEqual(test(True, 'first', True, 'second', False), 'first')
+
+    def test_test_odd_values_not_first_true(self):
+        from RestrictedPython.Utilities import test
+        self.assertEqual(test(False, 'first', True, 'second', False), 'second')
+
+    def test_test_odd_values_last_true(self):
+        from RestrictedPython.Utilities import test
+        self.assertEqual(test(False, 'first', False, 'second', 'third'),
+                         'third')
+
+    def test_test_odd_values_last_false(self):
+        from RestrictedPython.Utilities import test
+        self.assertEqual(test(False, 'first', False, 'second', False), False)
+
+    def test_reorder_with__None(self):
+        from RestrictedPython.Utilities import reorder
+        before = ['a', 'b', 'c', 'd', 'e']
+        without = ['a', 'c', 'e']
+        after = reorder(before, without=without)
+        self.assertEqual(after, [('b', 'b'), ('d', 'd')])
+
+    def test_reorder_with__not_None(self):
+        from RestrictedPython.Utilities import reorder
+        before = ['a', 'b', 'c', 'd', 'e']
+        with_ = ['a', 'd']
+        without = ['a', 'c', 'e']
+        after = reorder(before, with_=with_, without=without)
+        self.assertEqual(after, [('d', 'd')])
+
+def test_suite():
+    return unittest.TestSuite((
+        unittest.makeSuite(UtilitiesTests),
+        ))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')
+



More information about the Checkins mailing list