bpo-37268: Add deprecation notice and a DeprecationWarning for the parser module (GH-15017)

Deprecate the parser module and add a deprecation warning triggered on import and a warning block in the documentation.





https://bugs.python.org/issue37268



Automerge-Triggered-By: @pablogsal
This commit is contained in:
Pablo Galindo 2019-07-30 12:04:01 +01:00 committed by Miss Islington (bot)
parent f35c51d2ea
commit 9211e2fd81
5 changed files with 25 additions and 4 deletions

View File

@ -25,11 +25,11 @@ from this. This is better than trying to parse and modify an arbitrary Python
code fragment as a string because parsing is performed in a manner identical to
the code forming the application. It is also faster.
.. note::
.. warning::
From Python 2.5 onward, it's much more convenient to cut in at the Abstract
Syntax Tree (AST) generation and compilation stage, using the :mod:`ast`
module.
The parser module is deprecated and will be removed in future versions of
Python. For the majority of use cases you can leverage the Abstract Syntax
Tree (AST) generation and compilation stage, using the :mod:`ast` module.
There are a few things to note about this module which are important to making
use of the data structures created. This is not a tutorial on editing the parse

View File

@ -142,6 +142,10 @@ Deprecated
Python versions it will raise a :exc:`TypeError` for all floats.
(Contributed by Serhiy Storchaka in :issue:`37315`.)
* The :mod:`parser` module is deprecated and will be removed in future versions
of Python. For the majority of use cases users can leverage the Abstract Syntax
Tree (AST) generation and compilation stage, using the :mod:`ast` module.
Removed
=======

View File

@ -6,6 +6,7 @@ import operator
import struct
from test import support
from test.support.script_helper import assert_python_failure
from test.support.script_helper import assert_python_ok
#
# First, we test that we can generate trees from valid source fragments,
@ -987,5 +988,13 @@ class OtherParserCase(unittest.TestCase):
with self.assertRaises(TypeError):
parser.expr("a", "b")
class TestDeprecation(unittest.TestCase):
def test_deprecation_message(self):
code = "def f():\n import parser\n\nf()"
rc, out, err = assert_python_ok('-c', code)
self.assertIn(b'<string>:2: DeprecationWarning', err)
if __name__ == "__main__":
unittest.main()

View File

@ -0,0 +1,2 @@
The :mod:`parser` module is deprecated and will be removed in future
versions of Python.

View File

@ -1158,6 +1158,12 @@ PyInit_parser(void)
{
PyObject *module, *copyreg;
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"The parser module is deprecated and will be removed "
"in future versions of Python", 7) != 0) {
return NULL;
}
if (PyType_Ready(&PyST_Type) < 0)
return NULL;
module = PyModule_Create(&parsermodule);