]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #6314: logging: Extra checks on the "level" argument.
authorVinay Sajip <vinay_sajip@yahoo.co.uk>
Mon, 13 Jul 2009 11:28:25 +0000 (11:28 +0000)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Mon, 13 Jul 2009 11:28:25 +0000 (11:28 +0000)
Lib/logging/__init__.py
Misc/NEWS

index f932110df49cc6ee790399a76ba635a206671070..5072019d31b24535b0ad92e5e742f429fb948777 100644 (file)
@@ -176,6 +176,17 @@ def addLevelName(level, levelName):
     finally:
         _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
 #---------------------------------------------------------------------------
@@ -593,7 +604,7 @@ class Handler(Filterer):
         and the filter list to empty.
         """
         Filterer.__init__(self)
-        self.level = level
+        self.level = _checkLevel(level)
         self.formatter = None
         #get the module data lock, as we're updating a shared structure.
         _acquireLock()
@@ -631,7 +642,7 @@ class Handler(Filterer):
         """
         Set the logging level of this handler.
         """
-        self.level = level
+        self.level = _checkLevel(level)
 
     def format(self, record):
         """
@@ -1009,7 +1020,7 @@ class Logger(Filterer):
         """
         Filterer.__init__(self)
         self.name = name
-        self.level = level
+        self.level = _checkLevel(level)
         self.parent = None
         self.propagate = 1
         self.handlers = []
@@ -1019,7 +1030,7 @@ class Logger(Filterer):
         """
         Set the logging level of this logger.
         """
-        self.level = level
+        self.level = _checkLevel(level)
 
     def debug(self, msg, *args, **kwargs):
         """
@@ -1396,10 +1407,6 @@ def basicConfig(**kwargs):
         root.addHandler(hdlr)
         level = kwargs.get("level")
         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)
 
 #---------------------------------------------------------------------------
index b2ce671a289c41f57fa3e842f69822e9f454920a..f4670e6466960ae4910d0876ea396d49d90bc54f 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -90,8 +90,7 @@ Core and Builtins
 Library
 -------
 
-- Issue #6314: logging.basicConfig() performs extra checks on the "level"
-  argument.
+- Issue #6314: logging: performs extra checks on the "level" argument.
 
 - Issue #6274: Fixed possible file descriptors leak in subprocess.py
 
@@ -133,7 +132,7 @@ Library
 -------
 
 - 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.
 
 - Issue #6258: Support AMD64 in bdist_msi.
@@ -892,22 +891,22 @@ Core and Builtins
 Library
 -------
 
-- Issue #6459: distutils.command.build_ext.get_export_symbols now uses the 
-  "PyInit" prefix, rather than "init". 
+- Issue #6459: distutils.command.build_ext.get_export_symbols now uses the
+  "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.
 
 - Issue #6413: Fixed the log level in distutils.dist for announce.
 
 - 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.
 
-- 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.
 
 - Issue #6286: Now Distutils upload command is based on urllib2 instead of