]> granicus.if.org Git - python/commitdiff
From: Sjoerd Mullender
authorGuido van Rossum <guido@python.org>
Fri, 12 Mar 1999 14:31:10 +0000 (14:31 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 12 Mar 1999 14:31:10 +0000 (14:31 +0000)
The filename to URL conversion didn't properly quote special
characters.
The URL to filename didn't properly unquote special chatacters.

Lib/nturl2path.py
Lib/urllib.py

index a25dc2a17ae6b5c78dcbe6676cd67084b3bc2ae3..d86bbc2e89d802f609cf9ef4dc7b6b368a4306da 100644 (file)
@@ -10,21 +10,22 @@ def url2pathname(url):
 
                C:\foo\bar\spam.foo
        """
-       import string
+       import string, urllib
        if not '|' in url:
            # No drive specifier, just convert slashes
-           components = string.splitfields(url, '/')
-           return string.joinfields(components, '\\')
-       comp = string.splitfields(url, '|')
+           components = string.split(url, '/')
+           # make sure not to convert quoted slashes :-)
+           return urllib.unquote(string.join(components, '\\'))
+       comp = string.split(url, '|')
        if len(comp) != 2 or comp[0][-1] not in string.letters:
                error = 'Bad URL: ' + url
                raise IOError, error
        drive = string.upper(comp[0][-1])
-       components = string.splitfields(comp[1], '/')
+       components = string.split(comp[1], '/')
        path = drive + ':'
        for  comp in components:
                if comp:
-                       path = path + '\\' + comp
+                       path = path + '\\' + urllib.unquote(comp)
        return path
 
 def pathname2url(p):
@@ -37,20 +38,20 @@ def pathname2url(p):
                ///C|/foo/bar/spam.foo
        """
 
-       import string
+       import string, urllib
        if not ':' in p:
-           # No drive specifier, just convert slashes
-           components = string.splitfields(p, '\\')
-           return string.joinfields(components, '/')
-       comp = string.splitfields(p, ':')
+           # No drive specifier, just convert slashes and quote the name
+           components = string.split(p, '\\')
+           return urllib.quote(string.join(components, '/'))
+       comp = string.split(p, ':')
        if len(comp) != 2 or len(comp[0]) > 1:
                error = 'Bad path: ' + p
                raise IOError, error
 
-       drive = string.upper(comp[0])
-       components = string.splitfields(comp[1], '\\')
+       drive = urllib.quote(string.upper(comp[0]))
+       components = string.split(comp[1], '\\')
        path = '///' + drive + '|'
        for comp in components:
                if comp:
-                       path = path + '/' + comp
+                       path = path + '/' + urllib.quote(comp)
        return path
index ceacc61303dcc4cbe7a1ba62dd56eacbafbcfb31..a4847365e12c60d9ac56efe606984b6777a5517a 100644 (file)
@@ -38,16 +38,9 @@ elif os.name == 'nt':
     from nturl2path import url2pathname, pathname2url 
 else:
     def url2pathname(pathname):
-        return pathname
+        return unquote(pathname)
     def pathname2url(pathname):
-        return pathname
-
-_url2pathname = url2pathname
-def url2pathname(url):
-    return _url2pathname(unquote(url))
-_pathname2url = pathname2url
-def pathname2url(p):
-    return quote(_pathname2url(p))
+        return quote(pathname)
 
 # This really consists of two pieces:
 # (1) a class which handles opening of all sorts of URLs