summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrei kulakov <andrei.avk@gmail.com>2021-06-03 08:12:59 (GMT)
committerGitHub <noreply@github.com>2021-06-03 08:12:59 (GMT)
commit8b93f0e696d3fc60fd311c13d5238da73a35e3b3 (patch)
tree0d1b5fd01fe4c7ab9ee1c38b801274a085bd7c4a
parent4846ea95d1a121df5e8081e2a290f63d1419cad8 (diff)
downloadcpython-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.rst8
-rw-r--r--Lib/logging/__init__.py5
-rw-r--r--Lib/test/test_logging.py8
-rw-r--r--Misc/NEWS.d/next/Library/2021-05-31-04-51-02.bpo-43858.r7LOu6.rst1
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`