[Python-checkins] r61587 - in python/trunk: Lib/test/test_future_builtins.py Lib/test/test_py3kwarn.py Modules/future_builtins.c Modules/itertoolsmodule.c

david.wolever python-checkins at python.org
Wed Mar 19 03:35:46 CET 2008


Author: david.wolever
Date: Wed Mar 19 03:35:45 2008
New Revision: 61587

Modified:
   python/trunk/Lib/test/test_future_builtins.py
   python/trunk/Lib/test/test_py3kwarn.py
   python/trunk/Modules/future_builtins.c
   python/trunk/Modules/itertoolsmodule.c
Log:
Added zip, map, filter to future_bultins (#2171)



Modified: python/trunk/Lib/test/test_future_builtins.py
==============================================================================
--- python/trunk/Lib/test/test_future_builtins.py	(original)
+++ python/trunk/Lib/test/test_future_builtins.py	Wed Mar 19 03:35:45 2008
@@ -1,7 +1,8 @@
 import test.test_support, unittest
 
 # we're testing the behavior of these future builtins:
-from future_builtins import hex, oct
+from future_builtins import hex, oct, map, zip, filter
+from test import test_support
 
 class BuiltinTest(unittest.TestCase):
     def test_hex(self):
@@ -20,6 +21,17 @@
         self.assertEqual(oct(-100L), '-0o144')
         self.assertRaises(TypeError, oct, ())
 
+    def test_itertools(self):
+        from itertools import imap, izip, ifilter
+        # We will assume that the itertools functions work, so provided
+        # that we've got identical coppies, we will work!
+        self.assertEqual(map, imap)
+        self.assertEqual(zip, izip)
+        self.assertEqual(filter, ifilter)
+        # Testing that filter(None, stuff) raises a warning lives in
+        # test_py3kwarn.py
+
+
 def test_main(verbose=None):
     test.test_support.run_unittest(BuiltinTest)
 

Modified: python/trunk/Lib/test/test_py3kwarn.py
==============================================================================
--- python/trunk/Lib/test/test_py3kwarn.py	(original)
+++ python/trunk/Lib/test/test_py3kwarn.py	Wed Mar 19 03:35:45 2008
@@ -50,6 +50,17 @@
         with catch_warning() as w:
             self.assertWarning(cell0 < cell1, w, expected)
 
+    def test_filter(self):
+        from itertools import ifilter
+        from future_builtins import filter
+        expected = 'ifilter with None as a first argument is not supported '\
+                   'in 3.x.  Use a list comprehension instead.'
+
+        with catch_warning() as w:
+            self.assertWarning(ifilter(None, []), w, expected)
+        with catch_warning() as w:
+            self.assertWarning(filter(None, []), w, expected)
+
     def test_code_inequality_comparisons(self):
         expected = 'code inequality comparisons not supported in 3.x.'
         def f(x):

Modified: python/trunk/Modules/future_builtins.c
==============================================================================
--- python/trunk/Modules/future_builtins.c	(original)
+++ python/trunk/Modules/future_builtins.c	Wed Mar 19 03:35:45 2008
@@ -59,11 +59,24 @@
 PyMODINIT_FUNC
 initfuture_builtins(void)
 {
-	PyObject *m;
+	PyObject *m, *itertools, *iter_func;
+	char *it_funcs[] = {"imap", "ifilter", "izip", NULL};
+	char **cur_func;
 
 	m = Py_InitModule3("future_builtins", module_functions, module_doc);
 	if (m == NULL)
 		return;
 
+	itertools = PyImport_ImportModuleNoBlock("itertools");
+	if (itertools == NULL)
+		return;
+
+	for (cur_func = it_funcs; *cur_func; ++cur_func){
+		iter_func = PyObject_GetAttrString(itertools, *cur_func);
+		if (iter_func == NULL)
+			return;
+		PyModule_AddObject(m, *cur_func+1, iter_func);
+	}
+	Py_DECREF(itertools);
 	/* any other initialization needed */
 }

Modified: python/trunk/Modules/itertoolsmodule.c
==============================================================================
--- python/trunk/Modules/itertoolsmodule.c	(original)
+++ python/trunk/Modules/itertoolsmodule.c	Wed Mar 19 03:35:45 2008
@@ -2542,7 +2542,7 @@
 	ifilterobject *lz;
 
 	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, 
+	    PyErr_Warn(PyExc_DeprecationWarning,
 		       "In 3.x, itertools.ifilter() was moved to builtin filter().") < 0)
 		return NULL;
 
@@ -2552,6 +2552,15 @@
 	if (!PyArg_UnpackTuple(args, "ifilter", 2, 2, &func, &seq))
 		return NULL;
 
+	if (func == Py_None) {
+		if (Py_Py3kWarningFlag &&
+		    PyErr_Warn(PyExc_DeprecationWarning,
+			       "ifilter with None as a first argument "
+			       "is not supported in 3.x.  Use a list "
+			       "comprehension instead.") < 0)
+			return NULL;
+	}
+
 	/* Get iterator. */
 	it = PyObject_GetIter(seq);
 	if (it == NULL)
@@ -3602,7 +3611,7 @@
 		&izip_type,
 		&iziplongest_type,
 		&permutations_type,
-		&product_type,         
+		&product_type,
 		&repeat_type,
 		&groupby_type,
 		NULL


More information about the Python-checkins mailing list