diff options
author | Guido van Rossum <guido@python.org> | 1997-09-03 22:36:15 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-09-03 22:36:15 (GMT) |
commit | 2b3fd76cc7599630df68444a7a96e97fddd5c0fb (patch) | |
tree | e3ebfba96b1434b4f502b9f74b07cf7a42719101 | |
parent | f01dff7e93993c01f9883de5b456ccac32f550a9 (diff) | |
download | cpython-2b3fd76cc7599630df68444a7a96e97fddd5c0fb.zip cpython-2b3fd76cc7599630df68444a7a96e97fddd5c0fb.tar.gz cpython-2b3fd76cc7599630df68444a7a96e97fddd5c0fb.tar.bz2 |
One patch from Sjoerd and one from Jack.
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.
-rw-r--r-- | Lib/urllib.py | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/Lib/urllib.py b/Lib/urllib.py index 82a26b3..6922f22 100644 --- a/Lib/urllib.py +++ b/Lib/urllib.py @@ -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 |