summaryrefslogtreecommitdiff
path: root/src/lxml
diff options
context:
space:
mode:
authorscoder <none@none>2008-11-17 23:23:45 +0100
committerscoder <none@none>2008-11-17 23:23:45 +0100
commit43769d64c53e4c8a3f4aafe23112f28deaa7d414 (patch)
tree7ae9c457ce2c01b48fb04ed5489e2b5a17510513 /src/lxml
parent327c20ae6fe61bf38cc40627d678b2b8929e4f9f (diff)
downloadpython-lxml-43769d64c53e4c8a3f4aafe23112f28deaa7d414.tar.gz
[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
Diffstat (limited to 'src/lxml')
-rw-r--r--src/lxml/apihelpers.pxi5
-rw-r--r--src/lxml/extensions.pxi32
-rw-r--r--src/lxml/iterparse.pxi40
-rw-r--r--src/lxml/lxml.etree.pyx10
-rw-r--r--src/lxml/lxml.objectify.pyx21
-rw-r--r--src/lxml/nsclasses.pxi6
-rw-r--r--src/lxml/objectpath.pxi23
-rw-r--r--src/lxml/parser.pxi4
-rw-r--r--src/lxml/python.pxd2
-rw-r--r--src/lxml/readonlytree.pxi15
-rw-r--r--src/lxml/saxparser.pxi8
-rw-r--r--src/lxml/xmlerror.pxi31
-rw-r--r--src/lxml/xmlid.pxi13
-rw-r--r--src/lxml/xpath.pxi6
-rw-r--r--src/lxml/xslt.pxi5
-rw-r--r--src/lxml/xsltext.pxi6
16 files changed, 116 insertions, 111 deletions
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(<python.slice>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 (<python.slice>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, <Py_ssize_t>(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(<python.slice>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 = <tree.xmlID*>payload
if c_id is NULL or c_id.attr is NULL or c_id.attr.parent is NULL:
return
- dic, doc = <object>context
+ dic, doc = <tuple>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 = <tree.xmlID*>payload
if c_id is NULL or c_id.attr is NULL or c_id.attr.parent is NULL:
return
- lst, doc = <object>context
+ lst, doc = <tuple>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 = <tree.xmlID*>payload
if c_id is NULL or c_id.attr is NULL or c_id.attr.parent is NULL:
return
- python.PyList_Append(<object>collect_list, funicode(name))
+ (<list>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, <void*>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()