blob: 8c02049275a42fe279ff215369896d60d5662af8 [file] [log] [blame]
Guido van Rossum5c971671996-07-22 15:23:25 +00001#
2# nturl2path convert a NT pathname to a file URL and
3# vice versa
4
5def url2pathname(url):
6 """ Convert a URL to a DOS path...
Guido van Rossum5c971671996-07-22 15:23:25 +00007 ///C|/foo/bar/spam.foo
8
9 becomes
10
11 C:\foo\bar\spam.foo
12 """
Guido van Rossum9a744a91999-04-08 20:27:54 +000013 import string, urllib
Guido van Rossumff712aa1997-08-15 00:45:26 +000014 if not '|' in url:
15 # No drive specifier, just convert slashes
Guido van Rossum9a744a91999-04-08 20:27:54 +000016 if url[:4] == '////':
17 # path is something like ////host/path/on/remote/host
18 # convert this to \\host\path\on\remote\host
19 # (notice halving of slashes at the start of the path)
20 url = url[2:]
21 components = string.split(url, '/')
22 # make sure not to convert quoted slashes :-)
23 return urllib.unquote(string.join(components, '\\'))
24 comp = string.split(url, '|')
Guido van Rossum5c971671996-07-22 15:23:25 +000025 if len(comp) != 2 or comp[0][-1] not in string.letters:
26 error = 'Bad URL: ' + url
27 raise IOError, error
28 drive = string.upper(comp[0][-1])
Guido van Rossum9a744a91999-04-08 20:27:54 +000029 components = string.split(comp[1], '/')
Guido van Rossum5c971671996-07-22 15:23:25 +000030 path = drive + ':'
31 for comp in components:
32 if comp:
Guido van Rossum9a744a91999-04-08 20:27:54 +000033 path = path + '\\' + urllib.unquote(comp)
Guido van Rossum5c971671996-07-22 15:23:25 +000034 return path
35
36def pathname2url(p):
37
38 """ Convert a DOS path name to a file url...
Guido van Rossum5c971671996-07-22 15:23:25 +000039 C:\foo\bar\spam.foo
40
41 becomes
42
43 ///C|/foo/bar/spam.foo
44 """
45
Guido van Rossum9a744a91999-04-08 20:27:54 +000046 import string, urllib
Guido van Rossumff712aa1997-08-15 00:45:26 +000047 if not ':' in p:
Guido van Rossum9a744a91999-04-08 20:27:54 +000048 # No drive specifier, just convert slashes and quote the name
49 if p[:2] == '\\\\':
50 # path is something like \\host\path\on\remote\host
51 # convert this to ////host/path/on/remote/host
52 # (notice doubling of slashes at the start of the path)
53 p = '\\\\' + p
54 components = string.split(p, '\\')
55 return urllib.quote(string.join(components, '/'))
56 comp = string.split(p, ':')
Guido van Rossum5c971671996-07-22 15:23:25 +000057 if len(comp) != 2 or len(comp[0]) > 1:
58 error = 'Bad path: ' + p
59 raise IOError, error
60
Guido van Rossum9a744a91999-04-08 20:27:54 +000061 drive = urllib.quote(string.upper(comp[0]))
62 components = string.split(comp[1], '\\')
Guido van Rossum5c971671996-07-22 15:23:25 +000063 path = '///' + drive + '|'
64 for comp in components:
65 if comp:
Guido van Rossum9a744a91999-04-08 20:27:54 +000066 path = path + '/' + urllib.quote(comp)
Guido van Rossum5c971671996-07-22 15:23:25 +000067 return path