diff --git a/lib-python/2.7/logging/__init__.py b/lib-python/2.7/logging/__init__.py index 18f4e19f1a6b1deff9662d08cdc5dcd62a4542dd..7eaa4d07f1746f927f2695ca8de892b87c096c56 100644 --- a/lib-python/2.7/logging/__init__.py +++ b/lib-python/2.7/logging/__init__.py @@ -134,6 +134,11 @@ INFO = 20 DEBUG = 10 NOTSET = 0 +# NOTE(flaper87): This is different from +# python's stdlib module since pypy's +# dicts are much faster when their +# keys are all of the same type. +# Introduced in commit 9de7b40c586f _levelToName = { CRITICAL: 'CRITICAL', ERROR: 'ERROR', @@ -168,7 +173,11 @@ def getLevelName(level): Otherwise, the string "Level %s" % level is returned. """ - return _levelToName.get(level, ("Level %s" % level)) + + # NOTE(flaper87): Check also in _nameToLevel + # if value is None. + return (_levelToName.get(level) or + _nameToLevel.get(level, ("Level %s" % level))) def addLevelName(level, levelName): """ diff --git a/lib-python/2.7/test/test_logging.py b/lib-python/2.7/test/test_logging.py index ce5c5a712c13e91c3bf1d8c2bd057895f2031224..2e1b20b4375854ad6312d747b7294184de00aedd 100644 --- a/lib-python/2.7/test/test_logging.py +++ b/lib-python/2.7/test/test_logging.py @@ -278,6 +278,24 @@ class BuiltinLevelsTest(BaseTest): def test_invalid_name(self): self.assertRaises(TypeError, logging.getLogger, any) + def test_get_level_name(self): + """Test getLevelName returns level constant.""" + # NOTE(flaper87): Bug #1517 + self.assertEqual(logging.getLevelName('NOTSET'), 0) + self.assertEqual(logging.getLevelName('DEBUG'), 10) + self.assertEqual(logging.getLevelName('INFO'), 20) + self.assertEqual(logging.getLevelName('WARN'), 30) + self.assertEqual(logging.getLevelName('WARNING'), 30) + self.assertEqual(logging.getLevelName('ERROR'), 40) + self.assertEqual(logging.getLevelName('CRITICAL'), 50) + + self.assertEqual(logging.getLevelName(0), 'NOTSET') + self.assertEqual(logging.getLevelName(10), 'DEBUG') + self.assertEqual(logging.getLevelName(20), 'INFO') + self.assertEqual(logging.getLevelName(30), 'WARNING') + self.assertEqual(logging.getLevelName(40), 'ERROR') + self.assertEqual(logging.getLevelName(50), 'CRITICAL') + class BasicFilterTest(BaseTest): """Test the bundled Filter class."""