mirror of https://github.com/scrapy/scrapy.git
trackref Libxml2Document objects and do not silence xml exceptions on __del__
This commit is contained in:
parent
d7024dcd33
commit
af09029649
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue