richprutt/terminal.py
2025-10-26 19:48:02 +01:00

95 lines
2.9 KiB
Python

# 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")