trackref Libxml2Document objects and do not silence xml exceptions on __del__

This commit is contained in:
daniel 2009-10-08 16:32:42 +01:00
parent d7024dcd33
commit af09029649
1 changed files with 4 additions and 7 deletions

View File

@ -5,9 +5,10 @@ garbage collection to libxml2 documents (xmlDoc).
import weakref
from scrapy.utils.trackref import object_ref
from .factories import xmlDoc_from_html
class Libxml2Document(object):
class Libxml2Document(object_ref):
cache = weakref.WeakKeyDictionary()
__slots__ = ['xmlDoc', 'xpathContext', '__weakref__']
@ -15,7 +16,7 @@ class Libxml2Document(object):
def __new__(cls, response, factory=xmlDoc_from_html):
cache = cls.cache.setdefault(response, {})
if factory not in cache:
obj = object.__new__(cls)
obj = object_ref.__new__(cls)
obj.xmlDoc = factory(response)
obj.xpathContext = obj.xmlDoc.xpathNewContext()
cache[factory] = obj
@ -29,12 +30,8 @@ class Libxml2Document(object):
# TypeError, so the try/except block silences them
try:
self.xmlDoc.freeDoc()
except:
pass
try:
finally:
self.xpathContext.xpathFreeContext()
except:
pass
def __str__(self):
return "<Libxml2Document %s>" % self.xmlDoc.name