addition of colorama for fancy colors

This commit is contained in:
2025-08-20 17:55:51 +05:30
parent bbad4cd572
commit b298f4a221
3 changed files with 45 additions and 5 deletions

38
main.py
View File

@@ -6,6 +6,7 @@ import logging
from datetime import datetime, timezone from datetime import datetime, timezone
import jsonschema import jsonschema
import google.auth import google.auth
from colorama import Fore, Style, init
from google.oauth2.credentials import Credentials from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow from google_auth_oauthlib.flow import InstalledAppFlow
from google.cloud import resourcemanager_v3, service_usage_v1, api_keys_v2 from google.cloud import resourcemanager_v3, service_usage_v1, api_keys_v2
@@ -22,8 +23,35 @@ LOG_DIR = "logs"
# --------------------- # ---------------------
# --- LOGGING SETUP --- # --- LOGGING SETUP ---
class ColoredFormatter(logging.Formatter):
"""A custom logging formatter that adds color to console output."""
LOG_COLORS = {
logging.DEBUG: Fore.CYAN,
logging.INFO: Fore.GREEN,
logging.WARNING: Fore.YELLOW,
logging.ERROR: Fore.RED,
logging.CRITICAL: Fore.RED + Style.BRIGHT,
}
def format(self, record):
"""Formats the log record with appropriate colors."""
color = self.LOG_COLORS.get(record.levelno)
message = super().format(record)
if color:
# Only color the message part for readability
parts = message.split(" - ", 2)
if len(parts) > 2:
parts[2] = color + parts[2] + Style.RESET_ALL
message = " - ".join(parts)
else:
message = color + message + Style.RESET_ALL
return message
def setup_logging(): def setup_logging():
"""Sets up logging to both console and a file.""" """Sets up logging to both console and a file, with colors for the console."""
init(autoreset=True) # Initialize Colorama
if not os.path.exists(LOG_DIR): if not os.path.exists(LOG_DIR):
os.makedirs(LOG_DIR) os.makedirs(LOG_DIR)
@@ -33,11 +61,11 @@ def setup_logging():
logger = logging.getLogger() logger = logging.getLogger()
logger.setLevel(logging.INFO) logger.setLevel(logging.INFO)
# Clear existing handlers # Clear existing handlers to avoid duplicate logs
if logger.hasHandlers(): if logger.hasHandlers():
logger.handlers.clear() logger.handlers.clear()
# File handler for detailed logging # File handler for detailed, non-colored logging
file_handler = logging.FileHandler(log_filepath, encoding='utf-8') file_handler = logging.FileHandler(log_filepath, encoding='utf-8')
file_formatter = logging.Formatter( file_formatter = logging.Formatter(
"%(asctime)s - %(levelname)s - [%(name)s:%(module)s:%(lineno)d] - %(message)s" "%(asctime)s - %(levelname)s - [%(name)s:%(module)s:%(lineno)d] - %(message)s"
@@ -45,9 +73,9 @@ def setup_logging():
file_handler.setFormatter(file_formatter) file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler) logger.addHandler(file_handler)
# Console handler for concise logging # Console handler for concise, colored logging
console_handler = logging.StreamHandler(sys.stdout) console_handler = logging.StreamHandler(sys.stdout)
console_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") console_formatter = ColoredFormatter("%(asctime)s - %(levelname)s - %(message)s")
console_handler.setFormatter(console_formatter) console_handler.setFormatter(console_formatter)
logger.addHandler(console_handler) logger.addHandler(console_handler)

View File

@@ -10,4 +10,5 @@ dependencies = [
"google-cloud-resource-manager>=1.14.2", "google-cloud-resource-manager>=1.14.2",
"google-cloud-service-usage>=1.13.1", "google-cloud-service-usage>=1.13.1",
"jsonschema>=4.25.1", "jsonschema>=4.25.1",
"colorama>=0.4.6",
] ]

11
uv.lock generated
View File

@@ -75,11 +75,21 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" },
] ]
[[package]]
name = "colorama"
version = "0.4.6"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
]
[[package]] [[package]]
name = "geminikeymanagement" name = "geminikeymanagement"
version = "0.1.0" version = "0.1.0"
source = { virtual = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "colorama" },
{ name = "google-auth-oauthlib" }, { name = "google-auth-oauthlib" },
{ name = "google-cloud-api-keys" }, { name = "google-cloud-api-keys" },
{ name = "google-cloud-resource-manager" }, { name = "google-cloud-resource-manager" },
@@ -89,6 +99,7 @@ dependencies = [
[package.metadata] [package.metadata]
requires-dist = [ requires-dist = [
{ name = "colorama", specifier = ">=0.4.6" },
{ name = "google-auth-oauthlib", specifier = ">=1.2.2" }, { name = "google-auth-oauthlib", specifier = ">=1.2.2" },
{ name = "google-cloud-api-keys", specifier = ">=0.5.17" }, { name = "google-cloud-api-keys", specifier = ">=0.5.17" },
{ name = "google-cloud-resource-manager", specifier = ">=1.14.2" }, { name = "google-cloud-resource-manager", specifier = ">=1.14.2" },