summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2018-07-24 09:03:34 (GMT)
committerGitHub <noreply@github.com>2018-07-24 09:03:34 (GMT)
commit02ec92fa7b1dddc23d479ee0b87dc283793505a8 (patch)
tree4fc90891da617efbc74239d9dc62eef44f3aa5ff /Modules
parentc5734998d91e9953fd179ba6ed7015b6343e8191 (diff)
downloadcpython-02ec92fa7b1dddc23d479ee0b87dc283793505a8.zip
cpython-02ec92fa7b1dddc23d479ee0b87dc283793505a8.tar.gz
cpython-02ec92fa7b1dddc23d479ee0b87dc283793505a8.tar.bz2
bpo-29209: Remove old-deprecated features in ElementTree. (GH-6769)
Also make getchildren() and getiterator() emitting a DeprecationWarning instead of PendingDeprecationWarning.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_elementtree.c87
-rw-r--r--Modules/clinic/_elementtree.c.h46
2 files changed, 21 insertions, 112 deletions
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index 1dfdb3c..1500a6d 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -1429,8 +1429,7 @@ static PyObject *
_elementtree_Element_getiterator_impl(ElementObject *self, PyObject *tag)
/*[clinic end generated code: output=cb69ff4a3742dfa1 input=500da1a03f7b9e28]*/
{
- /* Change for a DeprecationWarning in 1.4 */
- if (PyErr_WarnEx(PyExc_PendingDeprecationWarning,
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
"This method will be removed in future versions. "
"Use 'tree.iter()' or 'list(tree.iter())' instead.",
1) < 0) {
@@ -2770,12 +2769,6 @@ typedef struct {
} XMLParserObject;
-static PyObject*
-_elementtree_XMLParser_doctype(XMLParserObject *self, PyObject *const *args, Py_ssize_t nargs);
-static PyObject *
-_elementtree_XMLParser_doctype_impl(XMLParserObject *self, PyObject *name,
- PyObject *pubid, PyObject *system);
-
/* helpers */
LOCAL(PyObject*)
@@ -3139,10 +3132,9 @@ expat_start_doctype_handler(XMLParserObject *self,
const XML_Char *pubid,
int has_internal_subset)
{
- PyObject *self_pyobj = (PyObject *)self;
+ _Py_IDENTIFIER(doctype);
PyObject *doctype_name_obj, *sysid_obj, *pubid_obj;
- PyObject *parser_doctype = NULL;
- PyObject *res = NULL;
+ PyObject *res;
if (PyErr_Occurred())
return;
@@ -3179,33 +3171,15 @@ expat_start_doctype_handler(XMLParserObject *self,
res = PyObject_CallFunctionObjArgs(self->handle_doctype,
doctype_name_obj, pubid_obj,
sysid_obj, NULL);
- Py_CLEAR(res);
+ Py_XDECREF(res);
}
- else {
- /* Now see if the parser itself has a doctype method. If yes and it's
- * a custom method, call it but warn about deprecation. If it's only
- * the vanilla XMLParser method, do nothing.
- */
- parser_doctype = PyObject_GetAttrString(self_pyobj, "doctype");
- if (parser_doctype &&
- !(PyCFunction_Check(parser_doctype) &&
- PyCFunction_GET_SELF(parser_doctype) == self_pyobj &&
- PyCFunction_GET_FUNCTION(parser_doctype) ==
- (PyCFunction) _elementtree_XMLParser_doctype)) {
- res = _elementtree_XMLParser_doctype_impl(self, doctype_name_obj,
- pubid_obj, sysid_obj);
- if (!res)
- goto clear;
- Py_DECREF(res);
- res = PyObject_CallFunctionObjArgs(parser_doctype,
- doctype_name_obj, pubid_obj,
- sysid_obj, NULL);
- Py_CLEAR(res);
- }
+ else if (_PyObject_LookupAttrId((PyObject *)self, &PyId_doctype, &res) > 0) {
+ (void)PyErr_WarnEx(PyExc_RuntimeWarning,
+ "The doctype() method of XMLParser is ignored. "
+ "Define doctype() method on the TreeBuilder target.",
+ 1);
}
-clear:
- Py_XDECREF(parser_doctype);
Py_DECREF(doctype_name_obj);
Py_DECREF(pubid_obj);
Py_DECREF(sysid_obj);
@@ -3269,25 +3243,17 @@ ignore_attribute_error(PyObject *value)
/*[clinic input]
_elementtree.XMLParser.__init__
- html: object = NULL
+ *
target: object = NULL
encoding: str(accept={str, NoneType}) = NULL
[clinic start generated code]*/
static int
-_elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *html,
- PyObject *target, const char *encoding)
-/*[clinic end generated code: output=d6a16c63dda54441 input=155bc5695baafffd]*/
-{
- if (html != NULL) {
- if (PyErr_WarnEx(PyExc_DeprecationWarning,
- "The html argument of XMLParser() is deprecated",
- 1) < 0) {
- return -1;
- }
- }
-
+_elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *target,
+ const char *encoding)
+/*[clinic end generated code: output=3ae45ec6cdf344e4 input=96288fcba916cfce]*/
+{
self->entity = PyDict_New();
if (!self->entity)
return -1;
@@ -3616,30 +3582,6 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
}
/*[clinic input]
-_elementtree.XMLParser.doctype
-
- name: object
- pubid: object
- system: object
- /
-
-[clinic start generated code]*/
-
-static PyObject *
-_elementtree_XMLParser_doctype_impl(XMLParserObject *self, PyObject *name,
- PyObject *pubid, PyObject *system)
-/*[clinic end generated code: output=10fb50c2afded88d input=84050276cca045e1]*/
-{
- if (PyErr_WarnEx(PyExc_DeprecationWarning,
- "This method of XMLParser is deprecated. Define"
- " doctype() method on the TreeBuilder target.",
- 1) < 0) {
- return NULL;
- }
- Py_RETURN_NONE;
-}
-
-/*[clinic input]
_elementtree.XMLParser._setevents
events_queue: object
@@ -3923,7 +3865,6 @@ static PyMethodDef xmlparser_methods[] = {
_ELEMENTTREE_XMLPARSER_CLOSE_METHODDEF
_ELEMENTTREE_XMLPARSER__PARSE_WHOLE_METHODDEF
_ELEMENTTREE_XMLPARSER__SETEVENTS_METHODDEF
- _ELEMENTTREE_XMLPARSER_DOCTYPE_METHODDEF
{NULL, NULL}
};
diff --git a/Modules/clinic/_elementtree.c.h b/Modules/clinic/_elementtree.c.h
index 6b55887..78b9be8 100644
--- a/Modules/clinic/_elementtree.c.h
+++ b/Modules/clinic/_elementtree.c.h
@@ -632,24 +632,23 @@ exit:
}
static int
-_elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *html,
- PyObject *target, const char *encoding);
+_elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *target,
+ const char *encoding);
static int
_elementtree_XMLParser___init__(PyObject *self, PyObject *args, PyObject *kwargs)
{
int return_value = -1;
- static const char * const _keywords[] = {"html", "target", "encoding", NULL};
- static _PyArg_Parser _parser = {"|OOz:XMLParser", _keywords, 0};
- PyObject *html = NULL;
+ static const char * const _keywords[] = {"target", "encoding", NULL};
+ static _PyArg_Parser _parser = {"|$Oz:XMLParser", _keywords, 0};
PyObject *target = NULL;
const char *encoding = NULL;
if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser,
- &html, &target, &encoding)) {
+ &target, &encoding)) {
goto exit;
}
- return_value = _elementtree_XMLParser___init___impl((XMLParserObject *)self, html, target, encoding);
+ return_value = _elementtree_XMLParser___init___impl((XMLParserObject *)self, target, encoding);
exit:
return return_value;
@@ -688,37 +687,6 @@ PyDoc_STRVAR(_elementtree_XMLParser__parse_whole__doc__,
#define _ELEMENTTREE_XMLPARSER__PARSE_WHOLE_METHODDEF \
{"_parse_whole", (PyCFunction)_elementtree_XMLParser__parse_whole, METH_O, _elementtree_XMLParser__parse_whole__doc__},
-PyDoc_STRVAR(_elementtree_XMLParser_doctype__doc__,
-"doctype($self, name, pubid, system, /)\n"
-"--\n"
-"\n");
-
-#define _ELEMENTTREE_XMLPARSER_DOCTYPE_METHODDEF \
- {"doctype", (PyCFunction)_elementtree_XMLParser_doctype, METH_FASTCALL, _elementtree_XMLParser_doctype__doc__},
-
-static PyObject *
-_elementtree_XMLParser_doctype_impl(XMLParserObject *self, PyObject *name,
- PyObject *pubid, PyObject *system);
-
-static PyObject *
-_elementtree_XMLParser_doctype(XMLParserObject *self, PyObject *const *args, Py_ssize_t nargs)
-{
- PyObject *return_value = NULL;
- PyObject *name;
- PyObject *pubid;
- PyObject *system;
-
- if (!_PyArg_UnpackStack(args, nargs, "doctype",
- 3, 3,
- &name, &pubid, &system)) {
- goto exit;
- }
- return_value = _elementtree_XMLParser_doctype_impl(self, name, pubid, system);
-
-exit:
- return return_value;
-}
-
PyDoc_STRVAR(_elementtree_XMLParser__setevents__doc__,
"_setevents($self, events_queue, events_to_report=None, /)\n"
"--\n"
@@ -749,4 +717,4 @@ _elementtree_XMLParser__setevents(XMLParserObject *self, PyObject *const *args,
exit:
return return_value;
}
-/*[clinic end generated code: output=c5a85a88bbb5cc06 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=1bff22415aabb78b input=a9049054013a1b77]*/