mirror of
https://github.com/python/cpython.git
synced 2025-08-14 05:52:50 +00:00
[3.8] bpo-35168: Make shlex.punctuation_chars read-only (GH-11631) (GH-15927)
(cherry picked from commit 972cf5c06a
)
Co-authored-by: Alex <a.v.shkop@gmail.com>
This commit is contained in:
parent
01ae0e2698
commit
3b92ddb761
4 changed files with 18 additions and 4 deletions
|
@ -113,7 +113,9 @@ The :mod:`shlex` module defines the following class:
|
||||||
characters, those characters will be used as the punctuation characters. Any
|
characters, those characters will be used as the punctuation characters. Any
|
||||||
characters in the :attr:`wordchars` attribute that appear in
|
characters in the :attr:`wordchars` attribute that appear in
|
||||||
*punctuation_chars* will be removed from :attr:`wordchars`. See
|
*punctuation_chars* will be removed from :attr:`wordchars`. See
|
||||||
:ref:`improved-shell-compatibility` for more information.
|
:ref:`improved-shell-compatibility` for more information. *punctuation_chars*
|
||||||
|
can be set only upon :class:`~shlex.shlex` instance creation and can't be
|
||||||
|
modified later.
|
||||||
|
|
||||||
.. versionchanged:: 3.6
|
.. versionchanged:: 3.6
|
||||||
The *punctuation_chars* parameter was added.
|
The *punctuation_chars* parameter was added.
|
||||||
|
@ -317,8 +319,8 @@ variables which either control lexical analysis or can be used for debugging:
|
||||||
|
|
||||||
.. attribute:: shlex.punctuation_chars
|
.. attribute:: shlex.punctuation_chars
|
||||||
|
|
||||||
Characters that will be considered punctuation. Runs of punctuation
|
A read-only property. Characters that will be considered punctuation. Runs of
|
||||||
characters will be returned as a single token. However, note that no
|
punctuation characters will be returned as a single token. However, note that no
|
||||||
semantic validity checking will be performed: for example, '>>>' could be
|
semantic validity checking will be performed: for example, '>>>' could be
|
||||||
returned as a token, even though it may not be recognised as such by shells.
|
returned as a token, even though it may not be recognised as such by shells.
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ class shlex:
|
||||||
punctuation_chars = ''
|
punctuation_chars = ''
|
||||||
elif punctuation_chars is True:
|
elif punctuation_chars is True:
|
||||||
punctuation_chars = '();<>|&'
|
punctuation_chars = '();<>|&'
|
||||||
self.punctuation_chars = punctuation_chars
|
self._punctuation_chars = punctuation_chars
|
||||||
if punctuation_chars:
|
if punctuation_chars:
|
||||||
# _pushback_chars is a push back queue used by lookahead logic
|
# _pushback_chars is a push back queue used by lookahead logic
|
||||||
self._pushback_chars = deque()
|
self._pushback_chars = deque()
|
||||||
|
@ -65,6 +65,10 @@ class shlex:
|
||||||
t = self.wordchars.maketrans(dict.fromkeys(punctuation_chars))
|
t = self.wordchars.maketrans(dict.fromkeys(punctuation_chars))
|
||||||
self.wordchars = self.wordchars.translate(t)
|
self.wordchars = self.wordchars.translate(t)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def punctuation_chars(self):
|
||||||
|
return self._punctuation_chars
|
||||||
|
|
||||||
def push_token(self, tok):
|
def push_token(self, tok):
|
||||||
"Push a token onto the stack popped by the get_token method"
|
"Push a token onto the stack popped by the get_token method"
|
||||||
if self.debug >= 1:
|
if self.debug >= 1:
|
||||||
|
|
|
@ -353,6 +353,13 @@ class ShlexTest(unittest.TestCase):
|
||||||
resplit = shlex.split(joined)
|
resplit = shlex.split(joined)
|
||||||
self.assertEqual(split_command, resplit)
|
self.assertEqual(split_command, resplit)
|
||||||
|
|
||||||
|
def testPunctuationCharsReadOnly(self):
|
||||||
|
punctuation_chars = "/|$%^"
|
||||||
|
shlex_instance = shlex.shlex(punctuation_chars=punctuation_chars)
|
||||||
|
self.assertEqual(shlex_instance.punctuation_chars, punctuation_chars)
|
||||||
|
with self.assertRaises(AttributeError):
|
||||||
|
shlex_instance.punctuation_chars = False
|
||||||
|
|
||||||
|
|
||||||
# Allow this test to be used with old shlex.py
|
# Allow this test to be used with old shlex.py
|
||||||
if not getattr(shlex, "split", None):
|
if not getattr(shlex, "split", None):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
:attr:`shlex.shlex.punctuation_chars` is now a read-only property.
|
Loading…
Add table
Add a link
Reference in a new issue