Coverage for src/paperap/scripts/utils.py: 35%
23 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-20 13:17 -0400
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-20 13:17 -0400
1"""
6----------------------------------------------------------------------------
8METADATA:
10File: utils.py
11 Project: paperap
12Created: 2025-03-18
13 Version: 0.0.8
14Author: Jess Mann
15Email: jess@jmann.me
16 Copyright (c) 2025 Jess Mann
18----------------------------------------------------------------------------
20LAST MODIFIED:
222025-03-18 By Jess Mann
24"""
26import logging
27from typing import Protocol, override
29import colorlog
32# Define a Protocol for alive_bar()
33class ProgressBar(Protocol):
34 total: int
36 def __call__(self, *args, **kwargs) -> None: ...
38 def text(self, text: str) -> None: ...
41def setup_logging() -> logging.Logger:
42 """
43 Set up logging with colored output.
44 """
45 logging.basicConfig(level=logging.ERROR)
47 # Define a custom formatter class
48 class CustomFormatter(colorlog.ColoredFormatter):
49 @override
50 def format(self, record) -> str:
51 self._style._fmt = "(%(log_color)s%(levelname)s%(reset)s) %(message)s"
52 return super().format(record)
54 # Configure colored logging with the custom formatter
55 handler = colorlog.StreamHandler()
56 handler.setFormatter(
57 CustomFormatter(
58 # Initial format string (will be overridden in the formatter)
59 "",
60 log_colors={
61 "DEBUG": "green",
62 "INFO": "blue",
63 "WARNING": "yellow",
64 "ERROR": "red",
65 "CRITICAL": "red,bg_white",
66 },
67 )
68 )
70 root_logger = logging.getLogger()
71 root_logger.handlers = [] # Clear existing handlers
72 root_logger.addHandler(handler)
73 root_logger.setLevel(logging.ERROR)
75 app_logger = logging.getLogger(__name__)
76 app_logger.setLevel(logging.INFO)
78 # Suppress logs from the 'requests' library below ERROR level
79 # logging.getLogger("urllib3").setLevel(logging.ERROR)
80 # logging.getLogger("requests").setLevel(logging.ERROR)
82 return app_logger