summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2019-10-08 11:31:35 (GMT)
committerGitHub <noreply@github.com>2019-10-08 11:31:35 (GMT)
commitd05b000c6bcd39dba4f4b2656e45954802649562 (patch)
treecc375d0d253bebcc72a73d805d8273bd3d870386
parentd7c387384a27f37e4e3fa7890c859212c56b45b2 (diff)
downloadcpython-d05b000c6bcd39dba4f4b2656e45954802649562.zip
cpython-d05b000c6bcd39dba4f4b2656e45954802649562.tar.gz
cpython-d05b000c6bcd39dba4f4b2656e45954802649562.tar.bz2
bpo-38371: Tkinter: deprecate the split() method. (GH-16584)
-rw-r--r--Doc/whatsnew/3.9.rst5
-rw-r--r--Lib/test/test_tcl.py13
-rw-r--r--Misc/NEWS.d/next/Library/2019-10-04-18-39-59.bpo-38371.S6Klvm.rst3
-rw-r--r--Modules/_tkinter.c6
4 files changed, 23 insertions, 4 deletions
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 9f2a659..6b4abc0 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -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
=======
diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py
index 3183ea8..1c5b9cf 100644
--- a/Lib/test/test_tcl.py
+++ b/Lib/test/test_tcl.py
@@ -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
index 0000000..5833995
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-10-04-18-39-59.bpo-38371.S6Klvm.rst
@@ -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.
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index c431d61..235cb6b 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -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;