95 lines
2.9 KiB
Python
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")
|