# rich framework from rich.traceback import install from rich.progress import track from rich.markdown import Markdown from rich.console import Console from rich.layout import Layout from rich.panel import Panel from rich.theme import Theme from rich.table import Table from rich.text import Text from rich.tree import Tree # own shit from .highlighters import Highlighter from .highlighters import Highlight_Manager from .highlighters import get_highlighter class Terminal: def __init__(self, *args, **kwargs): install() themes = kwargs.get("themes", None) self.themes = { "much_success": "bold white on green", "success": "green", "normal": "white", "info": "cyan", "warning": "yellow", "danger": "red", "critical": "bold white on red" } super(Terminal, self).__init__() self.terminal = Console(theme=Theme(self.themes), record=True) def print(self, message, *args, **kwargs): json = kwargs.get("json", False) if not json: return self.terminal.print(message, *args, **kwargs) return self.terminal.print_json(message) def input(self, question, *args, **kwargs): return self.terminal.input(question, *args, **kwargs) def log(self, message, log_locals=True, *args, **kwargs): self.terminal.log(message, log_locals=log_locals, *args, **kwargs) def text(self, string, *args, **kwargs): return Text(string, *args, **kwargs) def table(self, *args, **kwargs): return Table(*args, **kwargs) def panel(self, text, *args, **kwargs): return Panel(text, *args, **kwargs) def tree(self, title, *args, **kwargs): return Tree(title, *args, **kwargs) def layout(self, name, *args, **kwargs): return Layout(name, *args, **kwargs) def progressbar(self, generator, description="Processing..."): for z in track(generator, description=description): yield z def get_highlighter(self): return get_highlighter() def add_themes(self, themes): if not isinstance(theme, dict): return 0 added = 0 for k, v in theme.items(): if self.add_theme(k, v): self.print("could not add {k}, trying the next one..") else: added = added + 1 return added def add_theme(self, name, style, forced=False): if not isinstance(name, str) and not forced: self.print("bad name.") return 1 elif not isinstance(style) and not forced: self.print("bad style.") return 2 if name in self.themes.keys() and not forced: self.print(f"the theme {k} already exists..") return 3 self.themes[name] = style return 0 def __exit__(self, type, value, traceback): self.terminal.save_html("last_run.html")