[Python-checkins] r73846 - in python/trunk: Lib/test/test_py3kwarn.py Modules/operator.c

alexandre.vassalotti python-checkins at python.org
Sun Jul 5 06:22:45 CEST 2009


Author: alexandre.vassalotti
Date: Sun Jul 5 06:22:40 2009
New Revision: 73846
Log:
Issue 2370: Add Python 3 warnings for the removal of operator.isCallable and
operator.sequenceIncludes.
Patch contributed by Jeff Balogh (and updated slightly by me).
Modified:
 python/trunk/Lib/test/test_py3kwarn.py
 python/trunk/Modules/operator.c
Modified: python/trunk/Lib/test/test_py3kwarn.py
==============================================================================
--- python/trunk/Lib/test/test_py3kwarn.py	(original)
+++ python/trunk/Lib/test/test_py3kwarn.py	Sun Jul 5 06:22:40 2009
@@ -279,6 +279,18 @@
 def __hash__(self): pass
 self.assertEqual(len(w.warnings), 0)
 
+ def test_operator(self):
+ from operator import isCallable, sequenceIncludes
+
+ expected_ = ("operator.isCallable() is not supported in 3.x. "
+ "Use hasattr(obj, '__call__').")
+ seq_warn = ("operator.sequenceIncludes() is not supported "
+ "in 3.x. Use operator.contains().")
+ with check_warnings() as w:
+ self.assertWarning(isCallable(self), w, callable_warn)
+ w.reset()
+ self.assertWarning(sequenceIncludes(range(3), 2), w, seq_warn)
+
 
 class TestStdlibRemovals(unittest.TestCase):
 
Modified: python/trunk/Modules/operator.c
==============================================================================
--- python/trunk/Modules/operator.c	(original)
+++ python/trunk/Modules/operator.c	Sun Jul 5 06:22:40 2009
@@ -65,7 +65,26 @@
 if(! PyArg_UnpackTuple(a,#OP,2,2,&a1,&a2)) return NULL; \
 return PyObject_RichCompare(a1,a2,A); }
 
-spami(isCallable , PyCallable_Check)
+/* Deprecated operators that need warnings. */
+static int
+op_isCallable(PyObject *x)
+{
+	if (PyErr_WarnPy3k("operator.isCallable() is not supported in 3.x. "
+			 "Use hasattr(obj, '__call__').", 1) < 0)
+		return -1;
+	return PyCallable_Check(x);
+}
+
+static int
+op_sequenceIncludes(PyObject *seq, PyObject* ob)
+{
+	if (PyErr_WarnPy3k("operator.sequenceIncludes() is not supported "
+			 "in 3.x. Use operator.contains().", 1) < 0)
+		return -1;
+	return PySequence_Contains(seq, ob);
+}
+
+spami(isCallable , op_isCallable)
 spami(isNumberType , PyNumber_Check)
 spami(truth , PyObject_IsTrue)
 spam2(op_add , PyNumber_Add)
@@ -104,7 +123,7 @@
 spam2(op_iconcat , PySequence_InPlaceConcat)
 spamoi(op_irepeat , PySequence_InPlaceRepeat)
 spami2b(op_contains , PySequence_Contains)
-spami2b(sequenceIncludes, PySequence_Contains)
+spami2b(sequenceIncludes, op_sequenceIncludes)
 spamn2(indexOf , PySequence_Index)
 spamn2(countOf , PySequence_Count)
 spami(isMappingType , PyMapping_Check)


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /