mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 02:15:10 +00:00 
			
		
		
		
	 8abfaba5a6
			
		
	
	
		8abfaba5a6
		
			
		
	
	
	
	
		
			
			Deprecate the `nturl2path` module. Its functionality is merged into `urllib.request`. Add `tests.test_nturl2path` to exercise `nturl2path`, as it's no longer covered by `test_urllib`.
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Convert a NT pathname to a file URL and vice versa.
 | |
| 
 | |
| This module only exists to provide OS-specific code
 | |
| for urllib.requests, thus do not use directly.
 | |
| """
 | |
| # Testing is done through test_nturl2path.
 | |
| 
 | |
| import warnings
 | |
| 
 | |
| 
 | |
| warnings._deprecated(
 | |
|     __name__,
 | |
|     message=f"{warnings._DEPRECATED_MSG}; use 'urllib.request' instead",
 | |
|     remove=(3, 19))
 | |
| 
 | |
| def url2pathname(url):
 | |
|     """OS-specific conversion from a relative URL of the 'file' scheme
 | |
|     to a file system path; not recommended for general use."""
 | |
|     # e.g.
 | |
|     #   ///C|/foo/bar/spam.foo
 | |
|     # and
 | |
|     #   ///C:/foo/bar/spam.foo
 | |
|     # become
 | |
|     #   C:\foo\bar\spam.foo
 | |
|     import urllib.parse
 | |
|     if url[:3] == '///':
 | |
|         # URL has an empty authority section, so the path begins on the third
 | |
|         # character.
 | |
|         url = url[2:]
 | |
|     elif url[:12] == '//localhost/':
 | |
|         # Skip past 'localhost' authority.
 | |
|         url = url[11:]
 | |
|     if url[:3] == '///':
 | |
|         # Skip past extra slash before UNC drive in URL path.
 | |
|         url = url[1:]
 | |
|     else:
 | |
|         if url[:1] == '/' and url[2:3] in (':', '|'):
 | |
|             # Skip past extra slash before DOS drive in URL path.
 | |
|             url = url[1:]
 | |
|         if url[1:2] == '|':
 | |
|             # Older URLs use a pipe after a drive letter
 | |
|             url = url[:1] + ':' + url[2:]
 | |
|     return urllib.parse.unquote(url.replace('/', '\\'))
 | |
| 
 | |
| def pathname2url(p):
 | |
|     """OS-specific conversion from a file system path to a relative URL
 | |
|     of the 'file' scheme; not recommended for general use."""
 | |
|     # e.g.
 | |
|     #   C:\foo\bar\spam.foo
 | |
|     # becomes
 | |
|     #   ///C:/foo/bar/spam.foo
 | |
|     import ntpath
 | |
|     import urllib.parse
 | |
|     # First, clean up some special forms. We are going to sacrifice
 | |
|     # the additional information anyway
 | |
|     p = p.replace('\\', '/')
 | |
|     if p[:4] == '//?/':
 | |
|         p = p[4:]
 | |
|         if p[:4].upper() == 'UNC/':
 | |
|             p = '//' + p[4:]
 | |
|     drive, root, tail = ntpath.splitroot(p)
 | |
|     if drive:
 | |
|         if drive[1:] == ':':
 | |
|             # DOS drive specified. Add three slashes to the start, producing
 | |
|             # an authority section with a zero-length authority, and a path
 | |
|             # section starting with a single slash.
 | |
|             drive = f'///{drive}'
 | |
|         drive = urllib.parse.quote(drive, safe='/:')
 | |
|     elif root:
 | |
|         # Add explicitly empty authority to path beginning with one slash.
 | |
|         root = f'//{root}'
 | |
| 
 | |
|     tail = urllib.parse.quote(tail)
 | |
|     return drive + root + tail
 |