Spaces:
Sleeping
Sleeping
| import sys | |
| import time | |
| # from colorama import Fore, Back, Style | |
| # from colorama import just_fix_windows_console, init | |
| # init(autoreset=True) | |
| # # use Colorama to make Termcolor work on Windows too | |
| # just_fix_windows_console() | |
| class AnsiCodeHelper: | |
| ansi_codes = { | |
| 'fg_colors': { | |
| 'black': '\033[30m', | |
| 'red': '\033[31m', | |
| 'green': '\033[32m', | |
| 'yellow': '\033[33m', | |
| 'blue': '\033[34m', | |
| 'magenta': '\033[35m', | |
| 'cyan': '\033[36m', | |
| 'white': '\033[37m', | |
| 'bright_black': '\033[1;30m', | |
| 'bright_red': '\033[1;31m', | |
| 'bright_green': '\033[1;32m', | |
| 'bright_yellow': '\033[1;33m', | |
| 'bright_blue': '\033[1;34m', | |
| 'bright_magenta': '\033[1;35m', | |
| 'bright_cyan': '\033[1;36m', | |
| 'bright_white': '\033[1;37m', | |
| 'reset_color': '\033[39m', | |
| }, | |
| 'bg_colors': { | |
| 'black': '\033[40m', | |
| 'red': '\033[41m', | |
| 'green': '\033[42m', | |
| 'yellow': '\033[43m', | |
| 'blue': '\033[44m', | |
| 'magenta': '\033[45m', | |
| 'cyan': '\033[46m', | |
| 'white': '\033[47m', | |
| 'reset_background': '\033[49m', | |
| }, | |
| 'text_format': { | |
| 'bold': '\033[1m', | |
| 'underline': '\033[4m', | |
| 'italic': '\033[3m', | |
| 'inverse': '\033[7m', | |
| 'blink': '\033[5m', | |
| 'hidden': '\033[8m', | |
| 'strike_through': '\033[9m', | |
| 'frame': '\033[51m', | |
| 'encircled': '\033[52m', | |
| 'overlined': '\033[53m', | |
| 'reset_format': '\033[0m', | |
| }, | |
| 'link': { | |
| 'url_start': '\033]8;;', | |
| 'url_end': '\033]8;;\033\\', | |
| }, | |
| 'utility': { | |
| 'escape_sequence_start': '\033]', | |
| 'escape_sequence_end': '\033\\', | |
| 'enable_alternate_screen_buffer': '\033[?1049h', | |
| 'disable_alternate_screen_buffer': '\033[?1049l', | |
| } | |
| } | |
| def get_ansi_code(category, name): | |
| return AnsiCodeHelper.ansi_codes.get(category, {}).get(name, '') | |
| def ansi_link_str(url, link_text="", link_color='bright_green'): | |
| # Get the ANSI escape sequence for the default color | |
| # Check if link text is empty | |
| if link_text == '': | |
| link_text = url | |
| # Check if stdout is a terminal | |
| if sys.stdout.isatty(): | |
| # get ansi codes | |
| # default_color_code = AnsiCodeHelper.get_ansi_code('fg_colors', link_color) | |
| # format_reset_code = AnsiCodeHelper.get_ansi_code('text_format', 'reset_format') | |
| start_sequence = AnsiCodeHelper.get_ansi_code('utility', 'escape_sequence_start') | |
| end_sequence = AnsiCodeHelper.get_ansi_code('utility', 'escape_sequence_end') | |
| # create url link sequence | |
| url_start = AnsiCodeHelper.get_ansi_code('link', 'url_start') | |
| url_end = AnsiCodeHelper.get_ansi_code('link', 'url_end') | |
| link_color_code = AnsiCodeHelper.get_ansi_code('fg_colors', link_color) | |
| reset_format_code = AnsiCodeHelper.get_ansi_code('text_format', 'reset_format') | |
| formatted_link_text = f"{url_start}{url}{end_sequence}{link_color_code}{link_text}{reset_format_code}{url_end}" | |
| # log_info(f'formatted_link_text={formatted_link_text}\n\n') | |
| return formatted_link_text | |
| else: | |
| # If stdout is not a terminal, return the default formatted link text | |
| return link_text | |
| def ansi_color_str(s, fg='white', bg=None): | |
| if bg is None: | |
| color_type = 'fg_colors' | |
| color_code = AnsiCodeHelper.get_ansi_code(color_type, fg) | |
| reset_color_code = AnsiCodeHelper.get_ansi_code(color_type, 'reset_color') | |
| return f"{color_code}{s}{reset_color_code}" | |
| else: | |
| fg_color_code = AnsiCodeHelper.get_ansi_code('fg_colors', fg) | |
| bg_color_code = AnsiCodeHelper.get_ansi_code('bg_colors', bg) | |
| reset_bg_color_code = AnsiCodeHelper.get_ansi_code('bg_colors', 'reset_background') | |
| reset_fg_color_code = AnsiCodeHelper.get_ansi_code('fg_colors', 'reset_color') | |
| return f"{bg_color_code}{fg_color_code}{s}{reset_fg_color_code}{reset_bg_color_code}" | |
| def ansi_format_str(s, format_name): | |
| format_code = AnsiCodeHelper.get_ansi_code('text_format', format_name) | |
| reset_format_code = AnsiCodeHelper.get_ansi_code('text_format', 'reset_format') | |
| return f"{format_code}{s}{reset_format_code}" | |
| def ansi_rainbow_str(message, delay=0.1, iterations=10): | |
| # init_thread(ansi_rainbow_anim, message, delay) | |
| rainbow_colors = ['red', 'yellow', 'green', 'blue', 'magenta', 'cyan'] | |
| for _ in range(iterations): | |
| for color in rainbow_colors: | |
| color_code = AnsiCodeHelper.get_ansi_code('fg_colors', color) | |
| reset_color_code = AnsiCodeHelper.get_ansi_code('fg_colors', 'reset_color') | |
| rainbow_str = ansi_color_str(message, color) | |
| log_info(rainbow_str, end='\r', flush=True) | |
| time.sleep(delay) | |
| log_info('\n') | |
| def print_to_ansi_alt_screen_buffer(info): | |
| # Enable alternate screen buffer | |
| sys.stdout.write( | |
| f"{AnsiCodeHelper.get_ansi_code('utility', 'escape_sequence_start')}{AnsiCodeHelper.get_ansi_code('utility', 'enable_alternate_screen_buffer')}") | |
| # Display additional information on the alternate screen buffer | |
| log_info(info) | |
| # Disable alternate screen buffer | |
| sys.stdout.write( | |
| f"{AnsiCodeHelper.get_ansi_code('utility', 'escape_sequence_start')}{AnsiCodeHelper.get_ansi_code('utility', 'disable_alternate_screen_buffer')}") | |