Files
agentic_security/agentic_security/misc/banner.py
T
Alexander Myasoedov 4a07411fbd fix(pc):
2025-03-09 16:46:09 +02:00

94 lines
3.3 KiB
Python

from pyfiglet import Figlet, FontNotFound
from termcolor import colored
try:
from importlib.metadata import version
except ImportError:
from importlib_metadata import version
def generate_banner(
title: str = "Agentic Security",
font: str = "slant",
version: str = "v2.1.0",
tagline: str = "Proactive Threat Detection & Automated Security Protocols",
author: str = "Developed by: [Security Team]",
website: str = "Website: https://github.com/msoedov/agentic_security",
warning: str | None = "", # Using Optional for warning since it might be None
) -> str:
"""Generate a visually enhanced banner with dynamic width and borders."""
# Define the text elements
# Initialize Figlet with the specified font, fallback to default if not found
try:
f = Figlet(font=font)
except FontNotFound:
f = Figlet() # Fallback to default font
# Render the title text and calculate the maximum width of Figlet lines
banner_text = f.renderText(title)
banner_lines = banner_text.splitlines()
figlet_max_width = max(len(line) for line in banner_lines) if banner_lines else 0
# Create the details line and calculate its width
details_line = f"Version: {version} | {website}"
details_width = len(details_line)
# Calculate widths of other text elements
warning_width = len(warning)
tagline_width = len(tagline)
# Determine the overall maximum width for centering
overall_max_width = max(
figlet_max_width, warning_width, tagline_width, details_width
)
# Pad the Figlet lines to the overall maximum width
padded_banner_lines = [line.center(overall_max_width) for line in banner_lines]
# Define decorative characters and colors
decor_chars = ["", "", ""]
decor_colors = ["blue", "red", "yellow"]
# Create and color the content lines
content_lines = []
for line in padded_banner_lines:
content_lines.append(colored(line, "blue"))
content_lines.append(colored(decor_chars[0] * overall_max_width, decor_colors[0]))
content_lines.append(
colored(warning.center(overall_max_width), "red", attrs=["blink", "bold"])
)
content_lines.append(colored(decor_chars[1] * overall_max_width, decor_colors[1]))
content_lines.append(colored(tagline.center(overall_max_width), "red"))
content_lines.append(colored(decor_chars[2] * overall_max_width, decor_colors[2]))
content_lines.append(colored(details_line.center(overall_max_width), "magenta"))
# Define border color and create top and bottom borders
border_color = "blue"
top_border = colored("" + "" * (overall_max_width + 2) + "", border_color)
bottom_border = colored("" + "" * (overall_max_width + 2) + "", border_color)
# Add side borders to each content line with padding
bordered_content = [
colored("", border_color) + line + colored("", border_color)
for line in content_lines
]
# Assemble the full banner
banner = top_border + "\n" + "\n".join(bordered_content) + "\n" + bottom_border
return banner
def init_banner():
return
ver = version("agentic_security")
try:
print(generate_banner(version=ver))
except Exception:
# UnicodeEncodeError with codec on some systems
pass
if __name__ == "__main__":
init_banner()