Commit d4fabf41 authored by Vinay Sajip's avatar Vinay Sajip

Issue #6314: logging: Extra checks on the "level" argument.

parent f67367e2
...@@ -176,6 +176,17 @@ def addLevelName(level, levelName): ...@@ -176,6 +176,17 @@ def addLevelName(level, levelName):
finally: finally:
_releaseLock() _releaseLock()
def _checkLevel(level):
if isinstance(level, int):
rv = level
elif str(level) == level:
if level not in _levelNames:
raise ValueError("Unknown level: %r" % level)
rv = _levelNames[level]
else:
raise TypeError("Level not an integer or a valid string: %r" % level)
return rv
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Thread-related stuff # Thread-related stuff
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -593,7 +604,7 @@ class Handler(Filterer): ...@@ -593,7 +604,7 @@ class Handler(Filterer):
and the filter list to empty. and the filter list to empty.
""" """
Filterer.__init__(self) Filterer.__init__(self)
self.level = level self.level = _checkLevel(level)
self.formatter = None self.formatter = None
#get the module data lock, as we're updating a shared structure. #get the module data lock, as we're updating a shared structure.
_acquireLock() _acquireLock()
...@@ -631,7 +642,7 @@ class Handler(Filterer): ...@@ -631,7 +642,7 @@ class Handler(Filterer):
""" """
Set the logging level of this handler. Set the logging level of this handler.
""" """
self.level = level self.level = _checkLevel(level)
def format(self, record): def format(self, record):
""" """
...@@ -1009,7 +1020,7 @@ class Logger(Filterer): ...@@ -1009,7 +1020,7 @@ class Logger(Filterer):
""" """
Filterer.__init__(self) Filterer.__init__(self)
self.name = name self.name = name
self.level = level self.level = _checkLevel(level)
self.parent = None self.parent = None
self.propagate = 1 self.propagate = 1
self.handlers = [] self.handlers = []
...@@ -1019,7 +1030,7 @@ class Logger(Filterer): ...@@ -1019,7 +1030,7 @@ class Logger(Filterer):
""" """
Set the logging level of this logger. Set the logging level of this logger.
""" """
self.level = level self.level = _checkLevel(level)
def debug(self, msg, *args, **kwargs): def debug(self, msg, *args, **kwargs):
""" """
...@@ -1396,10 +1407,6 @@ def basicConfig(**kwargs): ...@@ -1396,10 +1407,6 @@ def basicConfig(**kwargs):
root.addHandler(hdlr) root.addHandler(hdlr)
level = kwargs.get("level") level = kwargs.get("level")
if level is not None: if level is not None:
if str(level) == level: # If a string was passed, do more checks
if level not in _levelNames:
raise ValueError("Unknown level: %r" % level)
level = _levelNames[level]
root.setLevel(level) root.setLevel(level)
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
......
...@@ -90,8 +90,7 @@ Core and Builtins ...@@ -90,8 +90,7 @@ Core and Builtins
Library Library
------- -------
- Issue #6314: logging.basicConfig() performs extra checks on the "level" - Issue #6314: logging: performs extra checks on the "level" argument.
argument.
- Issue #6274: Fixed possible file descriptors leak in subprocess.py - Issue #6274: Fixed possible file descriptors leak in subprocess.py
...@@ -133,7 +132,7 @@ Library ...@@ -133,7 +132,7 @@ Library
------- -------
- Issue #6438: Fixed distutils.cygwinccompiler.get_versions : the regular - Issue #6438: Fixed distutils.cygwinccompiler.get_versions : the regular
expression string pattern was trying to match against a bytes returned by expression string pattern was trying to match against a bytes returned by
Popen. Tested under win32 to build the py-postgresql project. Popen. Tested under win32 to build the py-postgresql project.
- Issue #6258: Support AMD64 in bdist_msi. - Issue #6258: Support AMD64 in bdist_msi.
...@@ -892,22 +891,22 @@ Core and Builtins ...@@ -892,22 +891,22 @@ Core and Builtins
Library Library
------- -------
- Issue #6459: distutils.command.build_ext.get_export_symbols now uses the - Issue #6459: distutils.command.build_ext.get_export_symbols now uses the
"PyInit" prefix, rather than "init". "PyInit" prefix, rather than "init".
- Issue #6455: Fixed test_build_ext under win32. - Issue #6455: Fixed test_build_ext under win32.
- Issue #6377: Enabled the compiler option, and deprecate its usage as an - Issue #6377: Enabled the compiler option, and deprecate its usage as an
attribute. attribute.
- Issue #6413: Fixed the log level in distutils.dist for announce. - Issue #6413: Fixed the log level in distutils.dist for announce.
- Issue #6403: Fixed package path usage in build_ext. - Issue #6403: Fixed package path usage in build_ext.
- Issue #6365: Distutils build_ext inplace mode was copying the compiled - Issue #6365: Distutils build_ext inplace mode was copying the compiled
extension in a subdirectory if the extension name had dots. extension in a subdirectory if the extension name had dots.
- Issue #6164: Added an AIX specific linker argument in Distutils - Issue #6164: Added an AIX specific linker argument in Distutils
unixcompiler. Original patch by Sridhar Ratnakumar. unixcompiler. Original patch by Sridhar Ratnakumar.
- Issue #6286: Now Distutils upload command is based on urllib2 instead of - Issue #6286: Now Distutils upload command is based on urllib2 instead of
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment