diff options
author | scoder <none@none> | 2008-06-04 19:38:25 +0200 |
---|---|---|
committer | scoder <none@none> | 2008-06-04 19:38:25 +0200 |
commit | 4229ed8982bf0d4966149d92bebd4e15381e7a91 (patch) | |
tree | 85eb6a17487980bd32106f06d53c800308d4f43c /src/lxml/classlookup.pxi | |
parent | 8fa7400ba5854f4eb7993f5b5fc14289e6dac0e3 (diff) | |
download | python-lxml-4229ed8982bf0d4966149d92bebd4e15381e7a91.tar.gz |
[svn r3805] r4468@delle: sbehnel | 2008-06-04 14:40:14 +0200
fixed crash in lookup classes when subclasses forget to call super.__init__()
--HG--
branch : trunk
Diffstat (limited to 'src/lxml/classlookup.pxi')
-rw-r--r-- | src/lxml/classlookup.pxi | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/lxml/classlookup.pxi b/src/lxml/classlookup.pxi index 185dba11..bc9f9a77 100644 --- a/src/lxml/classlookup.pxi +++ b/src/lxml/classlookup.pxi @@ -70,7 +70,6 @@ ctypedef public object (*_element_class_lookup_function)(object, _Document, xmlN cdef public class ElementClassLookup [ type LxmlElementClassLookupType, object LxmlElementClassLookup ]: u"""ElementClassLookup(self) - Superclass of Element class lookups. """ cdef _element_class_lookup_function _lookup_function @@ -86,6 +85,10 @@ cdef public class FallbackElementClassLookup(ElementClassLookup) \ """ cdef readonly ElementClassLookup fallback cdef _element_class_lookup_function _fallback_function + def __cinit__(self): + # fall back to default lookup + self._fallback_function = _lookupDefaultElementClass + def __init__(self, ElementClassLookup fallback=None): if fallback is not None: self._setFallback(fallback) @@ -127,8 +130,10 @@ cdef class ElementDefaultClassLookup(ElementClassLookup): cdef readonly object comment_class cdef readonly object pi_class cdef readonly object entity_class - def __init__(self, element=None, comment=None, pi=None, entity=None): + def __cinit__(self): self._lookup_function = _lookupDefaultElementClass + + def __init__(self, element=None, comment=None, pi=None, entity=None): if element is None: self.element_class = _Element elif issubclass(element, ElementBase): @@ -211,6 +216,9 @@ cdef class AttributeBasedElementClassLookup(FallbackElementClassLookup): cdef object _pytag cdef char* _c_ns cdef char* _c_name + def __cinit__(self): + self._lookup_function = _attribute_class_lookup + def __init__(self, attribute_name, class_mapping, ElementClassLookup fallback=None): self._pytag = _getNsTag(attribute_name) @@ -223,7 +231,6 @@ cdef class AttributeBasedElementClassLookup(FallbackElementClassLookup): self._class_mapping = dict(class_mapping) FallbackElementClassLookup.__init__(self, fallback) - self._lookup_function = _attribute_class_lookup cdef object _attribute_class_lookup(state, _Document doc, xmlNode* c_node): cdef AttributeBasedElementClassLookup lookup @@ -246,8 +253,7 @@ cdef class ParserBasedElementClassLookup(FallbackElementClassLookup): u"""ParserBasedElementClassLookup(self, fallback=None) Element class lookup based on the XML parser. """ - def __init__(self, ElementClassLookup fallback=None): - FallbackElementClassLookup.__init__(self, fallback) + def __cinit__(self): self._lookup_function = _parser_class_lookup cdef object _parser_class_lookup(state, _Document doc, xmlNode* c_node): @@ -276,8 +282,7 @@ cdef class CustomElementClassLookup(FallbackElementClassLookup): If you return None from this method, the fallback will be called. """ - def __init__(self, ElementClassLookup fallback=None): - FallbackElementClassLookup.__init__(self, fallback) + def __cinit__(self): self._lookup_function = _custom_class_lookup def lookup(self, type, doc, namespace, name): @@ -362,8 +367,7 @@ cdef class PythonElementClassLookup(FallbackElementClassLookup): See http://codespeak.net/lxml/element_classes.html """ - def __init__(self, ElementClassLookup fallback=None): - FallbackElementClassLookup.__init__(self, fallback) + def __cinit__(self): self._lookup_function = _python_class_lookup def lookup(self, doc, element): |