summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-05-26 18:42:36 (GMT)
committerGitHub <noreply@github.com>2023-05-26 18:42:36 (GMT)
commit305d78b71481e309051b1b88f363805d8c0ad34a (patch)
tree196b919be2dd7bab2bb85d4d423e33f3503a55bb
parenteca102ddac77a42c6fda62a283fe0802e0ff5549 (diff)
downloadcpython-305d78b71481e309051b1b88f363805d8c0ad34a.zip
cpython-305d78b71481e309051b1b88f363805d8c0ad34a.tar.gz
cpython-305d78b71481e309051b1b88f363805d8c0ad34a.tar.bz2
[3.12] GH-103631: Fix `PurePosixPath(PureWindowsPath(...))` separator handling (GH-104949) (GH-104991)
For backwards compatibility, accept backslashes as path separators in `PurePosixPath` if an instance of `PureWindowsPath` is supplied. This restores behaviour from Python 3.11. (cherry picked from commit 328422ce6162eb18735a2c0de12f8a696be97d0c) Co-authored-by: Barney Gale <barney.gale@gmail.com> Co-authored-by: Gregory P. Smith <greg@krypto.org>
-rw-r--r--Lib/pathlib.py3
-rw-r--r--Lib/test/test_pathlib.py6
-rw-r--r--Misc/NEWS.d/next/Library/2023-05-25-23-34-54.gh-issue-103631.x5Urye.rst2
3 files changed, 11 insertions, 0 deletions
diff --git a/Lib/pathlib.py b/Lib/pathlib.py
index bfe26e1..a42085e 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -300,6 +300,9 @@ class PurePath(object):
for arg in args:
if isinstance(arg, PurePath):
path = arg._raw_path
+ if arg._flavour is ntpath and self._flavour is posixpath:
+ # GH-103631: Convert separators for backwards compatibility.
+ path = path.replace('\\', '/')
else:
try:
path = os.fspath(arg)
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index bc2947e..bf4decf 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -789,6 +789,12 @@ class PurePosixPathTest(_BasePurePathTest, unittest.TestCase):
pp = P('//a') / '/c'
self.assertEqual(pp, P('/c'))
+ def test_parse_windows_path(self):
+ P = self.cls
+ p = P('c:', 'a', 'b')
+ pp = P(pathlib.PureWindowsPath('c:\\a\\b'))
+ self.assertEqual(p, pp)
+
class PureWindowsPathTest(_BasePurePathTest, unittest.TestCase):
cls = pathlib.PureWindowsPath
diff --git a/Misc/NEWS.d/next/Library/2023-05-25-23-34-54.gh-issue-103631.x5Urye.rst b/Misc/NEWS.d/next/Library/2023-05-25-23-34-54.gh-issue-103631.x5Urye.rst
new file mode 100644
index 0000000..d1eb2d3
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-05-25-23-34-54.gh-issue-103631.x5Urye.rst
@@ -0,0 +1,2 @@
+Fix ``pathlib.PurePosixPath(pathlib.PureWindowsPath(...))`` not converting
+path separators to restore 3.11 compatible behavior.