aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-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 c8931687a3c..8cb5279d735 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -300,6 +300,9 @@ class PurePath(os.PathLike):
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 ef202b751e4..01615e20945 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 00000000000..d1eb2d3ed61
--- /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.