diff options
author | Guido van Rossum <guido@python.org> | 1994-03-02 11:28:34 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1994-03-02 11:28:34 (GMT) |
commit | 67e22c2684a9631e1837ae130d132e345b2c89da (patch) | |
tree | 7f13ac2ce167b41f666a48a51e85ddebb55a74cf /Lib/urlopen.py | |
parent | 5da5755c4a7321e99c00912b8527568f05df19d6 (diff) | |
download | cpython-67e22c2684a9631e1837ae130d132e345b2c89da.zip cpython-67e22c2684a9631e1837ae130d132e345b2c89da.tar.gz cpython-67e22c2684a9631e1837ae130d132e345b2c89da.tar.bz2 |
use caching of temp files; added cleanup
Diffstat (limited to 'Lib/urlopen.py')
-rwxr-xr-x | Lib/urlopen.py | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/Lib/urlopen.py b/Lib/urlopen.py index bb0c45e..0f3c33a 100755 --- a/Lib/urlopen.py +++ b/Lib/urlopen.py @@ -37,6 +37,9 @@ def urlretrieve(url): if not _urlopener: _urlopener = URLopener() return _urlopener.retrieve(url) +def urlcleanup(): + if _urlopener: + _urlopener.cleanup() # Class to open URLs. @@ -48,7 +51,7 @@ class URLopener: # Constructor def __init__(self): self.addheaders = [] - self.tempfiles = [] + self.tempcache = {} self.ftpcache = ftpcache # Undocumented feature: you can use a different # ftp cache by assigning to the .ftpcache member; @@ -62,11 +65,12 @@ class URLopener: def cleanup(self): import os - for tfn in self.tempfiles: + for url in self.tempcache.keys(): try: - os.unlink(tfn) + os.unlink(self.tempcache[url][0]) except os.error: pass + del self.tempcache[url] # Add a header to be used by the HTTP interface only # e.g. u.addheader('Accept', 'sound/basic') @@ -93,7 +97,13 @@ class URLopener: # retrieve(url) returns (filename, None) for a local object # or (tempfilename, headers) for a remote object def retrieve(self, url): - type, url1 = splittype(unwrap(url)) + if self.tempcache.has_key(url): + return self.tempcache[url] + url1 = unwrap(url) + if self.tempcache.has_key(url1): + self.tempcache[url] = self.tempcache[url1] + return self.tempcache[url1] + type, url1 = splittype(url1) if not type or type == 'file': try: fp = self.open_local_file(url1) @@ -102,19 +112,19 @@ class URLopener: except IOError, msg: pass fp = self.open(url) + headers = fp.info() import tempfile tfn = tempfile.mktemp() - self.tempfiles.append(tfn) + self.tempcache[url] = result = tfn, headers tfp = open(tfn, 'w') bs = 1024*8 block = fp.read(bs) while block: tfp.write(block) block = fp.read(bs) - headers = fp.info() del fp del tfp - return tfn, headers + return result # Each method named open_<type> knows how to open that type of URL @@ -370,7 +380,7 @@ def test(): fn, h = None, None print '-'*40 finally: - _urlopener.cleanup() + urlcleanup() # Run test program when run as a script if __name__ == '__main__': |