aiologger/levels.py
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}")