summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/parser.rst8
-rw-r--r--Doc/whatsnew/3.9.rst4
-rw-r--r--Lib/test/test_parser.py9
-rw-r--r--Misc/NEWS.d/next/Library/2019-07-30-01-27-29.bpo-37268.QDmA44.rst2
-rw-r--r--Modules/parsermodule.c6
5 files changed, 25 insertions, 4 deletions
diff --git a/Doc/library/parser.rst b/Doc/library/parser.rst
index a302681..c55cd65 100644
--- a/Doc/library/parser.rst
+++ b/Doc/library/parser.rst
@@ -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
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 85e254f..273fd2b 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -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
=======
diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py
index e5285c6..ec1845d 100644
--- a/Lib/test/test_parser.py
+++ b/Lib/test/test_parser.py
@@ -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()
diff --git a/Misc/NEWS.d/next/Library/2019-07-30-01-27-29.bpo-37268.QDmA44.rst b/Misc/NEWS.d/next/Library/2019-07-30-01-27-29.bpo-37268.QDmA44.rst
new file mode 100644
index 0000000..d5c7b1d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-07-30-01-27-29.bpo-37268.QDmA44.rst
@@ -0,0 +1,2 @@
+The :mod:`parser` module is deprecated and will be removed in future
+versions of Python.
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 079d00f..b2495fc 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -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);