mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-17 13:01:12 +00:00
Initial commit
This commit is contained in:
183
unilabos/utils/banner_print.py
Normal file
183
unilabos/utils/banner_print.py
Normal file
@@ -0,0 +1,183 @@
|
||||
"""
|
||||
横幅和UI打印工具
|
||||
|
||||
提供用于显示彩色横幅、状态信息和其他UI元素的工具函数。
|
||||
"""
|
||||
|
||||
import os
|
||||
import platform
|
||||
from datetime import datetime
|
||||
import importlib.metadata
|
||||
from typing import Dict, Any
|
||||
|
||||
|
||||
# ANSI颜色代码
|
||||
class Colors:
|
||||
"""ANSI颜色代码集合"""
|
||||
|
||||
RESET = "\033[0m"
|
||||
BOLD = "\033[1m"
|
||||
ITALIC = "\033[3m"
|
||||
UNDERLINE = "\033[4m"
|
||||
|
||||
BLACK = "\033[30m"
|
||||
RED = "\033[31m"
|
||||
GREEN = "\033[32m"
|
||||
YELLOW = "\033[33m"
|
||||
BLUE = "\033[34m"
|
||||
MAGENTA = "\033[35m"
|
||||
CYAN = "\033[36m"
|
||||
WHITE = "\033[37m"
|
||||
COLOR_HEAD = "\033[38;5;214m"
|
||||
COLOR_DECO = "\033[38;5;242m"
|
||||
COLOR_TAIL = "\033[38;5;220m"
|
||||
|
||||
BRIGHT_BLACK = "\033[90m"
|
||||
BRIGHT_RED = "\033[91m"
|
||||
BRIGHT_GREEN = "\033[92m"
|
||||
BRIGHT_YELLOW = "\033[93m"
|
||||
BRIGHT_BLUE = "\033[94m"
|
||||
BRIGHT_MAGENTA = "\033[95m"
|
||||
BRIGHT_CYAN = "\033[96m"
|
||||
BRIGHT_WHITE = "\033[97m"
|
||||
|
||||
BG_BLACK = "\033[40m"
|
||||
BG_RED = "\033[41m"
|
||||
BG_GREEN = "\033[42m"
|
||||
BG_YELLOW = "\033[43m"
|
||||
BG_BLUE = "\033[44m"
|
||||
BG_MAGENTA = "\033[45m"
|
||||
BG_CYAN = "\033[46m"
|
||||
BG_WHITE = "\033[47m"
|
||||
|
||||
|
||||
def get_version() -> str:
|
||||
"""
|
||||
获取ilabos的版本号
|
||||
|
||||
通过importlib.metadata尝试获取包版本。
|
||||
如果失败,返回开发版本号。
|
||||
|
||||
Returns:
|
||||
版本号字符串
|
||||
"""
|
||||
try:
|
||||
return importlib.metadata.version("unilabos")
|
||||
except importlib.metadata.PackageNotFoundError:
|
||||
return "dev-0.1.0" # 开发版本
|
||||
|
||||
|
||||
def print_unilab_banner(args_dict: Dict[str, Any], show_config: bool = True) -> None:
|
||||
"""
|
||||
打印UNI LAB启动横幅
|
||||
|
||||
Args:
|
||||
args_dict: 命令行参数字典
|
||||
show_config: 是否显示配置信息
|
||||
"""
|
||||
# 检测终端是否支持ANSI颜色
|
||||
if platform.system() == "Windows":
|
||||
os.system("") # 启用Windows终端中的ANSI支持
|
||||
|
||||
# 获取当前时间
|
||||
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
# 获取版本号
|
||||
version = get_version()
|
||||
|
||||
# 构建UNI LAB字符艺术
|
||||
banner = f"""{Colors.COLOR_HEAD}
|
||||
██╗ ██╗ ███╗ ██╗ ██╗ ██╗ █████╗ ██████╗ {Colors.COLOR_TAIL}
|
||||
██║ ██║ ████╗ ██║ ██║ ██║ ██╔══██╗ ██╔══██╗
|
||||
██║ ██║ ██╔██╗ ██║ ██║ ██║ ███████║ ██████╔╝
|
||||
██║ ██║ ██║╚██╗██║ ██║ ██║ ██╔══██║ ██╔══██╗
|
||||
╚██████╔╝ ██║ ╚████║ ██║ ██████╗ ██║ ██║ ██████╔╝{Colors.COLOR_DECO}
|
||||
╚════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ {Colors.RESET}"""
|
||||
|
||||
# 显示版本信息
|
||||
system_info = f"""
|
||||
{Colors.YELLOW}Version:{Colors.RESET} {Colors.BRIGHT_GREEN}{version}{Colors.RESET}
|
||||
{Colors.YELLOW}System:{Colors.RESET} {Colors.WHITE}{platform.system()} {platform.release()}{Colors.RESET}
|
||||
{Colors.YELLOW}Python:{Colors.RESET} {Colors.WHITE}{platform.python_version()}{Colors.RESET}
|
||||
{Colors.YELLOW}Time:{Colors.RESET} {Colors.WHITE}{current_time}{Colors.RESET}
|
||||
{Colors.BRIGHT_WHITE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━{Colors.RESET}"""
|
||||
|
||||
# 打印横幅和系统信息
|
||||
print(banner + system_info)
|
||||
|
||||
# 如果需要,显示配置信息
|
||||
if show_config and args_dict:
|
||||
print_config(args_dict)
|
||||
|
||||
|
||||
def print_config(args_dict: Dict[str, Any]) -> None:
|
||||
"""
|
||||
打印配置信息
|
||||
|
||||
Args:
|
||||
args_dict: 命令行参数字典
|
||||
"""
|
||||
config_info = f"{Colors.BRIGHT_BLUE}{Colors.BOLD}Configuration:{Colors.RESET}\n"
|
||||
|
||||
# 后端信息
|
||||
if "backend" in args_dict:
|
||||
config_info += f"{Colors.CYAN}• Backend:{Colors.RESET} "
|
||||
config_info += f"{Colors.WHITE}{args_dict['backend']}{Colors.RESET}\n"
|
||||
|
||||
# 桥接信息
|
||||
if "app_bridges" in args_dict:
|
||||
config_info += f"{Colors.CYAN}• Bridges:{Colors.RESET} "
|
||||
config_info += f"{Colors.WHITE}{', '.join(args_dict['app_bridges'])}{Colors.RESET}\n"
|
||||
|
||||
# 主机模式
|
||||
if "without_host" in args_dict:
|
||||
mode = "Slave" if args_dict["without_host"] else "Master"
|
||||
config_info += f"{Colors.CYAN}• Host Mode:{Colors.RESET} {Colors.WHITE}{mode}{Colors.RESET}\n"
|
||||
|
||||
# 如果有图或设备信息,显示它们
|
||||
if "graph" in args_dict and args_dict["graph"] is not None:
|
||||
config_info += f"{Colors.CYAN}• Graph:{Colors.RESET} "
|
||||
config_info += f"{Colors.WHITE}{args_dict['graph']}{Colors.RESET}\n"
|
||||
elif "devices" in args_dict and args_dict["devices"] is not None:
|
||||
config_info += f"{Colors.CYAN}• Devices:{Colors.RESET} "
|
||||
config_info += f"{Colors.WHITE}{args_dict['devices']}{Colors.RESET}\n"
|
||||
if "resources" in args_dict and args_dict["resources"] is not None:
|
||||
config_info += f"{Colors.CYAN}• Resources:{Colors.RESET} "
|
||||
config_info += f"{Colors.WHITE}{args_dict['resources']}{Colors.RESET}\n"
|
||||
|
||||
# 控制器配置
|
||||
if "controllers" in args_dict and args_dict["controllers"] is not None:
|
||||
config_info += f"{Colors.CYAN}• Controllers:{Colors.RESET} "
|
||||
config_info += f"{Colors.WHITE}{args_dict['controllers']}{Colors.RESET}\n"
|
||||
|
||||
# 打印结束分隔线
|
||||
config_info += f"{Colors.BRIGHT_WHITE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━{Colors.RESET}\n"
|
||||
|
||||
print(config_info)
|
||||
|
||||
|
||||
def print_status(message: str, status_type: str = "info") -> None:
|
||||
"""
|
||||
打印带颜色的状态消息
|
||||
|
||||
Args:
|
||||
message: 要打印的消息
|
||||
status_type: 状态类型('info', 'success', 'warning', 'error')
|
||||
"""
|
||||
color = Colors.WHITE
|
||||
prefix = ""
|
||||
|
||||
if status_type == "info":
|
||||
color = Colors.BLUE
|
||||
prefix = "INFO"
|
||||
elif status_type == "success":
|
||||
color = Colors.GREEN
|
||||
prefix = "SUCCESS"
|
||||
elif status_type == "warning":
|
||||
color = Colors.YELLOW
|
||||
prefix = "WARNING"
|
||||
elif status_type == "error":
|
||||
color = Colors.RED
|
||||
prefix = "ERROR"
|
||||
|
||||
print(f"{color}[{prefix}]{Colors.RESET} {message}")
|
||||
Reference in New Issue
Block a user