blob: d86bbc2e89d802f609cf9ef4dc7b6b368a4306da [file] [log] [blame]
Guido van Rossum746ea351996-06-26 19:47:56 +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 Rossum746ea351996-06-26 19:47:56 +00007 ///C|/foo/bar/spam.foo
8
9 becomes
10
11 C:\foo\bar\spam.foo
12 """
Guido van Rossum367ac801999-03-12 14:31:10 +000013 import string, urllib
Guido van Rossumd510b721997-08-12 14:47:24 +000014 if not '|' in url:
15 # No drive specifier, just convert slashes
Guido van Rossum367ac801999-03-12 14:31:10 +000016 components = string.split(url, '/')
17 # make sure not to convert quoted slashes :-)
18 return urllib.unquote(string.join(components, '\\'))
19 comp = string.split(url, '|')
Guido van Rossum746ea351996-06-26 19:47:56 +000020 if len(comp) != 2 or comp[0][-1] not in string.letters:
21 error = 'Bad URL: ' + url
22 raise IOError, error
23 drive = string.upper(comp[0][-1])
Guido van Rossum367ac801999-03-12 14:31:10 +000024 components = string.split(comp[1], '/')
Guido van Rossum746ea351996-06-26 19:47:56 +000025 path = drive + ':'
26 for comp in components:
27 if comp:
Guido van Rossum367ac801999-03-12 14:31:10 +000028 path = path + '\\' + urllib.unquote(comp)
Guido van Rossum746ea351996-06-26 19:47:56 +000029 return path
30
31def pathname2url(p):
32
33 """ Convert a DOS path name to a file url...
Guido van Rossum746ea351996-06-26 19:47:56 +000034 C:\foo\bar\spam.foo
35
36 becomes
37
38 ///C|/foo/bar/spam.foo
39 """
40
Guido van Rossum367ac801999-03-12 14:31:10 +000041 import string, urllib
Guido van Rossumd510b721997-08-12 14:47:24 +000042 if not ':' in p:
Guido van Rossum367ac801999-03-12 14:31:10 +000043 # No drive specifier, just convert slashes and quote the name
44 components = string.split(p, '\\')
45 return urllib.quote(string.join(components, '/'))
46 comp = string.split(p, ':')
Guido van Rossum746ea351996-06-26 19:47:56 +000047 if len(comp) != 2 or len(comp[0]) > 1:
48 error = 'Bad path: ' + p
49 raise IOError, error
50
Guido van Rossum367ac801999-03-12 14:31:10 +000051 drive = urllib.quote(string.upper(comp[0]))
52 components = string.split(comp[1], '\\')
Guido van Rossum746ea351996-06-26 19:47:56 +000053 path = '///' + drive + '|'
54 for comp in components:
55 if comp:
Guido van Rossum367ac801999-03-12 14:31:10 +000056 path = path + '/' + urllib.quote(comp)
Guido van Rossum746ea351996-06-26 19:47:56 +000057 return path