48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
import enum
|
|
from typing import Union
|
|
|
|
|
|
class LogLevel(enum.IntEnum):
|
|
CRITICAL = 50
|
|
FATAL = CRITICAL
|
|
ERROR = 40
|
|
WARNING = 30
|
|
WARN = WARNING
|
|
INFO = 20
|
|
DEBUG = 10
|
|
NOTSET = 0
|
|
|
|
|
|
NAME_TO_LEVEL = {level: LogLevel[level].value for level in LogLevel.__members__}
|
|
LEVEL_TO_NAME = {level.value: level.name for level in LogLevel}
|
|
|
|
|
|
def get_level_name(level: Union[int, LogLevel]) -> str:
|
|
"""
|
|
Return the textual representation of logging level 'level'.
|
|
|
|
If the level is one of the predefined levels (CRITICAL, ERROR, WARNING,
|
|
INFO, DEBUG) then you get the corresponding string.
|
|
|
|
If a numeric value corresponding to one of the defined levels is passed
|
|
in, the corresponding string representation is returned.
|
|
"""
|
|
try:
|
|
return LEVEL_TO_NAME[level]
|
|
except KeyError as e:
|
|
raise ValueError(f"Unkown level name: {level}") from e
|
|
|
|
|
|
def check_level(level: Union[str, int, LogLevel]) -> int:
|
|
if isinstance(level, int):
|
|
if level not in LEVEL_TO_NAME:
|
|
raise ValueError(f"Unknown level: {level}")
|
|
return level
|
|
elif isinstance(level, str):
|
|
try:
|
|
return NAME_TO_LEVEL[level]
|
|
except KeyError:
|
|
raise ValueError(f"Unknown level: {level}")
|
|
else:
|
|
raise TypeError(f"Level not an Union[str, int, LogLevel]: {level}")
|