bpo-42644: Validate values in logging.disable() (#23786)

* bpo-42644: Validate values in logging.disable()

Technically make the value of manager a property that checks and convert
values assigned to it properly. This has the side effect of making
`logging.disable` also accept strings representing the various level of
warnings.

We want to validate the type of the disable attribute at assignment
time, as it is later compared to other levels when emitting warnings and
would generate a `TypeError: '>=' not supported between ....` in a
different part of the code base, which can make it difficult to track
down.

When assigned an incorrect value; it will raise a TypeError when the
wrong type, or ValueError if an invalid str.

Co-authored-by: Andrew Svetlov <andrew.svetlov@gmail.com>
This commit is contained in:
Matthias Bussonnier 2020-12-16 01:43:39 -08:00 committed by GitHub
parent 3f9fe23c05
commit b32d8b4f9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 0 deletions

View File

@ -1289,6 +1289,14 @@ class Manager(object):
self.loggerClass = None self.loggerClass = None
self.logRecordFactory = None self.logRecordFactory = None
@property
def disable(self):
return self._disable
@disable.setter
def disable(self, value):
self._disable = _checkLevel(value)
def getLogger(self, name): def getLogger(self, name):
""" """
Get a logger with the specified name (channel name), creating it Get a logger with the specified name (channel name), creating it

View File

@ -4219,6 +4219,15 @@ class ModuleLevelMiscTest(BaseTest):
logging.disable(83) logging.disable(83)
self.assertEqual(logging.root.manager.disable, 83) self.assertEqual(logging.root.manager.disable, 83)
self.assertRaises(ValueError, logging.disable, "doesnotexists")
class _NotAnIntOrString:
pass
self.assertRaises(TypeError, logging.disable, _NotAnIntOrString())
logging.disable("WARN")
# test the default value introduced in 3.7 # test the default value introduced in 3.7
# (Issue #28524) # (Issue #28524)
logging.disable() logging.disable()

View File

@ -0,0 +1,3 @@
`logging.disable` will now validate the types and value of its parameter. It
also now accepts strings representing the levels (as does `loging.setLevel`)
instead of only the numerical values.