Source code for paidiverpy.utils.logging_functions
"""Logging utilities."""
import logging
import sys
from enum import IntEnum
from typing import ClassVar
from paidiverpy.utils.exceptions import raise_value_error
[docs]
class VerboseLevel(IntEnum):
"""Verbose levels for logging."""
NONE = 0
ERRORS_WARNINGS = 1
INFO = 2
DEBUG = 3
[docs]
def initialise_logging(verbose: int = 2, logger_name: str = "paidiverpy") -> logging.Logger:
"""Initialise logging configuration.
Args:
verbose (int): Verbose level (0 = NONE, 1 = ERRORS_WARNINGS, 2 = INFO, 3 = DEBUG).
Defaults to 2.
logger_name (str): The name of the logger. Defaults to "paidiverpy".
Returns:
logging.Logger: The logger object.
"""
try:
log_level = {
VerboseLevel.NONE: logging.CRITICAL,
VerboseLevel.ERRORS_WARNINGS: logging.WARNING,
VerboseLevel.INFO: logging.INFO,
VerboseLevel.DEBUG: logging.DEBUG,
}[VerboseLevel(verbose)]
except ValueError as err:
msg = f"Invalid verbose level: {verbose}. Choose from {list(VerboseLevel)}."
raise ValueError(msg) from err
logger = logging.getLogger(logger_name)
logger.setLevel(log_level)
if not any(isinstance(h, logging.StreamHandler) for h in logger.handlers):
handler = logging.StreamHandler(sys.stdout)
formatter = ColorFormatter(
"☁ paidiverpy ☁ | %(levelname)10s | %(asctime)s | %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
handler.setFormatter(formatter)
handler.setLevel(log_level)
logger.addHandler(handler)
return logger
[docs]
def check_raise_error(raise_error: bool, message: str) -> None:
"""Check if an error should be raised and raise it if necessary.
Args:
raise_error (bool): Whether to raise an error.
message (str): The error message.
Raises:
ValueError: The error message.
"""
logger = logging.getLogger("paidiverpy")
if raise_error:
logger.error(message)
raise_value_error(message)
logger.warning(message)