def _ensure_no_colorama(): # a hacky way to ensure that nothing initialises colorama # if we're not running with legacy Windows command line mode from rich.console import detect_legacy_windows if not detect_legacy_windows(): import colorama import colorama.initialise colorama.deinit() def _colorama_wrap_stream(stream, *args, **kwargs): return stream colorama.wrap_stream = _colorama_wrap_stream colorama.initialise.wrap_stream = _colorama_wrap_stream
def __init__(self): # ! Change color system if "legacy" windows terminal to prevent wrong colors displaying self.is_legacy = detect_legacy_windows() # ! dumb_terminals automatically handled by rich. Color system is too but it is incorrect # ! for legacy windows ... so no color for y'all. self.console = Console( theme=custom_theme, color_system="truecolor" if not self.is_legacy else None) self._rich_progress_bar = Progress( SizedTextColumn( "[white]{task.description}", overflow="ellipsis", width=int(self.console.width / 3), ), SizedTextColumn("{task.fields[message]}", width=18, style="nonimportant"), BarColumn(bar_width=None, finished_style="green"), "[progress.percentage]{task.percentage:>3.0f}%", TimeRemainingColumn(), console=self.console, # ! Normally when you exit the progress context manager (or call stop()) # ! the last refreshed display remains in the terminal with the cursor on # ! the following line. You can also make the progress display disappear on # ! exit by setting transient=True on the Progress constructor transient=self.is_legacy, ) self.song_count = 0 self.overall_task_id = None self.overall_progress = 0 self.overall_total = 100 self.overall_completed_tasks = 0 self.quiet = False # ! Basically a wrapper for rich's: with ... as ... self._rich_progress_bar.__enter__()