Skip to content
Open
Show file tree
Hide file tree
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
7 changes: 7 additions & 0 deletions Doc/whatsnew/3.16.rst
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,13 @@ functools
* Calling the Python implementation of :func:`functools.reduce` with *function*
or *sequence* as keyword arguments has been deprecated since Python 3.14.

logging
-------

* Support for custom logging handlers with the *strm* argument is deprecated
and scheduled for removal in Python 3.16. Define handlers with the *stream*
argument instead.

symtable
--------

Expand Down
23 changes: 1 addition & 22 deletions Lib/logging/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -865,28 +865,7 @@ def configure_handler(self, config):
else:
factory = klass
kwargs = {k: config[k] for k in config if (k != '.' and valid_ident(k))}
# When deprecation ends for using the 'strm' parameter, remove the
# "except TypeError ..."
try:
result = factory(**kwargs)
except TypeError as te:
if "'stream'" not in str(te):
raise
#The argument name changed from strm to stream
#Retry with old name.
#This is so that code can be used with older Python versions
#(e.g. by Django)
kwargs['strm'] = kwargs.pop('stream')
result = factory(**kwargs)

import warnings
warnings.warn(
"Support for custom logging handlers with the 'strm' argument "
"is deprecated and scheduled for removal in Python 3.16. "
"Define handlers with the 'stream' argument instead.",
DeprecationWarning,
stacklevel=2,
)
result = factory(**kwargs)
if formatter:
result.setFormatter(formatter)
if level is not None:
Expand Down
18 changes: 6 additions & 12 deletions Lib/test/test_logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -3297,12 +3297,11 @@ def format(self, record):
}
}

# Remove when deprecation ends.
class DeprecatedStrmHandler(logging.StreamHandler):
class StrmHandler(logging.StreamHandler):
def __init__(self, strm=None):
super().__init__(stream=strm)

config_custom_handler_with_deprecated_strm_arg = {
config_custom_handler_with_removed_strm_arg = {
"version": 1,
"formatters": {
"form1": {
Expand All @@ -3311,7 +3310,7 @@ def __init__(self, strm=None):
},
"handlers": {
"hand1": {
"class": DeprecatedStrmHandler,
"class": StrmHandler,
"formatter": "form1",
"level": "NOTSET",
"stream": "ext://sys.stdout",
Expand Down Expand Up @@ -3417,14 +3416,9 @@ def test_config5_ok(self):
self.test_config1_ok(config=self.config5)
self.check_handler('hand1', CustomHandler)

def test_deprecation_warning_custom_handler_with_strm_arg(self):
msg = (
"Support for custom logging handlers with the 'strm' argument "
"is deprecated and scheduled for removal in Python 3.16. "
"Define handlers with the 'stream' argument instead."
)
with self.assertWarnsRegex(DeprecationWarning, msg):
self.test_config1_ok(config=self.config_custom_handler_with_deprecated_strm_arg)
def test_removed_strm_arg(self):
with self.assertRaisesRegex(ValueError, 'hand1'):
self.apply_config(self.config_custom_handler_with_removed_strm_arg)

def test_config6_failure(self):
self.assertRaises(Exception, self.apply_config, self.config6)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Remove support of deprecated *strm* argument for :mod:`logging` handlers.
Loading