]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-33262: Deprecate passing None for `s` to shlex.split() (GH-6514)
authorZackery Spytz <zspytz@gmail.com>
Wed, 1 Apr 2020 13:58:55 +0000 (07:58 -0600)
committerGitHub <noreply@github.com>
Wed, 1 Apr 2020 13:58:55 +0000 (09:58 -0400)
* bpo-33262: Deprecate passing None for `s` to shlex.split()

This reads the string to split from standard input.

* Update What's New.

* Fix shlex.rst

Doc/library/shlex.rst
Doc/whatsnew/3.9.rst
Lib/shlex.py
Lib/test/test_shlex.py
Misc/NEWS.d/next/Library/2018-04-17-13-23-29.bpo-33262.vHC7YQ.rst [new file with mode: 0644]

index adc23da6d491b7c088f1a661bacb51f85971687a..7f7f0c7f124ac5a4278354d668caca5e662c0775 100644 (file)
@@ -36,6 +36,9 @@ The :mod:`shlex` module defines the following functions:
       instance, passing ``None`` for *s* will read the string to split from
       standard input.
 
+   .. deprecated:: 3.9
+      Passing ``None`` for *s* will raise an exception in future Python
+      versions.
 
 .. function:: join(split_command)
 
index 59083da3a262bd1c7436cbc3beaa536024648944..6ea4ad89f8c0a951e1d958a9044466daf6bb6b6f 100644 (file)
@@ -624,6 +624,9 @@ Deprecated
   by :c:func:`Py_Initialize()` since Python 3.7.
   (Contributed by Victor Stinner in :issue:`39877`.)
 
+* Passing ``None`` as the first argument to the :func:`shlex.split` function
+  has been deprecated.  (Contributed by Zackery Spytz in :issue:`33262`.)
+
 
 Removed
 =======
index c817274583135a3a64711cd38801276fe395a2c7..4801a6c1d47bd9e0a8ada16089221c8237b777d5 100644 (file)
@@ -304,6 +304,10 @@ class shlex:
 
 def split(s, comments=False, posix=True):
     """Split the string *s* using shell-like syntax."""
+    if s is None:
+        import warnings
+        warnings.warn("Passing None for 's' to shlex.split() is deprecated.",
+                      DeprecationWarning, stacklevel=2)
     lex = shlex(s, posix=posix)
     lex.whitespace_split = True
     if not comments:
index a21ccd2fdf44a71b9c5643f678f6ca76952ae2b9..3081a785204edc6ade5803ea484813095a12b914 100644 (file)
@@ -3,7 +3,7 @@ import itertools
 import shlex
 import string
 import unittest
-
+from unittest import mock
 
 
 # The original test data set was from shellwords, by Hartmut Goebel.
@@ -162,6 +162,11 @@ class ShlexTest(unittest.TestCase):
             tok = lex.get_token()
         return ret
 
+    @mock.patch('sys.stdin', io.StringIO())
+    def testSplitNoneDeprecation(self):
+        with self.assertWarns(DeprecationWarning):
+            shlex.split(None)
+
     def testSplitPosix(self):
         """Test data splitting with posix parser"""
         self.splitTest(self.posix_data, comments=True)
diff --git a/Misc/NEWS.d/next/Library/2018-04-17-13-23-29.bpo-33262.vHC7YQ.rst b/Misc/NEWS.d/next/Library/2018-04-17-13-23-29.bpo-33262.vHC7YQ.rst
new file mode 100644 (file)
index 0000000..2afe13a
--- /dev/null
@@ -0,0 +1,2 @@
+Deprecate passing None as an argument for :func:`shlex.split()`'s ``s``
+parameter.  Patch by Zackery Spytz.