[Python-checkins] bpo-44498: Issue a deprecation warning on asynchat, asyncore and smtpd import (#26882)
warsaw
webhook-mailer at python.org
Thu Jun 24 15:37:50 EDT 2021
https://github.com/python/cpython/commit/8488b85c6397fe58f17fc00e047044c959ac0b04
commit: 8488b85c6397fe58f17fc00e047044c959ac0b04
branch: main
author: Barry Warsaw <barry at python.org>
committer: warsaw <barry at python.org>
date: 2021-06-24T12:37:26-07:00
summary:
bpo-44498: Issue a deprecation warning on asynchat, asyncore and smtpd import (#26882)
* Issue a deprecation warning on smtpd import
* Also issue DeprecationWarnings for asynchat and asyncore
* Fix some tests
* test___all__ requires the word 'module' or 'package' in the deprecation
warning text, so add those to smtpd, asynchat, and asyncore.
* In test_support, use pprint now instead of asyncore as the landmark.
* Add What's New
* Use ..deprecated::
* Use ..deprecated::
* Update Lib/smtpd.py
Co-authored-by: Miro Hrončok <miro at hroncok.cz>
* Update Doc/library/smtpd.rst
Co-authored-by: Miro Hrončok <miro at hroncok.cz>
* Import async{hat,ore} after the DeprecationWarning for this module
Co-authored-by: Miro Hrončok <miro at hroncok.cz>
files:
M Doc/library/smtpd.rst
M Doc/whatsnew/3.10.rst
M Lib/asynchat.py
M Lib/asyncore.py
M Lib/smtpd.py
M Lib/test/test_support.py
diff --git a/Doc/library/smtpd.rst b/Doc/library/smtpd.rst
index ae66e7e4596c6..611411ddd295b 100644
--- a/Doc/library/smtpd.rst
+++ b/Doc/library/smtpd.rst
@@ -13,11 +13,10 @@
This module offers several classes to implement SMTP (email) servers.
-.. seealso::
-
- The `aiosmtpd <http://aiosmtpd.readthedocs.io/>`_ package is a recommended
- replacement for this module. It is based on :mod:`asyncio` and provides a
- more straightforward API. :mod:`smtpd` should be considered deprecated.
+.. deprecated:: 3.6
+ The `aiosmtpd <https://aiosmtpd.readthedocs.io/>`_ package is a recommended
+ replacement for this module. It is based on :mod:`asyncio` and provides a
+ more straightforward API.
Several server implementations are present; one is a generic
do-nothing implementation, which can be overridden, while the other two offer
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index 63d1bd02c68b9..2a43d2686e3fb 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -883,6 +883,12 @@ The :meth:`~array.array.index` method of :class:`array.array` now has
optional *start* and *stop* parameters.
(Contributed by Anders Lorentsen and Zackery Spytz in :issue:`31956`.)
+asynchat, asyncore, smtpd
+-------------------------
+These modules have been marked as deprecated in their module documentation
+since Python 3.6. An import-time :class:`DeprecationWarning` has now been
+added to all three of these modules.
+
base64
------
diff --git a/Lib/asynchat.py b/Lib/asynchat.py
index f4ba361bd4a3e..de26ffa648ffe 100644
--- a/Lib/asynchat.py
+++ b/Lib/asynchat.py
@@ -48,6 +48,14 @@
import asyncore
from collections import deque
+from warnings import warn
+warn(
+ 'The asynchat module is deprecated. '
+ 'The recommended replacement is asyncio',
+ DeprecationWarning,
+ stacklevel=2)
+
+
class async_chat(asyncore.dispatcher):
"""This is an abstract class. You must derive from this class, and add
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index eeea48888616d..b1eea4bf65211 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -57,6 +57,13 @@
ENOTCONN, ESHUTDOWN, EISCONN, EBADF, ECONNABORTED, EPIPE, EAGAIN, \
errorcode
+warnings.warn(
+ 'The asyncore module is deprecated. '
+ 'The recommended replacement is asyncio',
+ DeprecationWarning,
+ stacklevel=2)
+
+
_DISCONNECTED = frozenset({ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE,
EBADF})
diff --git a/Lib/smtpd.py b/Lib/smtpd.py
index d0536023e8401..1cd004fbc6fe5 100755
--- a/Lib/smtpd.py
+++ b/Lib/smtpd.py
@@ -76,8 +76,6 @@
import getopt
import time
import socket
-import asyncore
-import asynchat
import collections
from warnings import warn
from email._header_value_parser import get_addr_spec, get_angle_addr
@@ -86,6 +84,19 @@
"SMTPChannel", "SMTPServer", "DebuggingServer", "PureProxy",
]
+warn(
+ 'The smtpd module is deprecated and unmaintained. Please see aiosmtpd '
+ '(https://aiosmtpd.readthedocs.io/) for the recommended replacement.',
+ DeprecationWarning,
+ stacklevel=2)
+
+
+# These are imported after the above warning so that users get the correct
+# deprecation warning.
+import asyncore
+import asynchat
+
+
program = sys.argv[0]
__version__ = 'Python SMTP proxy version 0.3'
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 55d78b733353d..b1d3411a865bb 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -292,8 +292,8 @@ def test_check_syntax_error(self):
def test_CleanImport(self):
import importlib
- with import_helper.CleanImport("asyncore"):
- importlib.import_module("asyncore")
+ with import_helper.CleanImport("pprint"):
+ importlib.import_module("pprint")
def test_DirsOnSysPath(self):
with import_helper.DirsOnSysPath('foo', 'bar'):
More information about the Python-checkins
mailing list