]> granicus.if.org Git - python/commitdiff
This should hopefully finally clean up the remaining __del__ related
authorGuido van Rossum <guido@python.org>
Mon, 27 Oct 1997 18:56:19 +0000 (18:56 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 27 Oct 1997 18:56:19 +0000 (18:56 +0000)
problems with this module, even if an instance of a derived class is
kept alive longer than the urllib module itself...

Lib/urllib.py

index 422cb9ebb644c73c092d6a3a047607c4d7cea808..a818adfd58dd175d6c2e3c74f9f81d0901e28c1e 100644 (file)
@@ -27,7 +27,7 @@ import os
 import sys
 
 
-__version__ = '1.8'
+__version__ = '1.9'
 
 MAXFTPCACHE = 10               # Trim the ftp cache beyond this size
 
@@ -81,7 +81,7 @@ def urlcleanup():
 ftpcache = {}
 class URLopener:
 
-       __tempfiles = []
+       __tempfiles = None
 
        # Constructor
        def __init__(self, proxies=None):
@@ -91,6 +91,7 @@ class URLopener:
                server_version = "Python-urllib/%s" % __version__
                self.addheaders = [('User-agent', server_version)]
                self.__tempfiles = []
+               self.__unlink = os.unlink # See cleanup()
                self.tempcache = None
                # Undocumented feature: if you assign {} to tempcache,
                # it is used to cache files retrieved with
@@ -110,15 +111,18 @@ class URLopener:
                self.cleanup()
 
        def cleanup(self):
+               # This code sometimes runs when the rest of this module
+               # has already been deleted, so it can't use any globals
+               # or import anything.
                if self.__tempfiles:
-                       import os
                        for file in self.__tempfiles:
                                try:
-                                       os.unlink(file)
-                               except os.error:
+                                       self.__unlink(file)
+                               except:
                                        pass
-               URLopener.__tempfiles = []
-               self.tempcache = None
+                       del self.__tempfiles[:]
+               if self.tempcache:
+                   self.tempcache.clear()
 
        # Add a header to be used by the HTTP interface only
        # e.g. u.addheader('Accept', 'sound/basic')
@@ -429,11 +433,9 @@ class FancyURLopener(URLopener):
                        return None, None
 
        def echo_off(self):
-               import os
                os.system("stty -echo")
 
        def echo_on(self):
-               import os
                print
                os.system("stty echo")