[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