From: Barry Warsaw Date: Thu, 24 Jun 2021 19:37:26 +0000 (-0700) Subject: bpo-44498: Issue a deprecation warning on asynchat, asyncore and smtpd import (#26882) X-Git-Tag: v3.11.0a1~784 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8488b85c6397fe58f17fc00e047044c959ac0b04;p=thirdparty%2FPython%2Fcpython.git 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 * Update Doc/library/smtpd.rst Co-authored-by: Miro Hrončok * Import async{hat,ore} after the DeprecationWarning for this module Co-authored-by: Miro Hrončok --- diff --git a/Doc/library/smtpd.rst b/Doc/library/smtpd.rst index ae66e7e4596c..611411ddd295 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 `_ 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 `_ 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 63d1bd02c68b..2a43d2686e3f 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 f4ba361bd4a3..de26ffa648ff 100644 --- a/Lib/asynchat.py +++ b/Lib/asynchat.py @@ -48,6 +48,14 @@ you - by calling your self.found_terminator() method. 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 eeea48888616..b1eea4bf6521 100644 --- a/Lib/asyncore.py +++ b/Lib/asyncore.py @@ -57,6 +57,13 @@ from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, EINVAL, \ 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 d0536023e840..1cd004fbc6fe 100755 --- a/Lib/smtpd.py +++ b/Lib/smtpd.py @@ -76,8 +76,6 @@ import errno 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 @@ __all__ = [ "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 55d78b733353..b1d3411a865b 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -292,8 +292,8 @@ class TestSupport(unittest.TestCase): 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'):