Serhiy Storchaka added the comment:
Here is refreshed patch.
----------
title: Derby #7: Convert 51 sites to Argument Clinic across 3 files -> Derby:
Convert the ElementTree module to use Argument Clinic
Added file: http://bugs.python.org/file33355/etree_clinic.patch
_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue20159>
_______________________________________
diff -r e634b377d5cc Modules/_elementtree.c
--- a/Modules/_elementtree.c Tue Jan 07 14:25:26 2014 -0800
+++ b/Modules/_elementtree.c Wed Jan 08 01:42:50 2014 +0200
@@ -368,6 +368,12 @@
return attrib;
}
+/*[clinic input]
+module _elementtree
+class _elementtree.Element
+[clinic start generated code]*/
+/*[clinic end generated code:
checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+
static int
element_init(PyObject *self, PyObject *args, PyObject *kwds)
{
@@ -654,25 +660,80 @@
/* -------------------------------------------------------------------- */
-static PyObject*
-element_append(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.append
+
+ self: self(type='ElementObject *')
+ subelement: object(subclass_of='&Element_Type')
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_append__doc__,
+"append(subelement)");
+
+#define _ELEMENTTREE_ELEMENT_APPEND_METHODDEF \
+ {"append", (PyCFunction)_elementtree_Element_append, METH_VARARGS,
_elementtree_Element_append__doc__},
+
+static PyObject *
+_elementtree_Element_append_impl(ElementObject *self, PyObject *subelement);
+
+static PyObject *
+_elementtree_Element_append(PyObject *self, PyObject *args)
{
- PyObject* element;
- if (!PyArg_ParseTuple(args, "O!:append", &Element_Type, &element))
- return NULL;
-
- if (element_add_subelement(self, element) < 0)
+ PyObject *return_value = NULL;
+ PyObject *subelement;
+
+ if (!PyArg_ParseTuple(args,
+ "O!:append",
+ &Element_Type, &subelement))
+ goto exit;
+ return_value = _elementtree_Element_append_impl((ElementObject *)self,
subelement);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_append_impl(ElementObject *self, PyObject *subelement)
+/*[clinic end generated code:
checksum=2657014068bf9a52d383c72699454858243643a6]*/
+{
+ if (element_add_subelement(self, subelement) < 0)
return NULL;
Py_RETURN_NONE;
}
-static PyObject*
-element_clearmethod(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.clear
+
+ self: self(type='ElementObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_clear__doc__,
+"clear()");
+
+#define _ELEMENTTREE_ELEMENT_CLEAR_METHODDEF \
+ {"clear", (PyCFunction)_elementtree_Element_clear, METH_NOARGS,
_elementtree_Element_clear__doc__},
+
+static PyObject *
+_elementtree_Element_clear_impl(ElementObject *self);
+
+static PyObject *
+_elementtree_Element_clear(PyObject *self, PyObject *Py_UNUSED(ignored))
{
- if (!PyArg_ParseTuple(args, ":clear"))
- return NULL;
-
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_Element_clear_impl((ElementObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_clear_impl(ElementObject *self)
+/*[clinic end generated code:
checksum=b112605d2110394281eaabbf17b7458fc1037828]*/
+{
dealloc_extra(self);
Py_INCREF(Py_None);
@@ -686,15 +747,39 @@
Py_RETURN_NONE;
}
-static PyObject*
-element_copy(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.__copy__
+
+ self: self(type='ElementObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element___copy____doc__,
+"__copy__()");
+
+#define _ELEMENTTREE_ELEMENT___COPY___METHODDEF \
+ {"__copy__", (PyCFunction)_elementtree_Element___copy__, METH_NOARGS,
_elementtree_Element___copy____doc__},
+
+static PyObject *
+_elementtree_Element___copy___impl(ElementObject *self);
+
+static PyObject *
+_elementtree_Element___copy__(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_Element___copy___impl((ElementObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element___copy___impl(ElementObject *self)
+/*[clinic end generated code:
checksum=7a0523cd605533c0e69293b9a4fcbecc6e072ba2]*/
{
int i;
ElementObject* element;
- if (!PyArg_ParseTuple(args, ":__copy__"))
- return NULL;
-
element = (ElementObject*) create_new_element(
self->tag, (self->extra) ? self->extra->attrib : Py_None);
if (!element)
@@ -725,8 +810,24 @@
return (PyObject*) element;
}
-static PyObject*
-element_deepcopy(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.__deepcopy__
+
+ self: self(type='ElementObject *')
+ memo: object
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element___deepcopy____doc__,
+"__deepcopy__(memo)");
+
+#define _ELEMENTTREE_ELEMENT___DEEPCOPY___METHODDEF \
+ {"__deepcopy__", (PyCFunction)_elementtree_Element___deepcopy__, METH_O,
_elementtree_Element___deepcopy____doc__},
+
+static PyObject *
+_elementtree_Element___deepcopy__(ElementObject *self, PyObject *memo)
+/*[clinic end generated code:
checksum=f337046f0f00f6dc0dfc3dbf45553e310672f56b]*/
{
int i;
ElementObject* element;
@@ -736,10 +837,6 @@
PyObject* tail;
PyObject* id;
- PyObject* memo;
- if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
- return NULL;
-
tag = deepcopy(self->tag, memo);
if (!tag)
return NULL;
@@ -810,17 +907,48 @@
return NULL;
}
-static PyObject*
-element_sizeof(PyObject* myself, PyObject* args)
+/*[clinic input]
+_elementtree.Element.__sizeof__ -> Py_ssize_t
+
+ self: self(type='ElementObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element___sizeof____doc__,
+"__sizeof__()");
+
+#define _ELEMENTTREE_ELEMENT___SIZEOF___METHODDEF \
+ {"__sizeof__", (PyCFunction)_elementtree_Element___sizeof__, METH_NOARGS,
_elementtree_Element___sizeof____doc__},
+
+static Py_ssize_t
+_elementtree_Element___sizeof___impl(ElementObject *self);
+
+static PyObject *
+_elementtree_Element___sizeof__(PyObject *self, PyObject *Py_UNUSED(ignored))
{
- ElementObject *self = (ElementObject*)myself;
+ PyObject *return_value = NULL;
+ Py_ssize_t _return_value;
+
+ _return_value = _elementtree_Element___sizeof___impl((ElementObject
*)self);
+ if ((_return_value == -1) && PyErr_Occurred())
+ goto exit;
+ return_value = PyLong_FromSsize_t(_return_value);
+
+exit:
+ return return_value;
+}
+
+static Py_ssize_t
+_elementtree_Element___sizeof___impl(ElementObject *self)
+/*[clinic end generated code:
checksum=5e3e8a02ed3a3c73c99467e90f8b840277286cb7]*/
+{
Py_ssize_t result = sizeof(ElementObject);
if (self->extra) {
result += sizeof(ElementObjectExtra);
if (self->extra->children != self->extra->_children)
result += sizeof(PyObject*) * self->extra->allocated;
}
- return PyLong_FromSsize_t(result);
+ return result;
}
/* dict keys for getstate/setstate. */
@@ -836,8 +964,35 @@
* any unnecessary structures there; and (b) it buys compatibility with 3.2
* pickles. See issue #16076.
*/
+/*[clinic input]
+_elementtree.Element.__getstate__
+
+ self: self(type='ElementObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element___getstate____doc__,
+"__getstate__()");
+
+#define _ELEMENTTREE_ELEMENT___GETSTATE___METHODDEF \
+ {"__getstate__", (PyCFunction)_elementtree_Element___getstate__,
METH_NOARGS, _elementtree_Element___getstate____doc__},
+
static PyObject *
-element_getstate(ElementObject *self)
+_elementtree_Element___getstate___impl(ElementObject *self);
+
+static PyObject *
+_elementtree_Element___getstate__(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_Element___getstate___impl((ElementObject
*)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element___getstate___impl(ElementObject *self)
+/*[clinic end generated code:
checksum=54ff075281a1ea36af223e690490204bc27748fb]*/
{
int i, noattrib;
PyObject *instancedict = NULL, *children;
@@ -952,6 +1107,7 @@
/* __setstate__ for Element instance from the Python implementation.
* 'state' should be the instance dict.
*/
+
static PyObject *
element_setstate_from_Python(ElementObject *self, PyObject *state)
{
@@ -977,8 +1133,24 @@
return retval;
}
+/*[clinic input]
+_elementtree.Element.__setstate__
+
+ self: self(type='ElementObject *')
+ state: object
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element___setstate____doc__,
+"__setstate__(state)");
+
+#define _ELEMENTTREE_ELEMENT___SETSTATE___METHODDEF \
+ {"__setstate__", (PyCFunction)_elementtree_Element___setstate__, METH_O,
_elementtree_Element___setstate____doc__},
+
static PyObject *
-element_setstate(ElementObject *self, PyObject *state)
+_elementtree_Element___setstate__(ElementObject *self, PyObject *state)
+/*[clinic end generated code:
checksum=bd75aec0601d95cfd4ada7d5aa4b6597f7209422]*/
{
if (!PyDict_CheckExact(state)) {
PyErr_Format(PyExc_TypeError,
@@ -1032,21 +1204,33 @@
return 1; /* unknown type; might be path expression */
}
-static PyObject*
-element_extend(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.extend
+
+ self: self(type='ElementObject *')
+ elements: object
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_extend__doc__,
+"extend(elements)");
+
+#define _ELEMENTTREE_ELEMENT_EXTEND_METHODDEF \
+ {"extend", (PyCFunction)_elementtree_Element_extend, METH_O,
_elementtree_Element_extend__doc__},
+
+static PyObject *
+_elementtree_Element_extend(ElementObject *self, PyObject *elements)
+/*[clinic end generated code:
checksum=a5102ac72eb6ab1d742a8c6c06f5ee4c5e219580]*/
{
PyObject* seq;
Py_ssize_t i, seqlen = 0;
- PyObject* seq_in;
- if (!PyArg_ParseTuple(args, "O:extend", &seq_in))
- return NULL;
-
- seq = PySequence_Fast(seq_in, "");
+ seq = PySequence_Fast(elements, "");
if (!seq) {
PyErr_Format(
PyExc_TypeError,
- "expected sequence, not \"%.200s\"", Py_TYPE(seq_in)->tp_name
+ "expected sequence, not \"%.200s\"", Py_TYPE(elements)->tp_name
);
return NULL;
}
@@ -1074,23 +1258,53 @@
Py_RETURN_NONE;
}
-static PyObject*
-element_find(ElementObject *self, PyObject *args, PyObject *kwds)
+/*[clinic input]
+_elementtree.Element.find
+
+ self: self(type='ElementObject *')
+ path: object
+ namespaces: object = None
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_find__doc__,
+"find(path, namespaces=None)");
+
+#define _ELEMENTTREE_ELEMENT_FIND_METHODDEF \
+ {"find", (PyCFunction)_elementtree_Element_find,
METH_VARARGS|METH_KEYWORDS, _elementtree_Element_find__doc__},
+
+static PyObject *
+_elementtree_Element_find_impl(ElementObject *self, PyObject *path, PyObject
*namespaces);
+
+static PyObject *
+_elementtree_Element_find(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ PyObject *return_value = NULL;
+ static char *_keywords[] = {"path", "namespaces", NULL};
+ PyObject *path;
+ PyObject *namespaces = Py_None;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "O|O:find", _keywords,
+ &path, &namespaces))
+ goto exit;
+ return_value = _elementtree_Element_find_impl((ElementObject *)self, path,
namespaces);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_find_impl(ElementObject *self, PyObject *path, PyObject
*namespaces)
+/*[clinic end generated code:
checksum=636eddffd045f4ff6d3538514285824437eabde6]*/
{
int i;
- PyObject* tag;
- PyObject* namespaces = Py_None;
- static char *kwlist[] = {"path", "namespaces", 0};
elementtreestate *st = ET_STATE_GLOBAL;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:find", kwlist,
- &tag, &namespaces))
- return NULL;
-
- if (checkpath(tag) || namespaces != Py_None) {
+ if (checkpath(path) || namespaces != Py_None) {
_Py_IDENTIFIER(find);
return _PyObject_CallMethodId(
- st->elementpath_obj, &PyId_find, "OOO", self, tag, namespaces
+ st->elementpath_obj, &PyId_find, "OOO", self, path, namespaces
);
}
@@ -1100,7 +1314,7 @@
for (i = 0; i < self->extra->length; i++) {
PyObject* item = self->extra->children[i];
if (Element_CheckExact(item) &&
- PyObject_RichCompareBool(((ElementObject*)item)->tag, tag, Py_EQ)
== 1) {
+ PyObject_RichCompareBool(((ElementObject*)item)->tag, path, Py_EQ)
== 1) {
Py_INCREF(item);
return item;
}
@@ -1109,24 +1323,55 @@
Py_RETURN_NONE;
}
-static PyObject*
-element_findtext(ElementObject *self, PyObject *args, PyObject *kwds)
+/*[clinic input]
+_elementtree.Element.findtext
+
+ self: self(type='ElementObject *')
+ path: object
+ default: object = None
+ namespaces: object = None
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_findtext__doc__,
+"findtext(path, default=None, namespaces=None)");
+
+#define _ELEMENTTREE_ELEMENT_FINDTEXT_METHODDEF \
+ {"findtext", (PyCFunction)_elementtree_Element_findtext,
METH_VARARGS|METH_KEYWORDS, _elementtree_Element_findtext__doc__},
+
+static PyObject *
+_elementtree_Element_findtext_impl(ElementObject *self, PyObject *path,
PyObject *default_value, PyObject *namespaces);
+
+static PyObject *
+_elementtree_Element_findtext(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ PyObject *return_value = NULL;
+ static char *_keywords[] = {"path", "default", "namespaces", NULL};
+ PyObject *path;
+ PyObject *default_value = Py_None;
+ PyObject *namespaces = Py_None;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "O|OO:findtext", _keywords,
+ &path, &default_value, &namespaces))
+ goto exit;
+ return_value = _elementtree_Element_findtext_impl((ElementObject *)self,
path, default_value, namespaces);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_findtext_impl(ElementObject *self, PyObject *path,
PyObject *default_value, PyObject *namespaces)
+/*[clinic end generated code:
checksum=1bdd762f714aef8cee0f62faa4afc4eb8f21b58c]*/
{
int i;
- PyObject* tag;
- PyObject* default_value = Py_None;
- PyObject* namespaces = Py_None;
_Py_IDENTIFIER(findtext);
- static char *kwlist[] = {"path", "default", "namespaces", 0};
elementtreestate *st = ET_STATE_GLOBAL;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OO:findtext", kwlist,
- &tag, &default_value, &namespaces))
- return NULL;
-
- if (checkpath(tag) || namespaces != Py_None)
+ if (checkpath(path) || namespaces != Py_None)
return _PyObject_CallMethodId(
- st->elementpath_obj, &PyId_findtext, "OOOO", self, tag,
default_value, namespaces
+ st->elementpath_obj, &PyId_findtext, "OOOO", self, path,
default_value, namespaces
);
if (!self->extra) {
@@ -1137,7 +1382,7 @@
for (i = 0; i < self->extra->length; i++) {
ElementObject* item = (ElementObject*) self->extra->children[i];
if (Element_CheckExact(item) &&
- (PyObject_RichCompareBool(item->tag, tag, Py_EQ) == 1)) {
+ (PyObject_RichCompareBool(item->tag, path, Py_EQ) == 1)) {
PyObject* text = element_get_text(item);
if (text == Py_None)
return PyUnicode_New(0, 0);
@@ -1150,20 +1395,51 @@
return default_value;
}
-static PyObject*
-element_findall(ElementObject *self, PyObject *args, PyObject *kwds)
+/*[clinic input]
+_elementtree.Element.findall
+
+ self: self(type='ElementObject *')
+ path: object
+ namespaces: object = None
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_findall__doc__,
+"findall(path, namespaces=None)");
+
+#define _ELEMENTTREE_ELEMENT_FINDALL_METHODDEF \
+ {"findall", (PyCFunction)_elementtree_Element_findall,
METH_VARARGS|METH_KEYWORDS, _elementtree_Element_findall__doc__},
+
+static PyObject *
+_elementtree_Element_findall_impl(ElementObject *self, PyObject *path,
PyObject *namespaces);
+
+static PyObject *
+_elementtree_Element_findall(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ PyObject *return_value = NULL;
+ static char *_keywords[] = {"path", "namespaces", NULL};
+ PyObject *path;
+ PyObject *namespaces = Py_None;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "O|O:findall", _keywords,
+ &path, &namespaces))
+ goto exit;
+ return_value = _elementtree_Element_findall_impl((ElementObject *)self,
path, namespaces);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_findall_impl(ElementObject *self, PyObject *path,
PyObject *namespaces)
+/*[clinic end generated code:
checksum=e126482bd3635e7ccfb83ba5bfb12c282b509e44]*/
{
int i;
PyObject* out;
- PyObject* tag;
- PyObject* namespaces = Py_None;
- static char *kwlist[] = {"path", "namespaces", 0};
+ PyObject* tag = path;
elementtreestate *st = ET_STATE_GLOBAL;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:findall", kwlist,
- &tag, &namespaces))
- return NULL;
-
if (checkpath(tag) || namespaces != Py_None) {
_Py_IDENTIFIER(findall);
return _PyObject_CallMethodId(
@@ -1192,36 +1468,95 @@
return out;
}
-static PyObject*
-element_iterfind(ElementObject *self, PyObject *args, PyObject *kwds)
+/*[clinic input]
+_elementtree.Element.iterfind
+
+ self: self(type='ElementObject *')
+ path: object
+ namespaces: object = None
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_iterfind__doc__,
+"iterfind(path, namespaces=None)");
+
+#define _ELEMENTTREE_ELEMENT_ITERFIND_METHODDEF \
+ {"iterfind", (PyCFunction)_elementtree_Element_iterfind,
METH_VARARGS|METH_KEYWORDS, _elementtree_Element_iterfind__doc__},
+
+static PyObject *
+_elementtree_Element_iterfind_impl(ElementObject *self, PyObject *path,
PyObject *namespaces);
+
+static PyObject *
+_elementtree_Element_iterfind(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject* tag;
- PyObject* namespaces = Py_None;
+ PyObject *return_value = NULL;
+ static char *_keywords[] = {"path", "namespaces", NULL};
+ PyObject *path;
+ PyObject *namespaces = Py_None;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "O|O:iterfind", _keywords,
+ &path, &namespaces))
+ goto exit;
+ return_value = _elementtree_Element_iterfind_impl((ElementObject *)self,
path, namespaces);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_iterfind_impl(ElementObject *self, PyObject *path,
PyObject *namespaces)
+/*[clinic end generated code:
checksum=15f071c02d939b097f57c37132904e5bd19efa4c]*/
+{
+ PyObject* tag = path;
_Py_IDENTIFIER(iterfind);
- static char *kwlist[] = {"path", "namespaces", 0};
elementtreestate *st = ET_STATE_GLOBAL;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:iterfind", kwlist,
- &tag, &namespaces)) {
- return NULL;
- }
-
return _PyObject_CallMethodId(
st->elementpath_obj, &PyId_iterfind, "OOO", self, tag, namespaces);
}
-static PyObject*
-element_get(ElementObject* self, PyObject* args, PyObject* kwds)
+/*[clinic input]
+_elementtree.Element.get
+
+ self: self(type='ElementObject *')
+ key: object
+ default: object = None
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_get__doc__,
+"get(key, default=None)");
+
+#define _ELEMENTTREE_ELEMENT_GET_METHODDEF \
+ {"get", (PyCFunction)_elementtree_Element_get, METH_VARARGS|METH_KEYWORDS,
_elementtree_Element_get__doc__},
+
+static PyObject *
+_elementtree_Element_get_impl(ElementObject *self, PyObject *key, PyObject
*default_value);
+
+static PyObject *
+_elementtree_Element_get(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ PyObject *return_value = NULL;
+ static char *_keywords[] = {"key", "default", NULL};
+ PyObject *key;
+ PyObject *default_value = Py_None;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "O|O:get", _keywords,
+ &key, &default_value))
+ goto exit;
+ return_value = _elementtree_Element_get_impl((ElementObject *)self, key,
default_value);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_get_impl(ElementObject *self, PyObject *key, PyObject
*default_value)
+/*[clinic end generated code:
checksum=91ae50e2b73068eefe8fbfa7c3fd15df298b0e98]*/
{
PyObject* value;
- static char* kwlist[] = {"key", "default", 0};
-
- PyObject* key;
- PyObject* default_value = Py_None;
-
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:get", kwlist, &key,
- &default_value))
- return NULL;
if (!self->extra || self->extra->attrib == Py_None)
value = default_value;
@@ -1235,17 +1570,41 @@
return value;
}
-static PyObject*
-element_getchildren(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.getchildren
+
+ self: self(type='ElementObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_getchildren__doc__,
+"getchildren()");
+
+#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(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_Element_getchildren_impl((ElementObject
*)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_getchildren_impl(ElementObject *self)
+/*[clinic end generated code:
checksum=afae4354dc5231ba76ce51be3fcf6146fa327d58]*/
{
int i;
PyObject* list;
/* FIXME: report as deprecated? */
- if (!PyArg_ParseTuple(args, ":getchildren"))
- return NULL;
-
if (!self->extra)
return PyList_New(0);
@@ -1267,25 +1626,78 @@
create_elementiter(ElementObject *self, PyObject *tag, int gettext);
+/*[clinic input]
+_elementtree.Element.iter
+
+ self: self(type='ElementObject *')
+ tag: object = None
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_iter__doc__,
+"iter(tag=None)");
+
+#define _ELEMENTTREE_ELEMENT_ITER_METHODDEF \
+ {"iter", (PyCFunction)_elementtree_Element_iter,
METH_VARARGS|METH_KEYWORDS, _elementtree_Element_iter__doc__},
+
static PyObject *
-element_iter(ElementObject *self, PyObject *args, PyObject *kwds)
+_elementtree_Element_iter_impl(ElementObject *self, PyObject *tag);
+
+static PyObject *
+_elementtree_Element_iter(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject* tag = Py_None;
- static char* kwlist[] = {"tag", 0};
-
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:iter", kwlist, &tag))
- return NULL;
-
+ PyObject *return_value = NULL;
+ static char *_keywords[] = {"tag", NULL};
+ PyObject *tag = Py_None;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "|O:iter", _keywords,
+ &tag))
+ goto exit;
+ return_value = _elementtree_Element_iter_impl((ElementObject *)self, tag);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_iter_impl(ElementObject *self, PyObject *tag)
+/*[clinic end generated code:
checksum=996b1537be06ed54b57c9ee79cf05219dced62e3]*/
+{
return create_elementiter(self, tag, 0);
}
-static PyObject*
-element_itertext(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.itertext
+
+ self: self(type='ElementObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_itertext__doc__,
+"itertext()");
+
+#define _ELEMENTTREE_ELEMENT_ITERTEXT_METHODDEF \
+ {"itertext", (PyCFunction)_elementtree_Element_itertext, METH_NOARGS,
_elementtree_Element_itertext__doc__},
+
+static PyObject *
+_elementtree_Element_itertext_impl(ElementObject *self);
+
+static PyObject *
+_elementtree_Element_itertext(PyObject *self, PyObject *Py_UNUSED(ignored))
{
- if (!PyArg_ParseTuple(args, ":itertext"))
- return NULL;
-
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_Element_itertext_impl((ElementObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_itertext_impl(ElementObject *self)
+/*[clinic end generated code:
checksum=46ee60dbf63f1c07205dc267333aef4d47cec1c9]*/
+{
return create_elementiter(self, Py_None, 1);
}
@@ -1307,17 +1719,48 @@
return self->extra->children[index];
}
-static PyObject*
-element_insert(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.insert
+
+ self: self(type='ElementObject *')
+ index: int
+ subelement: object(subclass_of='&Element_Type')
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_insert__doc__,
+"insert(index, subelement)");
+
+#define _ELEMENTTREE_ELEMENT_INSERT_METHODDEF \
+ {"insert", (PyCFunction)_elementtree_Element_insert, METH_VARARGS,
_elementtree_Element_insert__doc__},
+
+static PyObject *
+_elementtree_Element_insert_impl(ElementObject *self, int index, PyObject
*subelement);
+
+static PyObject *
+_elementtree_Element_insert(PyObject *self, PyObject *args)
+{
+ PyObject *return_value = NULL;
+ int index;
+ PyObject *subelement;
+
+ if (!PyArg_ParseTuple(args,
+ "iO!:insert",
+ &index, &Element_Type, &subelement))
+ goto exit;
+ return_value = _elementtree_Element_insert_impl((ElementObject *)self,
index, subelement);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_insert_impl(ElementObject *self, int index, PyObject
*subelement)
+/*[clinic end generated code:
checksum=7ad6a209044ad042f2487c42f7c7c5627d9c7a37]*/
{
int i;
- int index;
- PyObject* element;
- if (!PyArg_ParseTuple(args, "iO!:insert", &index,
- &Element_Type, &element))
- return NULL;
-
if (!self->extra) {
if (create_extra(self, NULL) < 0)
return NULL;
@@ -1337,32 +1780,80 @@
for (i = self->extra->length; i > index; i--)
self->extra->children[i] = self->extra->children[i-1];
- Py_INCREF(element);
- self->extra->children[index] = element;
+ Py_INCREF(subelement);
+ self->extra->children[index] = subelement;
self->extra->length++;
Py_RETURN_NONE;
}
-static PyObject*
-element_items(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.items
+
+ self: self(type='ElementObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_items__doc__,
+"items()");
+
+#define _ELEMENTTREE_ELEMENT_ITEMS_METHODDEF \
+ {"items", (PyCFunction)_elementtree_Element_items, METH_NOARGS,
_elementtree_Element_items__doc__},
+
+static PyObject *
+_elementtree_Element_items_impl(ElementObject *self);
+
+static PyObject *
+_elementtree_Element_items(PyObject *self, PyObject *Py_UNUSED(ignored))
{
- if (!PyArg_ParseTuple(args, ":items"))
- return NULL;
-
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_Element_items_impl((ElementObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_items_impl(ElementObject *self)
+/*[clinic end generated code:
checksum=6da79e8ab42972f525e6e861b7c4a484f276355a]*/
+{
if (!self->extra || self->extra->attrib == Py_None)
return PyList_New(0);
return PyDict_Items(self->extra->attrib);
}
-static PyObject*
-element_keys(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.keys
+
+ self: self(type='ElementObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_keys__doc__,
+"keys()");
+
+#define _ELEMENTTREE_ELEMENT_KEYS_METHODDEF \
+ {"keys", (PyCFunction)_elementtree_Element_keys, METH_NOARGS,
_elementtree_Element_keys__doc__},
+
+static PyObject *
+_elementtree_Element_keys_impl(ElementObject *self);
+
+static PyObject *
+_elementtree_Element_keys(PyObject *self, PyObject *Py_UNUSED(ignored))
{
- if (!PyArg_ParseTuple(args, ":keys"))
- return NULL;
-
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_Element_keys_impl((ElementObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_keys_impl(ElementObject *self)
+/*[clinic end generated code:
checksum=793f43a3dac2f01b7666d889f093e3f512d482f3]*/
+{
if (!self->extra || self->extra->attrib == Py_None)
return PyList_New(0);
@@ -1378,16 +1869,48 @@
return self->extra->length;
}
-static PyObject*
-element_makeelement(PyObject* self, PyObject* args, PyObject* kw)
+/*[clinic input]
+_elementtree.Element.makeelement
+
+ self: self(type='ElementObject *')
+ tag: object
+ attrib: object
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_makeelement__doc__,
+"makeelement(tag, attrib)");
+
+#define _ELEMENTTREE_ELEMENT_MAKEELEMENT_METHODDEF \
+ {"makeelement", (PyCFunction)_elementtree_Element_makeelement,
METH_VARARGS, _elementtree_Element_makeelement__doc__},
+
+static PyObject *
+_elementtree_Element_makeelement_impl(ElementObject *self, PyObject *tag,
PyObject *attrib);
+
+static PyObject *
+_elementtree_Element_makeelement(PyObject *self, PyObject *args)
+{
+ PyObject *return_value = NULL;
+ PyObject *tag;
+ PyObject *attrib;
+
+ if (!PyArg_ParseTuple(args,
+ "OO:makeelement",
+ &tag, &attrib))
+ goto exit;
+ return_value = _elementtree_Element_makeelement_impl((ElementObject
*)self, tag, attrib);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_makeelement_impl(ElementObject *self, PyObject *tag,
PyObject *attrib)
+/*[clinic end generated code:
checksum=a6361094d69138417544cf031f3df2d669510053]*/
{
PyObject* elem;
- PyObject* tag;
- PyObject* attrib;
- if (!PyArg_ParseTuple(args, "OO:makeelement", &tag, &attrib))
- return NULL;
-
attrib = PyDict_Copy(attrib);
if (!attrib)
return NULL;
@@ -1399,15 +1922,46 @@
return elem;
}
-static PyObject*
-element_remove(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.remove
+
+ self: self(type='ElementObject *')
+ subelement: object(subclass_of='&Element_Type')
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_remove__doc__,
+"remove(subelement)");
+
+#define _ELEMENTTREE_ELEMENT_REMOVE_METHODDEF \
+ {"remove", (PyCFunction)_elementtree_Element_remove, METH_VARARGS,
_elementtree_Element_remove__doc__},
+
+static PyObject *
+_elementtree_Element_remove_impl(ElementObject *self, PyObject *subelement);
+
+static PyObject *
+_elementtree_Element_remove(PyObject *self, PyObject *args)
+{
+ PyObject *return_value = NULL;
+ PyObject *subelement;
+
+ if (!PyArg_ParseTuple(args,
+ "O!:remove",
+ &Element_Type, &subelement))
+ goto exit;
+ return_value = _elementtree_Element_remove_impl((ElementObject *)self,
subelement);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_remove_impl(ElementObject *self, PyObject *subelement)
+/*[clinic end generated code:
checksum=461762446933dbcaf0dd5f2bddd5075ee6594a10]*/
{
int i;
- PyObject* element;
- if (!PyArg_ParseTuple(args, "O!:remove", &Element_Type, &element))
- return NULL;
-
if (!self->extra) {
/* element has no children, so raise exception */
PyErr_SetString(
@@ -1418,14 +1972,14 @@
}
for (i = 0; i < self->extra->length; i++) {
- if (self->extra->children[i] == element)
+ if (self->extra->children[i] == subelement)
break;
- if (PyObject_RichCompareBool(self->extra->children[i], element, Py_EQ)
== 1)
+ if (PyObject_RichCompareBool(self->extra->children[i], subelement,
Py_EQ) == 1)
break;
}
if (i == self->extra->length) {
- /* element is not in children, so raise exception */
+ /* subelement is not in children, so raise exception */
PyErr_SetString(
PyExc_ValueError,
"list.remove(x): x not in list"
@@ -1452,16 +2006,48 @@
return PyUnicode_FromFormat("<Element at %p>", self);
}
-static PyObject*
-element_set(ElementObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.Element.set
+
+ self: self(type='ElementObject *')
+ key: object
+ value: object
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_Element_set__doc__,
+"set(key, value)");
+
+#define _ELEMENTTREE_ELEMENT_SET_METHODDEF \
+ {"set", (PyCFunction)_elementtree_Element_set, METH_VARARGS,
_elementtree_Element_set__doc__},
+
+static PyObject *
+_elementtree_Element_set_impl(ElementObject *self, PyObject *key, PyObject
*value);
+
+static PyObject *
+_elementtree_Element_set(PyObject *self, PyObject *args)
+{
+ PyObject *return_value = NULL;
+ PyObject *key;
+ PyObject *value;
+
+ if (!PyArg_ParseTuple(args,
+ "OO:set",
+ &key, &value))
+ goto exit;
+ return_value = _elementtree_Element_set_impl((ElementObject *)self, key,
value);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_Element_set_impl(ElementObject *self, PyObject *key, PyObject
*value)
+/*[clinic end generated code:
checksum=bff41191c04d8ebb5ca002101771cc54575ef34c]*/
{
PyObject* attrib;
- PyObject* key;
- PyObject* value;
- if (!PyArg_ParseTuple(args, "OO:set", &key, &value))
- return NULL;
-
if (!self->extra) {
if (create_extra(self, NULL) < 0)
return NULL;
@@ -1744,37 +2330,37 @@
static PyMethodDef element_methods[] = {
- {"clear", (PyCFunction) element_clearmethod, METH_VARARGS},
-
- {"get", (PyCFunction) element_get, METH_VARARGS | METH_KEYWORDS},
- {"set", (PyCFunction) element_set, METH_VARARGS},
-
- {"find", (PyCFunction) element_find, METH_VARARGS | METH_KEYWORDS},
- {"findtext", (PyCFunction) element_findtext, METH_VARARGS | METH_KEYWORDS},
- {"findall", (PyCFunction) element_findall, METH_VARARGS | METH_KEYWORDS},
-
- {"append", (PyCFunction) element_append, METH_VARARGS},
- {"extend", (PyCFunction) element_extend, METH_VARARGS},
- {"insert", (PyCFunction) element_insert, METH_VARARGS},
- {"remove", (PyCFunction) element_remove, METH_VARARGS},
-
- {"iter", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS},
- {"itertext", (PyCFunction) element_itertext, METH_VARARGS},
- {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS | METH_KEYWORDS},
-
- {"getiterator", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS},
- {"getchildren", (PyCFunction) element_getchildren, METH_VARARGS},
-
- {"items", (PyCFunction) element_items, METH_VARARGS},
- {"keys", (PyCFunction) element_keys, METH_VARARGS},
-
- {"makeelement", (PyCFunction) element_makeelement, METH_VARARGS},
-
- {"__copy__", (PyCFunction) element_copy, METH_VARARGS},
- {"__deepcopy__", (PyCFunction) element_deepcopy, METH_VARARGS},
- {"__sizeof__", element_sizeof, METH_NOARGS},
- {"__getstate__", (PyCFunction)element_getstate, METH_NOARGS},
- {"__setstate__", (PyCFunction)element_setstate, METH_O},
+ _ELEMENTTREE_ELEMENT_CLEAR_METHODDEF
+
+ _ELEMENTTREE_ELEMENT_GET_METHODDEF
+ _ELEMENTTREE_ELEMENT_SET_METHODDEF
+
+ _ELEMENTTREE_ELEMENT_FIND_METHODDEF
+ _ELEMENTTREE_ELEMENT_FINDTEXT_METHODDEF
+ _ELEMENTTREE_ELEMENT_FINDALL_METHODDEF
+
+ _ELEMENTTREE_ELEMENT_APPEND_METHODDEF
+ _ELEMENTTREE_ELEMENT_EXTEND_METHODDEF
+ _ELEMENTTREE_ELEMENT_INSERT_METHODDEF
+ _ELEMENTTREE_ELEMENT_REMOVE_METHODDEF
+
+ _ELEMENTTREE_ELEMENT_ITER_METHODDEF
+ _ELEMENTTREE_ELEMENT_ITERTEXT_METHODDEF
+ _ELEMENTTREE_ELEMENT_ITERFIND_METHODDEF
+
+ {"getiterator", (PyCFunction)_elementtree_Element_iter,
METH_VARARGS|METH_KEYWORDS, _elementtree_Element_iter__doc__},
+ _ELEMENTTREE_ELEMENT_GETCHILDREN_METHODDEF
+
+ _ELEMENTTREE_ELEMENT_ITEMS_METHODDEF
+ _ELEMENTTREE_ELEMENT_KEYS_METHODDEF
+
+ _ELEMENTTREE_ELEMENT_MAKEELEMENT_METHODDEF
+
+ _ELEMENTTREE_ELEMENT___COPY___METHODDEF
+ _ELEMENTTREE_ELEMENT___DEEPCOPY___METHODDEF
+ _ELEMENTTREE_ELEMENT___SIZEOF___METHODDEF
+ _ELEMENTTREE_ELEMENT___GETSTATE___METHODDEF
+ _ELEMENTTREE_ELEMENT___SETSTATE___METHODDEF
{NULL, NULL}
};
@@ -2262,6 +2848,11 @@
return (PyObject *)t;
}
+/*[clinic input]
+class _elementtree.TreeBuilder
+[clinic start generated code]*/
+/*[clinic end generated code:
checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+
static int
treebuilder_init(PyObject *self, PyObject *args, PyObject *kwds)
{
@@ -2598,23 +3189,47 @@
/* -------------------------------------------------------------------- */
/* methods (in alphabetical order) */
-static PyObject*
-treebuilder_data(TreeBuilderObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.TreeBuilder.data
+
+ self: self(type='TreeBuilderObject *')
+ data: object
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_TreeBuilder_data__doc__,
+"data(data)");
+
+#define _ELEMENTTREE_TREEBUILDER_DATA_METHODDEF \
+ {"data", (PyCFunction)_elementtree_TreeBuilder_data, METH_O,
_elementtree_TreeBuilder_data__doc__},
+
+static PyObject *
+_elementtree_TreeBuilder_data(TreeBuilderObject *self, PyObject *data)
+/*[clinic end generated code:
checksum=c8bc9ede07a4b79d1f937c442d6990ebc8b180db]*/
{
- PyObject* data;
- if (!PyArg_ParseTuple(args, "O:data", &data))
- return NULL;
-
return treebuilder_handle_data(self, data);
}
-static PyObject*
-treebuilder_end(TreeBuilderObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.TreeBuilder.end
+
+ self: self(type='TreeBuilderObject *')
+ tag: object
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_TreeBuilder_end__doc__,
+"end(tag)");
+
+#define _ELEMENTTREE_TREEBUILDER_END_METHODDEF \
+ {"end", (PyCFunction)_elementtree_TreeBuilder_end, METH_O,
_elementtree_TreeBuilder_end__doc__},
+
+static PyObject *
+_elementtree_TreeBuilder_end(TreeBuilderObject *self, PyObject *tag)
+/*[clinic end generated code:
checksum=82bee0547d56fa6b029f8732b4d3c7f15f5d011c]*/
{
- PyObject* tag;
- if (!PyArg_ParseTuple(args, "O:end", &tag))
- return NULL;
-
return treebuilder_handle_end(self, tag);
}
@@ -2634,31 +3249,87 @@
return res;
}
-static PyObject*
-treebuilder_close(TreeBuilderObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.TreeBuilder.close
+
+ self: self(type='TreeBuilderObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_TreeBuilder_close__doc__,
+"close()");
+
+#define _ELEMENTTREE_TREEBUILDER_CLOSE_METHODDEF \
+ {"close", (PyCFunction)_elementtree_TreeBuilder_close, METH_NOARGS,
_elementtree_TreeBuilder_close__doc__},
+
+static PyObject *
+_elementtree_TreeBuilder_close_impl(TreeBuilderObject *self);
+
+static PyObject *
+_elementtree_TreeBuilder_close(PyObject *self, PyObject *Py_UNUSED(ignored))
{
- if (!PyArg_ParseTuple(args, ":close"))
- return NULL;
-
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_TreeBuilder_close_impl((TreeBuilderObject
*)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_TreeBuilder_close_impl(TreeBuilderObject *self)
+/*[clinic end generated code:
checksum=04499971c07c3de69d131ca3885664749c4a48b7]*/
+{
return treebuilder_done(self);
}
-static PyObject*
-treebuilder_start(TreeBuilderObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.TreeBuilder.start
+
+ self: self(type='TreeBuilderObject *')
+ tag: object
+ attrs: object = None
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_TreeBuilder_start__doc__,
+"start(tag, attrs=None)");
+
+#define _ELEMENTTREE_TREEBUILDER_START_METHODDEF \
+ {"start", (PyCFunction)_elementtree_TreeBuilder_start, METH_VARARGS,
_elementtree_TreeBuilder_start__doc__},
+
+static PyObject *
+_elementtree_TreeBuilder_start_impl(TreeBuilderObject *self, PyObject *tag,
PyObject *attrs);
+
+static PyObject *
+_elementtree_TreeBuilder_start(PyObject *self, PyObject *args)
{
- PyObject* tag;
- PyObject* attrib = Py_None;
- if (!PyArg_ParseTuple(args, "O|O:start", &tag, &attrib))
- return NULL;
-
- return treebuilder_handle_start(self, tag, attrib);
+ PyObject *return_value = NULL;
+ PyObject *tag;
+ PyObject *attrs = Py_None;
+
+ if (!PyArg_ParseTuple(args,
+ "O|O:start",
+ &tag, &attrs))
+ goto exit;
+ return_value = _elementtree_TreeBuilder_start_impl((TreeBuilderObject
*)self, tag, attrs);
+
+exit:
+ return return_value;
}
+static PyObject *
+_elementtree_TreeBuilder_start_impl(TreeBuilderObject *self, PyObject *tag,
PyObject *attrs)
+/*[clinic end generated code:
checksum=e1c32bce2ff2880e4756348b489e1eace4b7c442]*/
+{
+ return treebuilder_handle_start(self, tag, attrs);
+}
+
static PyMethodDef treebuilder_methods[] = {
- {"data", (PyCFunction) treebuilder_data, METH_VARARGS},
- {"start", (PyCFunction) treebuilder_start, METH_VARARGS},
- {"end", (PyCFunction) treebuilder_end, METH_VARARGS},
- {"close", (PyCFunction) treebuilder_close, METH_VARARGS},
+ _ELEMENTTREE_TREEBUILDER_DATA_METHODDEF
+ _ELEMENTTREE_TREEBUILDER_START_METHODDEF
+ _ELEMENTTREE_TREEBUILDER_END_METHODDEF
+ _ELEMENTTREE_TREEBUILDER_CLOSE_METHODDEF
{NULL, NULL}
};
@@ -3209,6 +3880,11 @@
return (PyObject *)self;
}
+/*[clinic input]
+class _elementtree.XMLParser
+[clinic start generated code]*/
+/*[clinic end generated code:
checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+
static int
xmlparser_init(PyObject *self, PyObject *args, PyObject *kwds)
{
@@ -3369,15 +4045,39 @@
Py_RETURN_NONE;
}
-static PyObject*
-xmlparser_close(XMLParserObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.XMLParser.close
+
+ self: self(type='XMLParserObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_XMLParser_close__doc__,
+"close()");
+
+#define _ELEMENTTREE_XMLPARSER_CLOSE_METHODDEF \
+ {"close", (PyCFunction)_elementtree_XMLParser_close, METH_NOARGS,
_elementtree_XMLParser_close__doc__},
+
+static PyObject *
+_elementtree_XMLParser_close_impl(XMLParserObject *self);
+
+static PyObject *
+_elementtree_XMLParser_close(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_XMLParser_close_impl((XMLParserObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_XMLParser_close_impl(XMLParserObject *self)
+/*[clinic end generated code:
checksum=e559a2ddc0d5eb10cd73b4af4eef751d3f266757]*/
{
/* end feeding data to parser */
PyObject* res;
- if (!PyArg_ParseTuple(args, ":close"))
- return NULL;
-
res = expat_parse(self, "", 0, 1);
if (!res)
return NULL;
@@ -3395,15 +4095,31 @@
}
}
-static PyObject*
-xmlparser_feed(XMLParserObject* self, PyObject* arg)
+/*[clinic input]
+_elementtree.XMLParser.feed
+
+ self: self(type='XMLParserObject *')
+ data: object
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_XMLParser_feed__doc__,
+"feed(data)");
+
+#define _ELEMENTTREE_XMLPARSER_FEED_METHODDEF \
+ {"feed", (PyCFunction)_elementtree_XMLParser_feed, METH_O,
_elementtree_XMLParser_feed__doc__},
+
+static PyObject *
+_elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
+/*[clinic end generated code:
checksum=4946fd63df292c934b8f4d4a4c4d1e5d46330d61]*/
{
/* feed data to parser */
- if (PyUnicode_Check(arg)) {
+ if (PyUnicode_Check(data)) {
Py_ssize_t data_len;
- const char *data = PyUnicode_AsUTF8AndSize(arg, &data_len);
- if (data == NULL)
+ const char *data_ptr = PyUnicode_AsUTF8AndSize(data, &data_len);
+ if (data_ptr == NULL)
return NULL;
if (data_len > INT_MAX) {
PyErr_SetString(PyExc_OverflowError, "size does not fit in an
int");
@@ -3411,12 +4127,12 @@
}
/* Explicitly set UTF-8 encoding. Return code ignored. */
(void)EXPAT(SetEncoding)(self->parser, "utf-8");
- return expat_parse(self, data, (int)data_len, 0);
+ return expat_parse(self, data_ptr, (int)data_len, 0);
}
else {
Py_buffer view;
PyObject *res;
- if (PyObject_GetBuffer(arg, &view, PyBUF_SIMPLE) < 0)
+ if (PyObject_GetBuffer(data, &view, PyBUF_SIMPLE) < 0)
return NULL;
if (view.len > INT_MAX) {
PyBuffer_Release(&view);
@@ -3429,8 +4145,24 @@
}
}
-static PyObject*
-xmlparser_parse_whole(XMLParserObject* self, PyObject* args)
+/*[clinic input]
+_elementtree.XMLParser._parse_whole
+
+ self: self(type='XMLParserObject *')
+ file: object
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_XMLParser__parse_whole__doc__,
+"_parse_whole(file)");
+
+#define _ELEMENTTREE_XMLPARSER__PARSE_WHOLE_METHODDEF \
+ {"_parse_whole", (PyCFunction)_elementtree_XMLParser__parse_whole, METH_O,
_elementtree_XMLParser__parse_whole__doc__},
+
+static PyObject *
+_elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
+/*[clinic end generated code:
checksum=1de535f1ffda36f6063de9c643d867d05a7fabe4]*/
{
/* (internal) parse the whole input, until end of stream */
PyObject* reader;
@@ -3438,11 +4170,7 @@
PyObject* temp;
PyObject* res;
- PyObject* fileobj;
- if (!PyArg_ParseTuple(args, "O:_parse", &fileobj))
- return NULL;
-
- reader = PyObject_GetAttrString(fileobj, "read");
+ reader = PyObject_GetAttrString(file, "read");
if (!reader)
return NULL;
@@ -3503,25 +4231,83 @@
return res;
}
-static PyObject*
-xmlparser_doctype(XMLParserObject *self, PyObject *args)
+/*[clinic input]
+_elementtree.XMLParser.doctype
+
+ self: self(type='XMLParserObject *')
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_XMLParser_doctype__doc__,
+"doctype()");
+
+#define _ELEMENTTREE_XMLPARSER_DOCTYPE_METHODDEF \
+ {"doctype", (PyCFunction)_elementtree_XMLParser_doctype, METH_NOARGS,
_elementtree_XMLParser_doctype__doc__},
+
+static PyObject *
+_elementtree_XMLParser_doctype_impl(XMLParserObject *self);
+
+static PyObject *
+_elementtree_XMLParser_doctype(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _elementtree_XMLParser_doctype_impl((XMLParserObject
*)self);
+
+ return return_value;
+}
+
+static PyObject *
+_elementtree_XMLParser_doctype_impl(XMLParserObject *self)
+/*[clinic end generated code:
checksum=a4be49db2c4827ccbee8f4511468d05d0dec0281]*/
{
Py_RETURN_NONE;
}
-static PyObject*
-xmlparser_setevents(XMLParserObject *self, PyObject* args)
+/*[clinic input]
+_elementtree.XMLParser._setevents
+
+ self: self(type='XMLParserObject *')
+ events_queue: object(subclass_of='&PyList_Type')
+ events_to_report: object = None
+ /
+
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_elementtree_XMLParser__setevents__doc__,
+"_setevents(events_queue, events_to_report=None)");
+
+#define _ELEMENTTREE_XMLPARSER__SETEVENTS_METHODDEF \
+ {"_setevents", (PyCFunction)_elementtree_XMLParser__setevents,
METH_VARARGS, _elementtree_XMLParser__setevents__doc__},
+
+static PyObject *
+_elementtree_XMLParser__setevents_impl(XMLParserObject *self, PyObject
*events_queue, PyObject *events_to_report);
+
+static PyObject *
+_elementtree_XMLParser__setevents(PyObject *self, PyObject *args)
+{
+ PyObject *return_value = NULL;
+ PyObject *events_queue;
+ PyObject *events_to_report = Py_None;
+
+ if (!PyArg_ParseTuple(args,
+ "O!|O:_setevents",
+ &PyList_Type, &events_queue, &events_to_report))
+ goto exit;
+ return_value = _elementtree_XMLParser__setevents_impl((XMLParserObject
*)self, events_queue, events_to_report);
+
+exit:
+ return return_value;
+}
+
+static PyObject *
+_elementtree_XMLParser__setevents_impl(XMLParserObject *self, PyObject
*events_queue, PyObject *events_to_report)
+/*[clinic end generated code:
checksum=fb035b7fbf8a08b852467eecd664d0058ce56344]*/
{
/* activate element event reporting */
Py_ssize_t i, seqlen;
TreeBuilderObject *target;
-
- PyObject *events_queue;
- PyObject *events_to_report = Py_None;
PyObject *events_seq;
- if (!PyArg_ParseTuple(args, "O!|O:_setevents", &PyList_Type,
&events_queue,
- &events_to_report))
- return NULL;
if (!TreeBuilder_CheckExact(self->target)) {
PyErr_SetString(
@@ -3606,11 +4392,11 @@
}
static PyMethodDef xmlparser_methods[] = {
- {"feed", (PyCFunction) xmlparser_feed, METH_O},
- {"close", (PyCFunction) xmlparser_close, METH_VARARGS},
- {"_parse_whole", (PyCFunction) xmlparser_parse_whole, METH_VARARGS},
- {"_setevents", (PyCFunction) xmlparser_setevents, METH_VARARGS},
- {"doctype", (PyCFunction) xmlparser_doctype, METH_VARARGS},
+ _ELEMENTTREE_XMLPARSER_FEED_METHODDEF
+ _ELEMENTTREE_XMLPARSER_CLOSE_METHODDEF
+ _ELEMENTTREE_XMLPARSER__PARSE_WHOLE_METHODDEF
+ _ELEMENTTREE_XMLPARSER__SETEVENTS_METHODDEF
+ _ELEMENTTREE_XMLPARSER_DOCTYPE_METHODDEF
{NULL, NULL}
};
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com