Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
gh-92611: Add details on replacements for cgi utility funcs (GH-92792)
Per @brettcannon 's [suggestions on the Discourse thread](https://discuss.python.org/t/pep-594-take-2-removing-dead-batteries-from-the-standard-library/13508/51), discussed in GH-92611 and as a followup to PR GH-92612 , this PR add additional specific per-function replacement information for the utility functions in the `cgi` module deprecated by PEP 594 (PEP-594).

@brettcannon , should this be backported (without the `deprecated-removed` , which I would update it accordingly and re-add in my other PR adding that to the others for 3.11+), or just go in 3.11+?
(cherry picked from commit 71354ad)

Co-authored-by: CAM Gerlach <CAM.Gerlach@Gerlach.CAM>
  • Loading branch information
CAM-Gerlach authored and miss-islington committed Jun 17, 2022
commit 8f71571e30a819ddbcfe1e113e557e2b68be9658
31 changes: 31 additions & 0 deletions Doc/library/cgi.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@
The :mod:`cgi` module is deprecated
(see :pep:`PEP 594 <594#cgi>` for details and alternatives).

The :class:`FieldStorage` class can typically be replaced with
:func:`urllib.parse.parse_qsl` for ``GET`` and ``HEAD`` requests,
and the :mod:`email.message` module or
`multipart <https://pypi.org/project/multipart/>`_ for ``POST`` and ``PUT``.
Most :ref:`utility functions <functions-in-cgi-module>` have replacements.

--------------

Support module for Common Gateway Interface (CGI) scripts.
Expand Down Expand Up @@ -293,6 +299,12 @@ algorithms implemented in this module in other circumstances.
``sys.stdin``). The *keep_blank_values*, *strict_parsing* and *separator* parameters are
passed to :func:`urllib.parse.parse_qs` unchanged.

.. deprecated-removed:: 3.11 3.13
This function, like the rest of the :mod:`cgi` module, is deprecated.
It can be replaced by calling :func:`urllib.parse.parse_qs` directly
on the desired query string (except for ``multipart/form-data`` input,
which can be handled as described for :func:`parse_multipart`).


.. function:: parse_multipart(fp, pdict, encoding="utf-8", errors="replace", separator="&")

Expand All @@ -316,12 +328,31 @@ algorithms implemented in this module in other circumstances.
.. versionchanged:: 3.10
Added the *separator* parameter.

.. deprecated-removed:: 3.11 3.13
This function, like the rest of the :mod:`cgi` module, is deprecated.
It can be replaced with the functionality in the :mod:`email` package
(e.g. :class:`email.message.EmailMessage`/:class:`email.message.Message`)
which implements the same MIME RFCs, or with the
`multipart <https://pypi.org/project/multipart/>`__ PyPI project.


.. function:: parse_header(string)

Parse a MIME header (such as :mailheader:`Content-Type`) into a main value and a
dictionary of parameters.

.. deprecated-removed:: 3.11 3.13
This function, like the rest of the :mod:`cgi` module, is deprecated.
It can be replaced with the functionality in the :mod:`email` package,
which implements the same MIME RFCs.

For example, with :class:`email.message.EmailMessage`::

from email.message import EmailMessage
msg = EmailMessage()
msg['content-type'] = 'application/json; charset="utf8"'
main, params = msg.get_content_type(), msg['content-type'].params


.. function:: test()

Expand Down