]> granicus.if.org Git - python/commitdiff
bpo-37268: Add deprecation notice and a DeprecationWarning for the parser module...
authorPablo Galindo <Pablogsal@gmail.com>
Tue, 30 Jul 2019 11:04:01 +0000 (12:04 +0100)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 30 Jul 2019 11:04:01 +0000 (04:04 -0700)
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
Doc/library/parser.rst
Doc/whatsnew/3.9.rst
Lib/test/test_parser.py
Misc/NEWS.d/next/Library/2019-07-30-01-27-29.bpo-37268.QDmA44.rst [new file with mode: 0644]
Modules/parsermodule.c

index a302681eca056855c8b458d2412f6d4380833b55..c55cd653b371e8675d564c2316d1de1298ef7b0b 100644 (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
index 85e254f061eb9af285b57dd56dd2cdcbd2251d26..273fd2b50d59cf038632721eb824619d9bbfcdab 100644 (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
 =======
index e5285c6360229d7434460e99c85edc2d037bcf61..ec1845d7fe9ae0315aa18344ad64ca757baf679a 100644 (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()
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 (file)
index 0000000..d5c7b1d
--- /dev/null
@@ -0,0 +1,2 @@
+The :mod:`parser` module is deprecated and will be removed in future
+versions of Python.
index 079d00f32aa6cd3bbed2bcd12dc41d37e7c4e532..b2495fc8b322ee8c3676e58016d10de94ea7a39b 100644 (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);