diff options
author | andrei kulakov <andrei.avk@gmail.com> | 2021-06-03 08:12:59 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-03 08:12:59 (GMT) |
commit | 8b93f0e696d3fc60fd311c13d5238da73a35e3b3 (patch) | |
tree | 0d1b5fd01fe4c7ab9ee1c38b801274a085bd7c4a | |
parent | 4846ea95d1a121df5e8081e2a290f63d1419cad8 (diff) | |
download | cpython-8b93f0e696d3fc60fd311c13d5238da73a35e3b3.zip cpython-8b93f0e696d3fc60fd311c13d5238da73a35e3b3.tar.gz cpython-8b93f0e696d3fc60fd311c13d5238da73a35e3b3.tar.bz2 |
bpo-43858: Add logging.getLevelNamesMapping() (GH-26459)
Added a function that returns a copy of a dict of logging levels.
-rw-r--r-- | Doc/library/logging.rst | 8 | ||||
-rw-r--r-- | Lib/logging/__init__.py | 5 | ||||
-rw-r--r-- | Lib/test/test_logging.py | 8 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2021-05-31-04-51-02.bpo-43858.r7LOu6.rst | 1 |
4 files changed, 21 insertions, 1 deletions
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst index 70a703d..313cff4 100644 --- a/Doc/library/logging.rst +++ b/Doc/library/logging.rst @@ -1111,6 +1111,14 @@ functions. .. note:: If you are thinking of defining your own levels, please see the section on :ref:`custom-levels`. +.. function:: getLevelNamesMapping() + + Returns a mapping from level names to their corresponding logging levels. For example, the + string "CRITICAL" maps to :const:`CRITICAL`. The returned mapping is copied from an internal + mapping on each call to this function. + + .. versionadded:: 3.11 + .. function:: getLevelName(level) Returns the textual or numeric representation of logging level *level*. diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index 7865b71..3538f06 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -37,7 +37,7 @@ __all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR', 'exception', 'fatal', 'getLevelName', 'getLogger', 'getLoggerClass', 'info', 'log', 'makeLogRecord', 'setLoggerClass', 'shutdown', 'warn', 'warning', 'getLogRecordFactory', 'setLogRecordFactory', - 'lastResort', 'raiseExceptions'] + 'lastResort', 'raiseExceptions', 'getLevelNamesMapping'] import threading @@ -116,6 +116,9 @@ _nameToLevel = { 'NOTSET': NOTSET, } +def getLevelNamesMapping(): + return _nameToLevel.copy() + def getLevelName(level): """ Return the textual or numeric representation of logging level 'level'. diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index ee00a32..6d11190 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -4390,6 +4390,14 @@ class ModuleLevelMiscTest(BaseTest): self.assertNotIn("Cannot recover from stack overflow.", err) self.assertEqual(rc, 1) + def test_get_level_names_mapping(self): + mapping = logging.getLevelNamesMapping() + self.assertEqual(logging._nameToLevel, mapping) # value is equivalent + self.assertIsNot(logging._nameToLevel, mapping) # but not the internal data + new_mapping = logging.getLevelNamesMapping() # another call -> another copy + self.assertIsNot(mapping, new_mapping) # verify not the same object as before + self.assertEqual(mapping, new_mapping) # but equivalent in value + class LogRecordTest(BaseTest): def test_str_rep(self): diff --git a/Misc/NEWS.d/next/Library/2021-05-31-04-51-02.bpo-43858.r7LOu6.rst b/Misc/NEWS.d/next/Library/2021-05-31-04-51-02.bpo-43858.r7LOu6.rst new file mode 100644 index 0000000..d864e1b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-31-04-51-02.bpo-43858.r7LOu6.rst @@ -0,0 +1 @@ +Added a function that returns a copy of a dict of logging levels: :func:`logging.getLevelNamesMapping` |