Skip to content

Commit

Permalink
bpo-37268: Add deprecation notice and a DeprecationWarning for the pa…
Browse files Browse the repository at this point in the history
…rser module (pythonGH-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
  • Loading branch information
pablogsal authored and miss-islington committed Jul 30, 2019
1 parent f35c51d commit 9211e2f
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 4 deletions.
8 changes: 4 additions & 4 deletions Doc/library/parser.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions Doc/whatsnew/3.9.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
=======
Expand Down
9 changes: 9 additions & 0 deletions Lib/test/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
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,
Expand Down Expand Up @@ -987,5 +988,13 @@ def test_two_args_to_expr(self):
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()
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
The :mod:`parser` module is deprecated and will be removed in future
versions of Python.
6 changes: 6 additions & 0 deletions Modules/parsermodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 9211e2f

Please sign in to comment.