From 63b5aed06ed6fcd7956c9b99eb0a3651116cf2e4 Mon Sep 17 00:00:00 2001 From: Barney Gale Date: Wed, 19 Mar 2025 21:08:32 +0000 Subject: GH-123599: Remove duplicate `url2pathname()` implementation (#127237) 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 | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/Lib/pathlib/__init__.py b/Lib/pathlib/__init__.py index c272ac4..f44283a 100644 --- a/Lib/pathlib/__init__.py +++ b/Lib/pathlib/__init__.py @@ -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 -- cgit v0.12