From 43769d64c53e4c8a3f4aafe23112f28deaa7d414 Mon Sep 17 00:00:00 2001 From: scoder Date: Mon, 17 Nov 2008 23:23:45 +0100 Subject: [svn r4020] r4875@delle: sbehnel | 2008-11-17 23:22:34 +0100 code cleanup: use list.append() instead of PyList_Append() and let Cython do the rest --HG-- branch : trunk --- src/lxml/apihelpers.pxi | 5 +++-- src/lxml/extensions.pxi | 32 ++++++++++++++++++-------------- src/lxml/iterparse.pxi | 40 ++++++++++++++++++++-------------------- src/lxml/lxml.etree.pyx | 10 +++++----- src/lxml/lxml.objectify.pyx | 21 ++++++++++----------- src/lxml/nsclasses.pxi | 6 +++--- src/lxml/objectpath.pxi | 23 +++++++++++++---------- src/lxml/parser.pxi | 4 ++-- src/lxml/python.pxd | 2 -- src/lxml/readonlytree.pxi | 15 +++++++-------- src/lxml/saxparser.pxi | 8 ++++---- src/lxml/xmlerror.pxi | 31 +++++++++++++++---------------- src/lxml/xmlid.pxi | 13 +++++++------ src/lxml/xpath.pxi | 6 +++--- src/lxml/xslt.pxi | 5 +++-- src/lxml/xsltext.pxi | 6 +++--- 16 files changed, 116 insertions(+), 111 deletions(-) (limited to 'src/lxml') diff --git a/src/lxml/apihelpers.pxi b/src/lxml/apihelpers.pxi index 9df8e7f0..7d4a9aae 100644 --- a/src/lxml/apihelpers.pxi +++ b/src/lxml/apihelpers.pxi @@ -214,6 +214,7 @@ cdef int _initNodeNamespaces(xmlNode* c_node, _Document doc, cdef xmlNs* c_ns cdef char* c_prefix cdef char* c_href + cdef list nsdefs if not nsmap: if node_ns_utf is not None: doc._setNodeNs(c_node, _cstr(node_ns_utf)) @@ -703,13 +704,13 @@ cdef bint _isFullSlice(python.slice sliceobject): cdef _collectChildren(_Element element): cdef xmlNode* c_node - result = [] + cdef list result = [] c_node = element._c_node.children if c_node is not NULL: if not _isElement(c_node): c_node = _nextElement(c_node) while c_node is not NULL: - python.PyList_Append(result, _elementFactory(element._doc, c_node)) + result.append(_elementFactory(element._doc, c_node)) c_node = _nextElement(c_node) return result diff --git a/src/lxml/extensions.pxi b/src/lxml/extensions.pxi index c1f70b72..477681cf 100644 --- a/src/lxml/extensions.pxi +++ b/src/lxml/extensions.pxi @@ -31,12 +31,12 @@ cdef class _ExsltRegExp cdef class _BaseContext: cdef xpath.xmlXPathContext* _xpathCtxt cdef _Document _doc - cdef object _extensions - cdef object _namespaces - cdef object _global_namespaces - cdef object _utf_refs - cdef object _function_cache - cdef object _eval_context_dict + cdef dict _extensions + cdef list _namespaces + cdef list _global_namespaces + cdef dict _utf_refs + cdef dict _function_cache + cdef dict _eval_context_dict cdef bint _build_smart_strings # for exception handling and temporary reference keeping: cdef _TempStore _temp_refs @@ -45,6 +45,7 @@ cdef class _BaseContext: def __init__(self, namespaces, extensions, enable_regexp, build_smart_strings): cdef _ExsltRegExp _regexp + cdef list ns self._utf_refs = {} self._global_namespaces = [] self._function_cache = {} @@ -80,7 +81,7 @@ cdef class _BaseContext: u"setting default namespace is not supported in XPath" prefix_utf = self._to_utf(prefix) ns_uri_utf = self._to_utf(ns_uri) - python.PyList_Append(ns, (prefix_utf, ns_uri_utf)) + ns.append( (prefix_utf, ns_uri_utf) ) namespaces = ns else: namespaces = None @@ -141,6 +142,7 @@ cdef class _BaseContext: # namespaces (internal UTF-8 methods with leading '_') cdef addNamespace(self, prefix, ns_uri): + cdef list namespaces if prefix is None: raise TypeError, u"empty prefix is not supported in XPath" prefix_utf = self._to_utf(prefix) @@ -154,9 +156,9 @@ cdef class _BaseContext: if item[0] == prefix_utf: item = new_item new_item = None - python.PyList_Append(namespaces, item) + namespaces.append(item) if new_item is not None: - python.PyList_Append(namespaces, new_item) + namespaces.append(new_item) self._namespaces = namespaces if self._xpathCtxt is not NULL: xpath.xmlXPathRegisterNs( @@ -167,7 +169,7 @@ cdef class _BaseContext: raise TypeError, u"empty prefix is not supported in XPath" prefix_utf = self._to_utf(prefix) ns_uri_utf = self._to_utf(ns_uri) - python.PyList_Append(self._global_namespaces, prefix_utf) + self._global_namespaces.append(prefix_utf) xpath.xmlXPathRegisterNs(self._xpathCtxt, _cstr(prefix_utf), _cstr(ns_uri_utf)) @@ -182,7 +184,7 @@ cdef class _BaseContext: ns_prefixes = _find_all_extension_prefixes() if python.PyList_GET_SIZE(ns_prefixes) > 0: for prefix_utf, ns_uri_utf in ns_prefixes: - python.PyList_Append(self._global_namespaces, prefix_utf) + self._global_namespaces.append(prefix_utf) xpath.xmlXPathRegisterNs( self._xpathCtxt, _cstr(prefix_utf), _cstr(ns_uri_utf)) @@ -411,6 +413,7 @@ cdef class _ExsltRegExp: return True def match(self, ctxt, s, rexp, flags=u''): + cdef list result_list flags = self._make_string(flags) s = self._make_string(s) rexpc = self._compile(rexp, u'i' in flags) @@ -432,7 +435,7 @@ cdef class _ExsltRegExp: s_match = join_groups(s_match) elem = SubElement(root, u'match') elem.text = s_match - python.PyList_Append(result_list, elem) + result_list.append(elem) return result_list def replace(self, ctxt, s, rexp, flags, replacement): @@ -672,6 +675,7 @@ cdef void _extension_function_call(_BaseContext context, function, cdef _Document doc cdef xpath.xmlXPathObject* obj cdef int i + cdef list args doc = context._doc try: args = [] @@ -679,8 +683,8 @@ cdef void _extension_function_call(_BaseContext context, function, obj = xpath.valuePop(ctxt) o = _unwrapXPathObject(obj, doc, context._build_smart_strings) _freeXPathObject(obj) - python.PyList_Append(args, o) - python.PyList_Reverse(args) + args.append(o) + args.reverse() res = function(context, *args) # wrap result for XPath consumption diff --git a/src/lxml/iterparse.pxi b/src/lxml/iterparse.pxi index 2b53551e..6f62d8d8 100644 --- a/src/lxml/iterparse.pxi +++ b/src/lxml/iterparse.pxi @@ -40,7 +40,7 @@ cdef int _countNsDefs(xmlNode* c_node): c_ns = c_ns.next return count -cdef int _appendStartNsEvents(xmlNode* c_node, event_list): +cdef int _appendStartNsEvents(xmlNode* c_node, list event_list): cdef xmlNs* c_ns cdef int count count = 0 @@ -54,7 +54,7 @@ cdef int _appendStartNsEvents(xmlNode* c_node, event_list): else: prefix = funicode(c_ns.prefix) ns_tuple = (prefix, funicode(c_ns.href)) - python.PyList_Append(event_list, (u"start-ns", ns_tuple)) + event_list.append( (u"start-ns", ns_tuple) ) count = count + 1 c_ns = c_ns.next return count @@ -69,13 +69,13 @@ cdef class _IterparseContext(_ParserContext): cdef _Element _root cdef _Document _doc cdef int _event_filter - cdef object _events + cdef list _events cdef int _event_index - cdef object _ns_stack + cdef list _ns_stack cdef object _pop_ns - cdef object _node_stack + cdef list _node_stack cdef object _pop_node - cdef object _tag_tuple + cdef tuple _tag_tuple cdef char* _tag_href cdef char* _tag_name @@ -146,7 +146,7 @@ cdef class _IterparseContext(_ParserContext): elif self._event_filter & ITERPARSE_FILTER_END_NS: ns_count = _countNsDefs(c_node) if self._event_filter & ITERPARSE_FILTER_END_NS: - python.PyList_Append(self._ns_stack, ns_count) + self._ns_stack.append(ns_count) if self._root is None: if self._doc is None: self._doc = _documentFactory(c_node.doc, None) @@ -155,9 +155,9 @@ cdef class _IterparseContext(_ParserContext): _tagMatches(c_node, self._tag_href, self._tag_name): node = _elementFactory(self._doc, c_node) if self._event_filter & ITERPARSE_FILTER_END: - python.PyList_Append(self._node_stack, node) + self._node_stack.append(node) if self._event_filter & ITERPARSE_FILTER_START: - python.PyList_Append(self._events, (u"start", node)) + self._events.append( (u"start", node) ) return 0 cdef int endNode(self, xmlNode* c_node) except -1: @@ -176,14 +176,14 @@ cdef class _IterparseContext(_ParserContext): self._doc = _documentFactory(c_node.doc, None) self._root = self._doc.getroot() node = _elementFactory(self._doc, c_node) - python.PyList_Append(self._events, (u"end", node)) + self._events.append( (u"end", node) ) if self._event_filter & ITERPARSE_FILTER_END_NS: ns_count = self._pop_ns() if ns_count > 0: event = (u"end-ns", None) for i from 0 <= i < ns_count: - python.PyList_Append(self._events, event) + self._events.append(event) return 0 cdef int pushEvent(self, event, xmlNode* c_node) except -1: @@ -194,7 +194,7 @@ cdef class _IterparseContext(_ParserContext): if root is not None and root._c_node.type == tree.XML_ELEMENT_NODE: self._root = root node = _elementFactory(self._doc, c_node) - python.PyList_Append(self._events, (event, node)) + self._events.append( (event, node) ) return 0 cdef void _assureDocGetsFreed(self): @@ -526,13 +526,13 @@ cdef class iterwalk: A tree walker that generates events from an existing tree as if it was parsing XML data with ``iterparse()``. """ - cdef object _node_stack + cdef list _node_stack cdef object _pop_node cdef int _index - cdef object _events + cdef list _events cdef object _pop_event cdef int _event_filter - cdef object _tag_tuple + cdef tuple _tag_tuple cdef char* _tag_href cdef char* _tag_name @@ -550,7 +550,7 @@ cdef class iterwalk: if self._event_filter != 0: self._index = 0 ns_count = self._start_node(root) - python.PyList_Append(self._node_stack, (root, ns_count)) + self._node_stack.append( (root, ns_count) ) else: self._index = -1 @@ -607,7 +607,7 @@ cdef class iterwalk: ns_count = self._start_node(next_node) elif self._event_filter & ITERPARSE_FILTER_END_NS: ns_count = _countNsDefs(next_node._c_node) - python.PyList_Append(self._node_stack, (next_node, ns_count)) + self._node_stack.append( (next_node, ns_count) ) self._index = self._index + 1 if python.PyList_GET_SIZE(self._events): return self._pop_event(0) @@ -624,7 +624,7 @@ cdef class iterwalk: if self._event_filter & ITERPARSE_FILTER_START: if self._tag_tuple is None or \ _tagMatches(node._c_node, self._tag_href, self._tag_name): - python.PyList_Append(self._events, (u"start", node)) + self._events.append( (u"start", node) ) return ns_count cdef _Element _end_node(self): @@ -634,9 +634,9 @@ cdef class iterwalk: if self._event_filter & ITERPARSE_FILTER_END: if self._tag_tuple is None or \ _tagMatches(node._c_node, self._tag_href, self._tag_name): - python.PyList_Append(self._events, (u"end", node)) + self._events.append( (u"end", node) ) if self._event_filter & ITERPARSE_FILTER_END_NS: event = (u"end-ns", None) for i from 0 <= i < ns_count: - python.PyList_Append(self._events, event) + self._events.append(event) return node diff --git a/src/lxml/lxml.etree.pyx b/src/lxml/lxml.etree.pyx index b7ccabc9..7a184878 100644 --- a/src/lxml/lxml.etree.pyx +++ b/src/lxml/lxml.etree.pyx @@ -143,7 +143,7 @@ class C14NError(LxmlError): # version information cdef __unpackDottedVersion(version): - version_list = [] + cdef list version_list = [] l = (version.decode(u"ASCII").replace(u'-', u'.').split(u'.') + [0]*4)[:4] for item in l: try: @@ -189,12 +189,12 @@ __version__ = (tree.LXML_VERSION_STRING).decode(u"ASCII") # class for temporary storage of Python references cdef class _TempStore: - cdef object _storage + cdef list _storage def __init__(self): self._storage = [] cdef int add(self, obj) except -1: - python.PyList_Append(self._storage, obj) + self._storage.append(obj) return 0 cdef int clear(self) except -1: @@ -903,6 +903,7 @@ cdef public class _Element [ type LxmlElementType, object LxmlElement ]: cdef Py_ssize_t step, slicelength cdef Py_ssize_t c, i cdef _node_to_node_function next_element + cdef list result if python.PySlice_Check(x): # slicing if _isFullSlice(x): @@ -918,8 +919,7 @@ cdef public class _Element [ type LxmlElementType, object LxmlElement ]: result = [] c = 0 while c_node is not NULL and c < slicelength: - python.PyList_Append( - result, _elementFactory(self._doc, c_node)) + result.append(_elementFactory(self._doc, c_node)) c = c + 1 for i from 0 <= i < step: c_node = next_element(c_node) diff --git a/src/lxml/lxml.objectify.pyx b/src/lxml/lxml.objectify.pyx index fd42073c..4e8d8f3e 100644 --- a/src/lxml/lxml.objectify.pyx +++ b/src/lxml/lxml.objectify.pyx @@ -195,12 +195,11 @@ cdef class ObjectifiedElement(ElementBase): returned in document order. """ cdef tree.xmlNode* c_node - result = [] + cdef list result = [] c_node = self._c_node.children while c_node is not NULL: if tree._isElement(c_node): - python.PyList_Append( - result, cetree.elementFactory(self._doc, c_node)) + result.append(cetree.elementFactory(self._doc, c_node)) c_node = c_node.next return result @@ -546,6 +545,7 @@ cdef _setSlice(slice, _Element target, items): cdef _Element parent cdef tree.xmlNode* c_node cdef Py_ssize_t c_step, c_start, pos + cdef list new_items # collect existing slice if (slice).step is None: c_step = 1 @@ -568,7 +568,7 @@ cdef _setSlice(slice, _Element target, items): new_element = cetree.makeElement( tag, target._doc, None, None, None, None, None) _setElementValue(new_element, item) - python.PyList_Append(new_items, new_element) + new_items.append(new_element) # sanity check - raise what a list would raise if c_step != 1 and \ @@ -1110,19 +1110,18 @@ def getRegisteredTypes(): check functions, you can simply register() it, which will append it to the end of the type list. """ - types = [] - known = set() - add_to_known = known.add + cdef list types = [] + cdef set known = set() for check, pytype in _TYPE_CHECKS: name = pytype.name if name not in known: - add_to_known(name) - python.PyList_Append(types, pytype) + known.add(name) + types.append(pytype) for pytype in _PYTYPE_DICT.values(): name = pytype.name if name not in known: - add_to_known(name) - python.PyList_Append(types, pytype) + known.add(name) + types.append(pytype) return types cdef PyType _guessPyType(value, PyType defaulttype): diff --git a/src/lxml/nsclasses.pxi b/src/lxml/nsclasses.pxi index 038b81e8..c54f5b79 100644 --- a/src/lxml/nsclasses.pxi +++ b/src/lxml/nsclasses.pxi @@ -222,12 +222,12 @@ cdef class _XPathFunctionNamespaceRegistry(_FunctionNamespaceRegistry): cdef object _find_all_extension_prefixes(): u"Internal lookup function to find all function prefixes for XSLT/XPath." cdef _XPathFunctionNamespaceRegistry registry - ns_prefixes = [] + cdef list ns_prefixes = [] for registry in __FUNCTION_NAMESPACE_REGISTRIES.values(): if registry._prefix_utf is not None: if registry._ns_uri_utf is not None: - python.PyList_Append( - ns_prefixes, (registry._prefix_utf, registry._ns_uri_utf)) + ns_prefixes.append( + (registry._prefix_utf, registry._ns_uri_utf)) return ns_prefixes cdef object _iter_ns_extension_functions(): diff --git a/src/lxml/objectpath.pxi b/src/lxml/objectpath.pxi index 1f078bec..a2916ac6 100644 --- a/src/lxml/objectpath.pxi +++ b/src/lxml/objectpath.pxi @@ -92,7 +92,7 @@ cdef _parseObjectPathString(path): u"""Parse object path string into a (ns, name, index) list. """ cdef bint has_dot - new_path = [] + cdef list new_path = [] if python.PyString_Check(path): path = python.PyUnicode_FromEncodedObject(path, 'ASCII', NULL) path = path.strip() @@ -113,7 +113,7 @@ cdef _parseObjectPathString(path): if python.PyList_GET_SIZE(new_path) == 0: if has_dot: # path '.child' => ignore root - python.PyList_Append(new_path, _RELATIVE_PATH_SEGMENT) + new_path.append(_RELATIVE_PATH_SEGMENT) elif index != 0: raise ValueError, u"index not allowed on root node" elif not has_dot: @@ -121,7 +121,7 @@ cdef _parseObjectPathString(path): if ns is not None: ns = python.PyUnicode_AsUTF8String(ns) name = python.PyUnicode_AsUTF8String(name) - python.PyList_Append(new_path, (ns, name, index)) + new_path.append( (ns, name, index) ) path_pos = match.end() if python.PyList_GET_SIZE(new_path) == 0 or \ @@ -135,7 +135,7 @@ cdef _parseObjectPathList(path): cdef char* index_pos cdef char* index_end cdef char* c_name - new_path = [] + cdef list new_path = [] for item in path: item = item.strip() if python.PyList_GET_SIZE(new_path) == 0 and item == u'': @@ -159,7 +159,7 @@ cdef _parseObjectPathList(path): raise ValueError, u"index not allowed on root node" name = python.PyString_FromStringAndSize( c_name, (index_pos - c_name)) - python.PyList_Append(new_path, (ns, name, index)) + new_path.append( (ns, name, index) ) if python.PyList_GET_SIZE(new_path) == 0: raise ValueError, u"invalid path" return new_path @@ -302,9 +302,10 @@ cdef _createObjectPath(_Element root, _ObjectPath* c_path, _appendValue(cetree.elementFactory(root._doc, c_node.parent), cetree.namespacedName(c_node), value) -cdef _buildDescendantPaths(tree.xmlNode* c_node, prefix_string): +cdef list _buildDescendantPaths(tree.xmlNode* c_node, prefix_string): u"""Returns a list of all descendant paths. """ + cdef list path, path_list tag = cetree.namespacedName(c_node) if prefix_string: if prefix_string[-1] != u'.': @@ -317,14 +318,15 @@ cdef _buildDescendantPaths(tree.xmlNode* c_node, prefix_string): _recursiveBuildDescendantPaths(c_node, path, path_list) return path_list -cdef _recursiveBuildDescendantPaths(tree.xmlNode* c_node, path, path_list): +cdef int _recursiveBuildDescendantPaths(tree.xmlNode* c_node, + list path, list path_list) except -1: u"""Fills the list 'path_list' with all descendant paths, initial prefix being in the list 'path'. """ cdef python.PyObject* dict_result cdef tree.xmlNode* c_child cdef char* c_href - python.PyList_Append(path_list, u'.'.join(path)) + path_list.append( u'.'.join(path) ) tags = {} c_href = tree._getNs(c_node) c_child = c_node.children @@ -332,7 +334,7 @@ cdef _recursiveBuildDescendantPaths(tree.xmlNode* c_node, path, path_list): while c_child.type != tree.XML_ELEMENT_NODE: c_child = c_child.next if c_child is NULL: - return + return 0 if c_href is tree._getNs(c_child): tag = pyunicode(c_child.name) elif c_href is not NULL and tree._getNs(c_child) is NULL: @@ -348,7 +350,8 @@ cdef _recursiveBuildDescendantPaths(tree.xmlNode* c_node, path, path_list): python.PyDict_SetItem(tags, tag, count) if count > 0: tag += u'[%d]' % count - python.PyList_Append(path, tag) + path.append(tag) _recursiveBuildDescendantPaths(c_child, path, path_list) del path[-1] c_child = c_child.next + return 0 diff --git a/src/lxml/parser.pxi b/src/lxml/parser.pxi index 0ca5741b..ffe90df7 100644 --- a/src/lxml/parser.pxi +++ b/src/lxml/parser.pxi @@ -49,7 +49,7 @@ cdef class _ParserDictionaryContext: cdef tree.xmlDict* _c_dict cdef _BaseParser _default_parser - cdef object _implied_parser_contexts + cdef list _implied_parser_contexts def __init__(self): self._implied_parser_contexts = [] @@ -174,7 +174,7 @@ cdef class _ParserDictionaryContext: u"Push a new implied context object." cdef _ParserDictionaryContext context context = self._findThreadParserContext() - python.PyList_Append(context._implied_parser_contexts, parser_context) + context._implied_parser_contexts.append(parser_context) cdef void popImpliedContext(self): u"Pop the current implied context object." diff --git a/src/lxml/python.pxd b/src/lxml/python.pxd index d100ad84..8bc20e68 100644 --- a/src/lxml/python.pxd +++ b/src/lxml/python.pxd @@ -55,8 +55,6 @@ cdef extern from "Python.h": cdef Py_ssize_t PyList_GET_SIZE(object l) cdef object PyList_GET_ITEM(object l, Py_ssize_t index) cdef void PyList_SET_ITEM(object l, Py_ssize_t index, object value) - cdef int PyList_Append(object l, object obj) except -1 - cdef int PyList_Reverse(object l) except -1 cdef int PyList_Insert(object l, Py_ssize_t index, object o) except -1 cdef object PyList_AsTuple(object l) cdef void PyList_Clear(object l) diff --git a/src/lxml/readonlytree.pxi b/src/lxml/readonlytree.pxi index 77d86339..807cdbb7 100644 --- a/src/lxml/readonlytree.pxi +++ b/src/lxml/readonlytree.pxi @@ -5,7 +5,7 @@ cdef class _ReadOnlyElementProxy: cdef bint _free_after_use cdef xmlNode* _c_node cdef object _source_proxy - cdef object _dependent_proxies + cdef list _dependent_proxies cdef int _assertNode(self) except -1: u"""This is our way of saying: this proxy is invalid! @@ -80,6 +80,7 @@ cdef class _ReadOnlyElementProxy: cdef Py_ssize_t step, slicelength cdef Py_ssize_t c, i cdef _node_to_node_function next_element + cdef list result if python.PySlice_Check(x): # slicing if _isFullSlice(x): @@ -95,10 +96,8 @@ cdef class _ReadOnlyElementProxy: result = [] c = 0 while c_node is not NULL and c < slicelength: - python.PyList_Append( - result, _newReadOnlyProxy(self._source_proxy, c_node)) - python.PyList_Append( - result, _elementFactory(self._doc, c_node)) + result.append(_newReadOnlyProxy(self._source_proxy, c_node)) + result.append(_elementFactory(self._doc, c_node)) c = c + 1 for i from 0 <= i < step: c_node = next_element(c_node) @@ -199,13 +198,13 @@ cdef class _ReadOnlyElementProxy: order. """ cdef xmlNode* c_node + cdef list result self._assertNode() result = [] c_node = self._c_node.children while c_node is not NULL: if tree._isElement(c_node): - python.PyList_Append( - result, _newReadOnlyProxy(self._source_proxy, c_node)) + result.append(_newReadOnlyProxy(self._source_proxy, c_node)) c_node = c_node.next return result @@ -261,7 +260,7 @@ cdef inline _initReadOnlyProxy(_ReadOnlyElementProxy el, el._dependent_proxies = [el] else: el._source_proxy = source_proxy - python.PyList_Append(source_proxy._dependent_proxies, el) + source_proxy._dependent_proxies.append(el) cdef _freeReadOnlyProxies(_ReadOnlyElementProxy sourceProxy): cdef xmlNode* c_node diff --git a/src/lxml/saxparser.pxi b/src/lxml/saxparser.pxi index 1150e441..9fb2b17d 100644 --- a/src/lxml/saxparser.pxi +++ b/src/lxml/saxparser.pxi @@ -336,8 +336,8 @@ cdef class TreeBuilder(_SaxParserTarget): """ cdef _BaseParser _parser cdef object _factory - cdef object _data - cdef object _element_stack + cdef list _data + cdef list _element_stack cdef object _element_stack_pop cdef _Element _last cdef bint _in_tail @@ -431,7 +431,7 @@ cdef class TreeBuilder(_SaxParserTarget): else: self._last = _makeElement( tag, NULL, None, self._parser, None, None, attrib, nsmap, None) - python.PyList_Append(self._element_stack, self._last) + self._element_stack.append(self._last) self._in_tail = 0 return self._last @@ -442,7 +442,7 @@ cdef class TreeBuilder(_SaxParserTarget): return self._last cdef int _handleSaxData(self, data) except -1: - python.PyList_Append(self._data, data) + self._data.append(data) cdef _handleSaxPi(self, target, data): self._flush() diff --git a/src/lxml/xmlerror.pxi b/src/lxml/xmlerror.pxi index 6877fd31..11856c74 100644 --- a/src/lxml/xmlerror.pxi +++ b/src/lxml/xmlerror.pxi @@ -179,7 +179,7 @@ cdef class _BaseErrorLog: cdef class _ListErrorLog(_BaseErrorLog): u"Immutable base version of a list based error log." - cdef object _entries + cdef list _entries def __init__(self, entries, first_error, last_error): if entries: if first_error is None: @@ -199,9 +199,9 @@ cdef class _ListErrorLog(_BaseErrorLog): return iter(self._entries) def __repr__(self): - l = [] + cdef list l = [] for entry in self._entries: - python.PyList_Append(l, repr(entry)) + l.append(repr(entry)) return u'\n'.join(l) def __getitem__(self, index): @@ -226,12 +226,12 @@ cdef class _ListErrorLog(_BaseErrorLog): containing the matches. """ cdef _LogEntry entry - filtered = [] + cdef list filtered = [] if not python.PySequence_Check(domains): domains = (domains,) for entry in self._entries: if entry.domain in domains: - python.PyList_Append(filtered, entry) + filtered.append(entry) return _ListErrorLog(filtered, None, None) def filter_types(self, types): @@ -241,12 +241,12 @@ cdef class _ListErrorLog(_BaseErrorLog): log containing the matches. """ cdef _LogEntry entry + cdef list filtered = [] if not python.PySequence_Check(types): types = (types,) - filtered = [] for entry in self._entries: if entry.type in types: - python.PyList_Append(filtered, entry) + filtered.append(entry) return _ListErrorLog(filtered, None, None) def filter_levels(self, levels): @@ -256,12 +256,12 @@ cdef class _ListErrorLog(_BaseErrorLog): error log containing the matches. """ cdef _LogEntry entry + cdef list filtered = [] if not python.PySequence_Check(levels): levels = (levels,) - filtered = [] for entry in self._entries: if entry.level in levels: - python.PyList_Append(filtered, entry) + filtered.append(entry) return _ListErrorLog(filtered, None, None) def filter_from_level(self, level): @@ -270,10 +270,10 @@ cdef class _ListErrorLog(_BaseErrorLog): Return a log with all messages of the requested level of worse. """ cdef _LogEntry entry - filtered = [] + cdef list filtered = [] for entry in self._entries: if entry.level >= level: - python.PyList_Append(filtered, entry) + filtered.append(entry) return _ListErrorLog(filtered, None, None) def filter_from_fatals(self): @@ -325,7 +325,7 @@ cdef class _ErrorLog(_ListErrorLog): def receive(self, entry): if self._first_error is None: self._first_error = entry - python.PyList_Append(self._entries, entry) + self._entries.append(entry) cdef class _DomainErrorLog(_ErrorLog): def __init__(self, domains): @@ -343,10 +343,9 @@ cdef class _RotatingErrorLog(_ErrorLog): self._max_len = max_len def receive(self, entry): - entries = self._entries - if python.PyList_GET_SIZE(entries) > self._max_len: - del entries[0] - python.PyList_Append(entries, entry) + if python.PyList_GET_SIZE(self._entries) > self._max_len: + del self._entries[0] + self._entries.append(entry) cdef class PyErrorLog(_BaseErrorLog): u"""PyErrorLog(self, logger_name=None) diff --git a/src/lxml/xmlid.pxi b/src/lxml/xmlid.pxi index 7dab7b04..ebf74b9f 100644 --- a/src/lxml/xmlid.pxi +++ b/src/lxml/xmlid.pxi @@ -142,13 +142,13 @@ cdef class _IDDict: return iter(self._items) def values(self): + cdef list values = [] if self._items is None: self._items = self._build_items() - values = [] for item in self._items: value = python.PyTuple_GET_ITEM(item, 1) python.Py_INCREF(value) - python.PyList_Append(values, value) + values.append(value) return values def itervalues(self): @@ -173,23 +173,24 @@ cdef void _collectIdHashItemDict(void* payload, void* context, char* name): c_id = payload if c_id is NULL or c_id.attr is NULL or c_id.attr.parent is NULL: return - dic, doc = context + dic, doc = context element = _elementFactory(doc, c_id.attr.parent) python.PyDict_SetItem(dic, funicode(name), element) cdef void _collectIdHashItemList(void* payload, void* context, char* name): # collect elements from ID attribute hash table cdef tree.xmlID* c_id + cdef list lst c_id = payload if c_id is NULL or c_id.attr is NULL or c_id.attr.parent is NULL: return - lst, doc = context + lst, doc = context element = _elementFactory(doc, c_id.attr.parent) - python.PyList_Append(lst, (funicode(name), element)) + lst.append( (funicode(name), element) ) cdef void _collectIdHashKeys(void* payload, void* collect_list, char* name): cdef tree.xmlID* c_id c_id = payload if c_id is NULL or c_id.attr is NULL or c_id.attr.parent is NULL: return - python.PyList_Append(collect_list, funicode(name)) + (collect_list).append(funicode(name)) diff --git a/src/lxml/xpath.pxi b/src/lxml/xpath.pxi index e46bdb7c..063a3d08 100644 --- a/src/lxml/xpath.pxi +++ b/src/lxml/xpath.pxi @@ -459,17 +459,17 @@ cdef class ETXPath(XPath): cdef _nsextract_path(self, path): # replace {namespaces} by new prefixes + cdef dict namespaces = {} + cdef list namespace_defs = [] cdef int i path_utf = _utf8(path) stripped_path = _replace_strings('', path_utf) # remove string literals - namespaces = {} - namespace_defs = [] i = 1 for namespace_def in _find_namespaces(stripped_path): if namespace_def not in namespace_defs: prefix = python.PyString_FromFormat("__xpp%02d", i) i += 1 - python.PyList_Append(namespace_defs, namespace_def) + namespace_defs.append(namespace_def) namespace = namespace_def[1:-1] # remove '{}' namespace = python.PyUnicode_FromEncodedObject( namespace, 'UTF-8', 'strict') diff --git a/src/lxml/xslt.pxi b/src/lxml/xslt.pxi index 94ce4f8f..f8975111 100644 --- a/src/lxml/xslt.pxi +++ b/src/lxml/xslt.pxi @@ -552,6 +552,7 @@ cdef class XSLT: cdef xmlDoc* c_result cdef char** params cdef Py_ssize_t i, parameter_count + cdef list keep_ref xslt.xsltSetTransformErrorFunc(transform_ctxt, self._error_log, _receiveXSLTError) @@ -571,9 +572,9 @@ cdef class XSLT: keep_ref = [] for key, value in parameters.items(): k = _utf8(key) - python.PyList_Append(keep_ref, k) + keep_ref.append(k) v = _utf8(value) - python.PyList_Append(keep_ref, v) + keep_ref.append(v) params[i] = _cstr(k) i += 1 params[i] = _cstr(v) diff --git a/src/lxml/xsltext.pxi b/src/lxml/xsltext.pxi index cfa95f79..ac77309b 100644 --- a/src/lxml/xsltext.pxi +++ b/src/lxml/xsltext.pxi @@ -29,6 +29,7 @@ cdef class XSLTExtension: cdef xmlNode* c_next cdef xmlNode* c_context_node cdef _ReadOnlyElementProxy proxy + cdef list results c_context_node = _roNodeOf(node) #assert c_context_node.doc is context._xsltContext.node.doc, \ # "switching input documents during transformation is not currently supported" @@ -48,12 +49,11 @@ cdef class XSLTExtension: while c_node is not NULL: c_next = c_node.next if c_node.type == tree.XML_TEXT_NODE: - python.PyList_Append( - results, funicode(c_node.content)) + results.append(funicode(c_node.content)) elif c_node.type == tree.XML_ELEMENT_NODE: proxy = _newReadOnlyProxy( context._extension_element_proxy, c_node) - python.PyList_Append(results, proxy) + results.append(proxy) # unlink node and make sure it will be freed later on tree.xmlUnlinkNode(c_node) proxy.free_after_use() -- cgit v1.2.1