]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-38371: Tkinter: deprecate the split() method. (GH-16584)
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 8 Oct 2019 11:31:35 +0000 (14:31 +0300)
committerGitHub <noreply@github.com>
Tue, 8 Oct 2019 11:31:35 +0000 (14:31 +0300)
Doc/whatsnew/3.9.rst
Lib/test/test_tcl.py
Misc/NEWS.d/next/Library/2019-10-04-18-39-59.bpo-38371.S6Klvm.rst [new file with mode: 0644]
Modules/_tkinter.c

index 9f2a659a9dca75afa1b56f0c4fdde83360b5f321..6b4abc0567c30eebfee78aed7e635bdc3f8e2707 100644 (file)
@@ -191,6 +191,11 @@ Deprecated
   the module will restrict its seeds to :const:`None`, :class:`int`,
   :class:`float`, :class:`str`, :class:`bytes`, and :class:`bytearray`.
 
+* Deprecated the ``split()`` method of :class:`_tkinter.TkappType` in
+  favour of the ``splitlist()`` method which has more consistent and
+  predicable behavior.
+  (Contributed by Serhiy Storchaka in :issue:`38371`.)
+
 
 Removed
 =======
index 3183ea850f73b77c2b9ed20eeac547a5d90185bf..1c5b9cf2bd2a8367d24e134f234a5c0691120944 100644 (file)
@@ -3,6 +3,7 @@ import re
 import subprocess
 import sys
 import os
+import warnings
 from test import support
 
 # Skip this test if the _tkinter module wasn't built.
@@ -573,9 +574,12 @@ class TclTest(unittest.TestCase):
     def test_split(self):
         split = self.interp.tk.split
         call = self.interp.tk.call
-        self.assertRaises(TypeError, split)
-        self.assertRaises(TypeError, split, 'a', 'b')
-        self.assertRaises(TypeError, split, 2)
+        with warnings.catch_warnings():
+            warnings.filterwarnings('ignore', r'\bsplit\b.*\bsplitlist\b',
+                                    DeprecationWarning)
+            self.assertRaises(TypeError, split)
+            self.assertRaises(TypeError, split, 'a', 'b')
+            self.assertRaises(TypeError, split, 2)
         testcases = [
             ('2', '2'),
             ('', ''),
@@ -617,7 +621,8 @@ class TclTest(unittest.TestCase):
                     expected),
             ]
         for arg, res in testcases:
-            self.assertEqual(split(arg), res, msg=arg)
+            with self.assertWarns(DeprecationWarning):
+                self.assertEqual(split(arg), res, msg=arg)
 
     def test_splitdict(self):
         splitdict = tkinter._splitdict
diff --git a/Misc/NEWS.d/next/Library/2019-10-04-18-39-59.bpo-38371.S6Klvm.rst b/Misc/NEWS.d/next/Library/2019-10-04-18-39-59.bpo-38371.S6Klvm.rst
new file mode 100644 (file)
index 0000000..5833995
--- /dev/null
@@ -0,0 +1,3 @@
+Deprecated the ``split()`` method in :class:`_tkinter.TkappType` in favour
+of the ``splitlist()`` method which has more consistent and predicable
+behavior.
index c431d611d4d0c6389d8bc0f2623abe2b2147f936..235cb6bc28dd5c22d370c38b221c0b5aba4f5cf7 100644 (file)
@@ -2304,6 +2304,12 @@ _tkinter_tkapp_split(TkappObject *self, PyObject *arg)
     PyObject *v;
     char *list;
 
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+            "split() is deprecated; consider using splitlist() instead", 1))
+    {
+        return NULL;
+    }
+
     if (PyTclObject_Check(arg)) {
         Tcl_Obj *value = ((PyTclObject*)arg)->value;
         int objc;