[Python-checkins] r73995 - in python/trunk: Lib/logging/__init__.py Misc/NEWS

vinay.sajip python-checkins at python.org
Mon Jul 13 13:21:05 CEST 2009


Author: vinay.sajip
Date: Mon Jul 13 13:21:05 2009
New Revision: 73995

Log:
Issue #6314: logging: Extra checks on the "level" argument in more places.

Modified:
   python/trunk/Lib/logging/__init__.py
   python/trunk/Misc/NEWS

Modified: python/trunk/Lib/logging/__init__.py
==============================================================================
--- python/trunk/Lib/logging/__init__.py	(original)
+++ python/trunk/Lib/logging/__init__.py	Mon Jul 13 13:21:05 2009
@@ -174,6 +174,17 @@
     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 @@
         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 @@
         """
         Set the logging level of this handler.
         """
-        self.level = level
+        self.level = _checkLevel(level)
 
     def format(self, record):
         """
@@ -1010,7 +1021,7 @@
         """
         Filterer.__init__(self)
         self.name = name
-        self.level = level
+        self.level = _checkLevel(level)
         self.parent = None
         self.propagate = 1
         self.handlers = []
@@ -1020,7 +1031,7 @@
         """
         Set the logging level of this logger.
         """
-        self.level = level
+        self.level = _checkLevel(level)
 
     def debug(self, msg, *args, **kwargs):
         """
@@ -1397,10 +1408,6 @@
         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)
 
 #---------------------------------------------------------------------------

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Mon Jul 13 13:21:05 2009
@@ -350,12 +350,14 @@
 Library
 -------
 
+- Issue #6314: logging: Extra checks on the "level" argument in more places.
+
 - Issue #2622: Fixed an ImportError when importing email.messsage from a
   standalone application built with py2exe or py2app.
 
-- 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.
@@ -365,11 +367,11 @@
 
 - Issue #6403: Fixed package path usage in build_ext.
 
-- Issues #5155, 5313, 5331: multiprocessing.Process._bootstrap was 
+- Issues #5155, 5313, 5331: multiprocessing.Process._bootstrap was
   unconditionally calling "os.close(sys.stdin.fileno())" resulting in file
   descriptor errors
 
-- 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 #6344: Fixed a crash of mmap.read() when passed a negative argument.


More information about the Python-checkins mailing list