mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
#9018: os.path.normcase() now raises a TypeError if the argument is not str or bytes.
This commit is contained in:
parent
6186bfb735
commit
5a3ef5b22a
7 changed files with 27 additions and 7 deletions
|
@ -201,6 +201,7 @@ applications should use string objects to access all files.
|
||||||
Normalize the case of a pathname. On Unix and Mac OS X, this returns the
|
Normalize the case of a pathname. On Unix and Mac OS X, this returns the
|
||||||
path unchanged; on case-insensitive filesystems, it converts the path to
|
path unchanged; on case-insensitive filesystems, it converts the path to
|
||||||
lowercase. On Windows, it also converts forward slashes to backward slashes.
|
lowercase. On Windows, it also converts forward slashes to backward slashes.
|
||||||
|
Raise a TypeError if the type of *path* is not ``str`` or ``bytes``.
|
||||||
|
|
||||||
|
|
||||||
.. function:: normpath(path)
|
.. function:: normpath(path)
|
||||||
|
|
|
@ -32,6 +32,9 @@ def _get_colon(path):
|
||||||
# Normalize the case of a pathname. Dummy in Posix, but <s>.lower() here.
|
# Normalize the case of a pathname. Dummy in Posix, but <s>.lower() here.
|
||||||
|
|
||||||
def normcase(path):
|
def normcase(path):
|
||||||
|
if not isinstance(path, (bytes, str)):
|
||||||
|
raise TypeError("normcase() argument must be str or bytes, "
|
||||||
|
"not '{}'".format(path.__class__.__name__))
|
||||||
return path.lower()
|
return path.lower()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,9 @@ def normcase(s):
|
||||||
"""Normalize case of pathname.
|
"""Normalize case of pathname.
|
||||||
|
|
||||||
Makes all characters lowercase and all slashes into backslashes."""
|
Makes all characters lowercase and all slashes into backslashes."""
|
||||||
|
if not isinstance(s, (bytes, str)):
|
||||||
|
raise TypeError("normcase() argument must be str or bytes, "
|
||||||
|
"not '{}'".format(s.__class__.__name__))
|
||||||
return s.replace(_get_altsep(s), _get_sep(s)).lower()
|
return s.replace(_get_altsep(s), _get_sep(s)).lower()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,9 @@ def normcase(s):
|
||||||
"""Normalize case of pathname.
|
"""Normalize case of pathname.
|
||||||
|
|
||||||
Makes all characters lowercase and all altseps into seps."""
|
Makes all characters lowercase and all altseps into seps."""
|
||||||
|
if not isinstance(s, (bytes, str)):
|
||||||
|
raise TypeError("normcase() argument must be str or bytes, "
|
||||||
|
"not '{}'".format(s.__class__.__name__))
|
||||||
return s.replace('\\', '/').lower()
|
return s.replace('\\', '/').lower()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,9 @@ def _get_sep(path):
|
||||||
def normcase(s):
|
def normcase(s):
|
||||||
"""Normalize case of pathname. Has no effect under Posix"""
|
"""Normalize case of pathname. Has no effect under Posix"""
|
||||||
# TODO: on Mac OS X, this should really return s.lower().
|
# TODO: on Mac OS X, this should really return s.lower().
|
||||||
|
if not isinstance(s, (bytes, str)):
|
||||||
|
raise TypeError("normcase() argument must be str or bytes, "
|
||||||
|
"not '{}'".format(s.__class__.__name__))
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -194,14 +194,18 @@ class CommonTest(GenericTest):
|
||||||
]
|
]
|
||||||
|
|
||||||
def test_normcase(self):
|
def test_normcase(self):
|
||||||
# Check that normcase() is idempotent
|
normcase = self.pathmodule.normcase
|
||||||
p = "FoO/./BaR"
|
# check that normcase() is idempotent
|
||||||
p = self.pathmodule.normcase(p)
|
for p in ["FoO/./BaR", b"FoO/./BaR"]:
|
||||||
self.assertEqual(p, self.pathmodule.normcase(p))
|
p = normcase(p)
|
||||||
|
self.assertEqual(p, normcase(p))
|
||||||
|
|
||||||
p = b"FoO/./BaR"
|
self.assertEqual(normcase(''), '')
|
||||||
p = self.pathmodule.normcase(p)
|
self.assertEqual(normcase(b''), b'')
|
||||||
self.assertEqual(p, self.pathmodule.normcase(p))
|
|
||||||
|
# check that normcase raises a TypeError for invalid types
|
||||||
|
for path in (None, True, 0, 2.5, [], bytearray(b''), {'o','o'}):
|
||||||
|
self.assertRaises(TypeError, normcase, path)
|
||||||
|
|
||||||
def test_splitdrive(self):
|
def test_splitdrive(self):
|
||||||
# splitdrive for non-NT paths
|
# splitdrive for non-NT paths
|
||||||
|
|
|
@ -454,6 +454,9 @@ C-API
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #9018: os.path.normcase() now raises a TypeError if the argument is
|
||||||
|
not ``str`` or ``bytes``.
|
||||||
|
|
||||||
- Issue #9075: In the ssl module, remove the setting of a ``debug`` flag
|
- Issue #9075: In the ssl module, remove the setting of a ``debug`` flag
|
||||||
on an OpenSSL structure.
|
on an OpenSSL structure.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue