summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2022-04-08 17:15:35 -0700
committerGitHub <noreply@github.com>2022-04-08 17:15:35 -0700
commitcd29bd13ef1fe18970c5d43b66c545dd03117cb9 (patch)
treecc111c2bf79956a6a8680f53500662cb2511081b
parent1c8b3b5d66a629258f1db16939b996264a8b9c37 (diff)
downloadcpython-git-cd29bd13ef1fe18970c5d43b66c545dd03117cb9.tar.gz
bpo-47061: deprecate cgi and cgitb (GH-32410)
Part of PEP 594.
-rw-r--r--Doc/whatsnew/3.11.rst2
-rwxr-xr-xLib/cgi.py3
-rw-r--r--Lib/cgitb.py4
-rw-r--r--Lib/distutils/config.py5
-rw-r--r--Lib/test/test_cgi.py4
-rw-r--r--Lib/test/test_cgitb.py3
-rw-r--r--Lib/test/test_httpservers.py13
-rw-r--r--Misc/NEWS.d/next/Library/2022-04-07-20-32-47.bpo-47061.TOufgh.rst1
8 files changed, 28 insertions, 7 deletions
diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst
index 2da01d8105..2758a268e9 100644
--- a/Doc/whatsnew/3.11.rst
+++ b/Doc/whatsnew/3.11.rst
@@ -834,6 +834,8 @@ Deprecated
* :mod:`aifc`
* :mod:`audioop`
+ * :mod:`cgi`
+ * :mod:`cgitb`
(Contributed by Brett Cannon in :issue:`47061`.)
diff --git a/Lib/cgi.py b/Lib/cgi.py
index 22897a14a9..8787567be7 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -53,6 +53,9 @@ __all__ = ["MiniFieldStorage", "FieldStorage", "parse", "parse_multipart",
"print_form", "print_directory", "print_arguments",
"print_environ_usage"]
+
+warnings._deprecated(__name__, remove=(3,13))
+
# Logging support
# ===============
diff --git a/Lib/cgitb.py b/Lib/cgitb.py
index ec15684309..8ce0e833a9 100644
--- a/Lib/cgitb.py
+++ b/Lib/cgitb.py
@@ -31,8 +31,12 @@ import tempfile
import time
import tokenize
import traceback
+import warnings
from html import escape as html_escape
+warnings._deprecated(__name__, remove=(3, 13))
+
+
def reset():
"""Return a string that resets the CGI and browser to a known state."""
return '''<!--: spam
diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py
index 2171abd696..a201c86a17 100644
--- a/Lib/distutils/config.py
+++ b/Lib/distutils/config.py
@@ -5,6 +5,7 @@ that uses .pypirc in the distutils.command package.
"""
import os
from configparser import RawConfigParser
+import warnings
from distutils.cmd import Command
@@ -111,7 +112,9 @@ class PyPIRCCommand(Command):
def _read_pypi_response(self, response):
"""Read and decode a PyPI HTTP response."""
- import cgi
+ with warnings.catch_warnings():
+ warnings.simplefilter("ignore", DeprecationWarning)
+ import cgi
content_type = response.getheader('content-type', 'text/plain')
encoding = cgi.parse_header(content_type)[1].get('charset', 'ascii')
return response.read().decode(encoding)
diff --git a/Lib/test/test_cgi.py b/Lib/test/test_cgi.py
index 06762f8872..24486e4d95 100644
--- a/Lib/test/test_cgi.py
+++ b/Lib/test/test_cgi.py
@@ -1,4 +1,3 @@
-import cgi
import os
import sys
import tempfile
@@ -8,6 +7,9 @@ from io import StringIO, BytesIO
from test import support
from test.support import warnings_helper
+cgi = warnings_helper.import_deprecated("cgi")
+
+
class HackedSysModule:
# The regression test will have real values in sys.argv, which
# will completely confuse the test of the cgi module
diff --git a/Lib/test/test_cgitb.py b/Lib/test/test_cgitb.py
index 590ffdea11..501c7fcce2 100644
--- a/Lib/test/test_cgitb.py
+++ b/Lib/test/test_cgitb.py
@@ -1,8 +1,9 @@
from test.support.os_helper import temp_dir
from test.support.script_helper import assert_python_failure
+from test.support.warnings_helper import import_deprecated
import unittest
import sys
-import cgitb
+cgitb = import_deprecated("cgitb")
class TestCgitb(unittest.TestCase):
diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py
index d20b45e8e0..1f041aa121 100644
--- a/Lib/test/test_httpservers.py
+++ b/Lib/test/test_httpservers.py
@@ -570,14 +570,19 @@ print("Hello World")
cgi_file2 = """\
#!%s
-import cgi
+import os
+import sys
+import urllib.parse
print("Content-type: text/html")
print()
-form = cgi.FieldStorage()
-print("%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"),
- form.getfirst("bacon")))
+content_length = int(os.environ["CONTENT_LENGTH"])
+query_string = sys.stdin.buffer.read(content_length)
+params = {key.decode("utf-8"): val.decode("utf-8")
+ for key, val in urllib.parse.parse_qsl(query_string)}
+
+print("%%s, %%s, %%s" %% (params["spam"], params["eggs"], params["bacon"]))
"""
cgi_file4 = """\
diff --git a/Misc/NEWS.d/next/Library/2022-04-07-20-32-47.bpo-47061.TOufgh.rst b/Misc/NEWS.d/next/Library/2022-04-07-20-32-47.bpo-47061.TOufgh.rst
new file mode 100644
index 0000000000..bd5424979c
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-04-07-20-32-47.bpo-47061.TOufgh.rst
@@ -0,0 +1 @@
+Deprecate cgi and cgitb.