]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-123599: Remove duplicate `url2pathname()` implementation (#127237)
authorBarney Gale <barney.gale@gmail.com>
Wed, 19 Mar 2025 21:08:32 +0000 (21:08 +0000)
committerGitHub <noreply@github.com>
Wed, 19 Mar 2025 21:08:32 +0000 (21:08 +0000)
Call `urllib.request.url2pathname()` from `pathlib.Path.from_uri()` rather
than re-implementing it. This paves the way for solving the main issue
(ignoring local authorities and rejecting non-local ones) in urllib, not
pathlib.

Lib/pathlib/__init__.py

index c272ac4dddd40d87d25fdcfa3f6587dae932851e..f44283a53e5704afb06c7171a8de8428f587ebdf 100644 (file)
@@ -1271,21 +1271,8 @@ class Path(PurePath):
         """Return a new path from the given 'file' URI."""
         if not uri.startswith('file:'):
             raise ValueError(f"URI does not start with 'file:': {uri!r}")
-        path = uri[5:]
-        if path[:3] == '///':
-            # Remove empty authority
-            path = path[2:]
-        elif path[:12] == '//localhost/':
-            # Remove 'localhost' authority
-            path = path[11:]
-        if path[:3] == '///' or (path[:1] == '/' and path[2:3] in ':|'):
-            # Remove slash before DOS device/UNC path
-            path = path[1:]
-        if path[1:2] == '|':
-            # Replace bar with colon in DOS drive
-            path = path[:1] + ':' + path[2:]
-        from urllib.parse import unquote_to_bytes
-        path = cls(os.fsdecode(unquote_to_bytes(path)))
+        from urllib.request import url2pathname
+        path = cls(url2pathname(uri.removeprefix('file:')))
         if not path.is_absolute():
             raise ValueError(f"URI is not absolute: {uri!r}")
         return path