mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	bpo-36543: Remove old-deprecated ElementTree features. (GH-12707)
Remove methods Element.getchildren(), Element.getiterator() and ElementTree.getiterator() and the xml.etree.cElementTree module.
This commit is contained in:
		
							parent
							
								
									c5b242f87f
								
							
						
					
					
						commit
						f02ea6225b
					
				
					 7 changed files with 19 additions and 213 deletions
				
			
		| 
						 | 
					@ -873,18 +873,6 @@ Element Objects
 | 
				
			||||||
      in the expression into the given namespace.
 | 
					      in the expression into the given namespace.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   .. method:: getchildren()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      .. deprecated-removed:: 3.2 3.9
 | 
					 | 
				
			||||||
         Use ``list(elem)`` or iteration.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   .. method:: getiterator(tag=None)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      .. deprecated-removed:: 3.2 3.9
 | 
					 | 
				
			||||||
         Use method :meth:`Element.iter` instead.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   .. method:: insert(index, subelement)
 | 
					   .. method:: insert(index, subelement)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      Inserts *subelement* at the given position in this element.  Raises
 | 
					      Inserts *subelement* at the given position in this element.  Raises
 | 
				
			||||||
| 
						 | 
					@ -1019,12 +1007,6 @@ ElementTree Objects
 | 
				
			||||||
      Same as :meth:`Element.findtext`, starting at the root of the tree.
 | 
					      Same as :meth:`Element.findtext`, starting at the root of the tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   .. method:: getiterator(tag=None)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      .. deprecated-removed:: 3.2 3.9
 | 
					 | 
				
			||||||
         Use method :meth:`ElementTree.iter` instead.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   .. method:: getroot()
 | 
					   .. method:: getroot()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      Returns the root element for this tree.
 | 
					      Returns the root element for this tree.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -207,6 +207,12 @@ Removed
 | 
				
			||||||
  Use :meth:`~threading.Thread.is_alive()` instead.
 | 
					  Use :meth:`~threading.Thread.is_alive()` instead.
 | 
				
			||||||
  (Contributed by Dong-hee Na in :issue:`37804`.)
 | 
					  (Contributed by Dong-hee Na in :issue:`37804`.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Methods ``getchildren()`` and ``getiterator()`` in the
 | 
				
			||||||
 | 
					  :mod:`~xml.etree.ElementTree` module have been removed.  They were
 | 
				
			||||||
 | 
					  deprecated in Python 3.2.  Use functions :func:`list` and :func:`iter`
 | 
				
			||||||
 | 
					  instead.  The ``xml.etree.cElementTree`` module has been removed.
 | 
				
			||||||
 | 
					  (Contributed by Serhiy Storchaka in :issue:`36543`.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Porting to Python 3.9
 | 
					Porting to Python 3.9
 | 
				
			||||||
=====================
 | 
					=====================
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -242,7 +242,6 @@ class ElementTreeTest(unittest.TestCase):
 | 
				
			||||||
        check_method(element.extend)
 | 
					        check_method(element.extend)
 | 
				
			||||||
        check_method(element.insert)
 | 
					        check_method(element.insert)
 | 
				
			||||||
        check_method(element.remove)
 | 
					        check_method(element.remove)
 | 
				
			||||||
        check_method(element.getchildren)
 | 
					 | 
				
			||||||
        check_method(element.find)
 | 
					        check_method(element.find)
 | 
				
			||||||
        check_method(element.iterfind)
 | 
					        check_method(element.iterfind)
 | 
				
			||||||
        check_method(element.findall)
 | 
					        check_method(element.findall)
 | 
				
			||||||
| 
						 | 
					@ -254,7 +253,6 @@ class ElementTreeTest(unittest.TestCase):
 | 
				
			||||||
        check_method(element.items)
 | 
					        check_method(element.items)
 | 
				
			||||||
        check_method(element.iter)
 | 
					        check_method(element.iter)
 | 
				
			||||||
        check_method(element.itertext)
 | 
					        check_method(element.itertext)
 | 
				
			||||||
        check_method(element.getiterator)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # These methods return an iterable. See bug 6472.
 | 
					        # These methods return an iterable. See bug 6472.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -741,24 +739,20 @@ class ElementTreeTest(unittest.TestCase):
 | 
				
			||||||
                ('end-ns', ''),
 | 
					                ('end-ns', ''),
 | 
				
			||||||
            ])
 | 
					            ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Element.getchildren() and ElementTree.getiterator() are deprecated.
 | 
					    def test_children(self):
 | 
				
			||||||
    @checkwarnings(("This method will be removed in future versions.  "
 | 
					        # Test Element children iteration
 | 
				
			||||||
                    "Use .+ instead.",
 | 
					 | 
				
			||||||
                    DeprecationWarning))
 | 
					 | 
				
			||||||
    def test_getchildren(self):
 | 
					 | 
				
			||||||
        # Test Element.getchildren()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        with open(SIMPLE_XMLFILE, "rb") as f:
 | 
					        with open(SIMPLE_XMLFILE, "rb") as f:
 | 
				
			||||||
            tree = ET.parse(f)
 | 
					            tree = ET.parse(f)
 | 
				
			||||||
        self.assertEqual([summarize_list(elem.getchildren())
 | 
					        self.assertEqual([summarize_list(elem)
 | 
				
			||||||
                          for elem in tree.getroot().iter()], [
 | 
					                          for elem in tree.getroot().iter()], [
 | 
				
			||||||
                ['element', 'element', 'empty-element'],
 | 
					                ['element', 'element', 'empty-element'],
 | 
				
			||||||
                [],
 | 
					                [],
 | 
				
			||||||
                [],
 | 
					                [],
 | 
				
			||||||
                [],
 | 
					                [],
 | 
				
			||||||
            ])
 | 
					            ])
 | 
				
			||||||
        self.assertEqual([summarize_list(elem.getchildren())
 | 
					        self.assertEqual([summarize_list(elem)
 | 
				
			||||||
                          for elem in tree.getiterator()], [
 | 
					                          for elem in tree.iter()], [
 | 
				
			||||||
                ['element', 'element', 'empty-element'],
 | 
					                ['element', 'element', 'empty-element'],
 | 
				
			||||||
                [],
 | 
					                [],
 | 
				
			||||||
                [],
 | 
					                [],
 | 
				
			||||||
| 
						 | 
					@ -766,13 +760,13 @@ class ElementTreeTest(unittest.TestCase):
 | 
				
			||||||
            ])
 | 
					            ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        elem = ET.XML(SAMPLE_XML)
 | 
					        elem = ET.XML(SAMPLE_XML)
 | 
				
			||||||
        self.assertEqual(len(elem.getchildren()), 3)
 | 
					        self.assertEqual(len(list(elem)), 3)
 | 
				
			||||||
        self.assertEqual(len(elem[2].getchildren()), 1)
 | 
					        self.assertEqual(len(list(elem[2])), 1)
 | 
				
			||||||
        self.assertEqual(elem[:], elem.getchildren())
 | 
					        self.assertEqual(elem[:], list(elem))
 | 
				
			||||||
        child1 = elem[0]
 | 
					        child1 = elem[0]
 | 
				
			||||||
        child2 = elem[2]
 | 
					        child2 = elem[2]
 | 
				
			||||||
        del elem[1:2]
 | 
					        del elem[1:2]
 | 
				
			||||||
        self.assertEqual(len(elem.getchildren()), 2)
 | 
					        self.assertEqual(len(list(elem)), 2)
 | 
				
			||||||
        self.assertEqual(child1, elem[0])
 | 
					        self.assertEqual(child1, elem[0])
 | 
				
			||||||
        self.assertEqual(child2, elem[1])
 | 
					        self.assertEqual(child2, elem[1])
 | 
				
			||||||
        elem[0:2] = [child2, child1]
 | 
					        elem[0:2] = [child2, child1]
 | 
				
			||||||
| 
						 | 
					@ -780,7 +774,7 @@ class ElementTreeTest(unittest.TestCase):
 | 
				
			||||||
        self.assertEqual(child1, elem[1])
 | 
					        self.assertEqual(child1, elem[1])
 | 
				
			||||||
        self.assertNotEqual(child1, elem[0])
 | 
					        self.assertNotEqual(child1, elem[0])
 | 
				
			||||||
        elem.clear()
 | 
					        elem.clear()
 | 
				
			||||||
        self.assertEqual(elem.getchildren(), [])
 | 
					        self.assertEqual(list(elem), [])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_writestring(self):
 | 
					    def test_writestring(self):
 | 
				
			||||||
        elem = ET.XML("<html><body>text</body></html>")
 | 
					        elem = ET.XML("<html><body>text</body></html>")
 | 
				
			||||||
| 
						 | 
					@ -2955,40 +2949,6 @@ class ElementIterTest(unittest.TestCase):
 | 
				
			||||||
        self.assertEqual(self._ilist(doc), all_tags)
 | 
					        self.assertEqual(self._ilist(doc), all_tags)
 | 
				
			||||||
        self.assertEqual(self._ilist(doc, '*'), all_tags)
 | 
					        self.assertEqual(self._ilist(doc, '*'), all_tags)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Element.getiterator() is deprecated.
 | 
					 | 
				
			||||||
    @checkwarnings(("This method will be removed in future versions.  "
 | 
					 | 
				
			||||||
                    "Use .+ instead.", DeprecationWarning))
 | 
					 | 
				
			||||||
    def test_getiterator(self):
 | 
					 | 
				
			||||||
        doc = ET.XML('''
 | 
					 | 
				
			||||||
            <document>
 | 
					 | 
				
			||||||
                <house>
 | 
					 | 
				
			||||||
                    <room>bedroom1</room>
 | 
					 | 
				
			||||||
                    <room>bedroom2</room>
 | 
					 | 
				
			||||||
                </house>
 | 
					 | 
				
			||||||
                <shed>nothing here
 | 
					 | 
				
			||||||
                </shed>
 | 
					 | 
				
			||||||
                <house>
 | 
					 | 
				
			||||||
                    <room>bedroom8</room>
 | 
					 | 
				
			||||||
                </house>
 | 
					 | 
				
			||||||
            </document>''')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.assertEqual(summarize_list(doc.getiterator('room')),
 | 
					 | 
				
			||||||
                         ['room'] * 3)
 | 
					 | 
				
			||||||
        self.assertEqual(summarize_list(doc.getiterator('house')),
 | 
					 | 
				
			||||||
                         ['house'] * 2)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # test that getiterator also accepts 'tag' as a keyword arg
 | 
					 | 
				
			||||||
        self.assertEqual(
 | 
					 | 
				
			||||||
            summarize_list(doc.getiterator(tag='room')),
 | 
					 | 
				
			||||||
            ['room'] * 3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # make sure both tag=None and tag='*' return all tags
 | 
					 | 
				
			||||||
        all_tags = ['document', 'house', 'room', 'room',
 | 
					 | 
				
			||||||
                    'shed', 'house', 'room']
 | 
					 | 
				
			||||||
        self.assertEqual(summarize_list(doc.getiterator()), all_tags)
 | 
					 | 
				
			||||||
        self.assertEqual(summarize_list(doc.getiterator(None)), all_tags)
 | 
					 | 
				
			||||||
        self.assertEqual(summarize_list(doc.getiterator('*')), all_tags)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_copy(self):
 | 
					    def test_copy(self):
 | 
				
			||||||
        a = ET.Element('a')
 | 
					        a = ET.Element('a')
 | 
				
			||||||
        it = a.iter()
 | 
					        it = a.iter()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -273,19 +273,6 @@ class Element:
 | 
				
			||||||
        # assert iselement(element)
 | 
					        # assert iselement(element)
 | 
				
			||||||
        self._children.remove(subelement)
 | 
					        self._children.remove(subelement)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def getchildren(self):
 | 
					 | 
				
			||||||
        """(Deprecated) Return all subelements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Elements are returned in document order.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        warnings.warn(
 | 
					 | 
				
			||||||
            "This method will be removed in future versions.  "
 | 
					 | 
				
			||||||
            "Use 'list(elem)' or iteration over elem instead.",
 | 
					 | 
				
			||||||
            DeprecationWarning, stacklevel=2
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        return self._children
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def find(self, path, namespaces=None):
 | 
					    def find(self, path, namespaces=None):
 | 
				
			||||||
        """Find first matching element by tag name or path.
 | 
					        """Find first matching element by tag name or path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -409,15 +396,6 @@ class Element:
 | 
				
			||||||
        for e in self._children:
 | 
					        for e in self._children:
 | 
				
			||||||
            yield from e.iter(tag)
 | 
					            yield from e.iter(tag)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # compatibility
 | 
					 | 
				
			||||||
    def getiterator(self, tag=None):
 | 
					 | 
				
			||||||
        warnings.warn(
 | 
					 | 
				
			||||||
            "This method will be removed in future versions.  "
 | 
					 | 
				
			||||||
            "Use 'elem.iter()' or 'list(elem.iter())' instead.",
 | 
					 | 
				
			||||||
            DeprecationWarning, stacklevel=2
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        return list(self.iter(tag))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def itertext(self):
 | 
					    def itertext(self):
 | 
				
			||||||
        """Create text iterator.
 | 
					        """Create text iterator.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -617,15 +595,6 @@ class ElementTree:
 | 
				
			||||||
        # assert self._root is not None
 | 
					        # assert self._root is not None
 | 
				
			||||||
        return self._root.iter(tag)
 | 
					        return self._root.iter(tag)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # compatibility
 | 
					 | 
				
			||||||
    def getiterator(self, tag=None):
 | 
					 | 
				
			||||||
        warnings.warn(
 | 
					 | 
				
			||||||
            "This method will be removed in future versions.  "
 | 
					 | 
				
			||||||
            "Use 'tree.iter()' or 'list(tree.iter())' instead.",
 | 
					 | 
				
			||||||
            DeprecationWarning, stacklevel=2
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        return list(self.iter(tag))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def find(self, path, namespaces=None):
 | 
					    def find(self, path, namespaces=None):
 | 
				
			||||||
        """Find first matching element by tag name or path.
 | 
					        """Find first matching element by tag name or path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					Removed methods Element.getchildren(), Element.getiterator() and
 | 
				
			||||||
 | 
					ElementTree.getiterator() and the xml.etree.cElementTree module.
 | 
				
			||||||
| 
						 | 
					@ -1426,42 +1426,6 @@ _elementtree_Element_get_impl(ElementObject *self, PyObject *key,
 | 
				
			||||||
    return value;
 | 
					    return value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*[clinic input]
 | 
					 | 
				
			||||||
_elementtree.Element.getchildren
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[clinic start generated code]*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static PyObject *
 | 
					 | 
				
			||||||
_elementtree_Element_getchildren_impl(ElementObject *self)
 | 
					 | 
				
			||||||
/*[clinic end generated code: output=e50ffe118637b14f input=0f754dfded150d5f]*/
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    Py_ssize_t i;
 | 
					 | 
				
			||||||
    PyObject* list;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (PyErr_WarnEx(PyExc_DeprecationWarning,
 | 
					 | 
				
			||||||
                     "This method will be removed in future versions.  "
 | 
					 | 
				
			||||||
                     "Use 'list(elem)' or iteration over elem instead.",
 | 
					 | 
				
			||||||
                     1) < 0) {
 | 
					 | 
				
			||||||
        return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!self->extra)
 | 
					 | 
				
			||||||
        return PyList_New(0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    list = PyList_New(self->extra->length);
 | 
					 | 
				
			||||||
    if (!list)
 | 
					 | 
				
			||||||
        return NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (i = 0; i < self->extra->length; i++) {
 | 
					 | 
				
			||||||
        PyObject* item = self->extra->children[i];
 | 
					 | 
				
			||||||
        Py_INCREF(item);
 | 
					 | 
				
			||||||
        PyList_SET_ITEM(list, i, item);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return list;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static PyObject *
 | 
					static PyObject *
 | 
				
			||||||
create_elementiter(ElementObject *self, PyObject *tag, int gettext);
 | 
					create_elementiter(ElementObject *self, PyObject *tag, int gettext);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1492,27 +1456,6 @@ _elementtree_Element_iter_impl(ElementObject *self, PyObject *tag)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*[clinic input]
 | 
					 | 
				
			||||||
_elementtree.Element.getiterator
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    tag: object = None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[clinic start generated code]*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static PyObject *
 | 
					 | 
				
			||||||
_elementtree_Element_getiterator_impl(ElementObject *self, PyObject *tag)
 | 
					 | 
				
			||||||
/*[clinic end generated code: output=cb69ff4a3742dfa1 input=500da1a03f7b9e28]*/
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (PyErr_WarnEx(PyExc_DeprecationWarning,
 | 
					 | 
				
			||||||
                     "This method will be removed in future versions.  "
 | 
					 | 
				
			||||||
                     "Use 'tree.iter()' or 'list(tree.iter())' instead.",
 | 
					 | 
				
			||||||
                     1) < 0) {
 | 
					 | 
				
			||||||
        return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return _elementtree_Element_iter_impl(self, tag);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*[clinic input]
 | 
					/*[clinic input]
 | 
				
			||||||
_elementtree.Element.itertext
 | 
					_elementtree.Element.itertext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4220,9 +4163,6 @@ static PyMethodDef element_methods[] = {
 | 
				
			||||||
    _ELEMENTTREE_ELEMENT_ITERTEXT_METHODDEF
 | 
					    _ELEMENTTREE_ELEMENT_ITERTEXT_METHODDEF
 | 
				
			||||||
    _ELEMENTTREE_ELEMENT_ITERFIND_METHODDEF
 | 
					    _ELEMENTTREE_ELEMENT_ITERFIND_METHODDEF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _ELEMENTTREE_ELEMENT_GETITERATOR_METHODDEF
 | 
					 | 
				
			||||||
    _ELEMENTTREE_ELEMENT_GETCHILDREN_METHODDEF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    _ELEMENTTREE_ELEMENT_ITEMS_METHODDEF
 | 
					    _ELEMENTTREE_ELEMENT_ITEMS_METHODDEF
 | 
				
			||||||
    _ELEMENTTREE_ELEMENT_KEYS_METHODDEF
 | 
					    _ELEMENTTREE_ELEMENT_KEYS_METHODDEF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										55
									
								
								Modules/clinic/_elementtree.c.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										55
									
								
								Modules/clinic/_elementtree.c.h
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -355,23 +355,6 @@ exit:
 | 
				
			||||||
    return return_value;
 | 
					    return return_value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PyDoc_STRVAR(_elementtree_Element_getchildren__doc__,
 | 
					 | 
				
			||||||
"getchildren($self, /)\n"
 | 
					 | 
				
			||||||
"--\n"
 | 
					 | 
				
			||||||
"\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _ELEMENTTREE_ELEMENT_GETCHILDREN_METHODDEF    \
 | 
					 | 
				
			||||||
    {"getchildren", (PyCFunction)_elementtree_Element_getchildren, METH_NOARGS, _elementtree_Element_getchildren__doc__},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static PyObject *
 | 
					 | 
				
			||||||
_elementtree_Element_getchildren_impl(ElementObject *self);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static PyObject *
 | 
					 | 
				
			||||||
_elementtree_Element_getchildren(ElementObject *self, PyObject *Py_UNUSED(ignored))
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return _elementtree_Element_getchildren_impl(self);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PyDoc_STRVAR(_elementtree_Element_iter__doc__,
 | 
					PyDoc_STRVAR(_elementtree_Element_iter__doc__,
 | 
				
			||||||
"iter($self, /, tag=None)\n"
 | 
					"iter($self, /, tag=None)\n"
 | 
				
			||||||
"--\n"
 | 
					"--\n"
 | 
				
			||||||
| 
						 | 
					@ -408,42 +391,6 @@ exit:
 | 
				
			||||||
    return return_value;
 | 
					    return return_value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PyDoc_STRVAR(_elementtree_Element_getiterator__doc__,
 | 
					 | 
				
			||||||
"getiterator($self, /, tag=None)\n"
 | 
					 | 
				
			||||||
"--\n"
 | 
					 | 
				
			||||||
"\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _ELEMENTTREE_ELEMENT_GETITERATOR_METHODDEF    \
 | 
					 | 
				
			||||||
    {"getiterator", (PyCFunction)(void(*)(void))_elementtree_Element_getiterator, METH_FASTCALL|METH_KEYWORDS, _elementtree_Element_getiterator__doc__},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static PyObject *
 | 
					 | 
				
			||||||
_elementtree_Element_getiterator_impl(ElementObject *self, PyObject *tag);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static PyObject *
 | 
					 | 
				
			||||||
_elementtree_Element_getiterator(ElementObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    PyObject *return_value = NULL;
 | 
					 | 
				
			||||||
    static const char * const _keywords[] = {"tag", NULL};
 | 
					 | 
				
			||||||
    static _PyArg_Parser _parser = {NULL, _keywords, "getiterator", 0};
 | 
					 | 
				
			||||||
    PyObject *argsbuf[1];
 | 
					 | 
				
			||||||
    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
 | 
					 | 
				
			||||||
    PyObject *tag = Py_None;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
 | 
					 | 
				
			||||||
    if (!args) {
 | 
					 | 
				
			||||||
        goto exit;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (!noptargs) {
 | 
					 | 
				
			||||||
        goto skip_optional_pos;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    tag = args[0];
 | 
					 | 
				
			||||||
skip_optional_pos:
 | 
					 | 
				
			||||||
    return_value = _elementtree_Element_getiterator_impl(self, tag);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exit:
 | 
					 | 
				
			||||||
    return return_value;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PyDoc_STRVAR(_elementtree_Element_itertext__doc__,
 | 
					PyDoc_STRVAR(_elementtree_Element_itertext__doc__,
 | 
				
			||||||
"itertext($self, /)\n"
 | 
					"itertext($self, /)\n"
 | 
				
			||||||
"--\n"
 | 
					"--\n"
 | 
				
			||||||
| 
						 | 
					@ -969,4 +916,4 @@ skip_optional:
 | 
				
			||||||
exit:
 | 
					exit:
 | 
				
			||||||
    return return_value;
 | 
					    return return_value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*[clinic end generated code: output=50e0b1954c5f9e0f input=a9049054013a1b77]*/
 | 
					/*[clinic end generated code: output=f5dbf9b4a095d310 input=a9049054013a1b77]*/
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue