]> granicus.if.org Git - python/commitdiff
One patch from Sjoerd and one from Jack.
authorGuido van Rossum <guido@python.org>
Wed, 3 Sep 1997 22:36:15 +0000 (22:36 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 3 Sep 1997 22:36:15 +0000 (22:36 +0000)
Sjoerd: add separate administration of temporary files created y
URLopener.retrieve() so cleanup can properly remove them.  The old
code removed everything in tempcache which was a bad idea if the user
had passed a non-temp file into it.  (I added a line to delete the
tempcache in cleanup() -- it still seems to make sense.)

Jack: in basejoin(), interpret relative paths starting in "../".  This
is necessary if the server uses symbolic links.

Lib/urllib.py

index 82a26b3b2e6d6f9eaffa86edd2f675fe1bfb07cd..6922f22936108fa4c8ccaddae3aaa758b55dadea 100644 (file)
@@ -82,7 +82,7 @@ def urlcleanup():
 ftpcache = {}
 class URLopener:
 
-       tempcache = None                # So close() in __del__() won't fail
+       __tempfiles = []
 
        # Constructor
        def __init__(self, proxies=None):
@@ -110,14 +110,15 @@ class URLopener:
                self.cleanup()
 
        def cleanup(self):
-               if self.tempcache:
+               if self.__tempfiles:
                        import os
-                       for url in self.tempcache.keys():
+                       for file in self.__tempfiles:
                                try:
-                                       os.unlink(self.tempcache[url][0])
+                                       os.unlink(file)
                                except os.error:
                                        pass
-                               del self.tempcache[url]
+               URLopener.__tempfiles = []
+               self.tempcache = None
 
        # Add a header to be used by the HTTP interface only
        # e.g. u.addheader('Accept', 'sound/basic')
@@ -182,6 +183,7 @@ class URLopener:
                if not filename:
                    import tempfile
                    filename = tempfile.mktemp()
+                   self.__tempfiles.append(filename)
                result = filename, headers
                if self.tempcache is not None:
                        self.tempcache[url] = result
@@ -622,9 +624,14 @@ def basejoin(base, url):
                # Interpret ../ (important because of symlinks)
                while basepath and path[:3] == '../':
                        path = path[3:]
-                       i = string.rfind(basepath, '/')
+                       i = string.rfind(basepath[:-1], '/')
                        if i > 0:
-                               basepath = basepath[:i-1]
+                               basepath = basepath[:i+1]
+                       elif i == 0:
+                               basepath = '/'
+                               break
+                       else:
+                               basepath = ''
                        
                path = basepath + path
        if type and host: return type + '://' + host + path