diff --git a/pyback.py b/pyback.py index 0508235..dcd96fb 100755 --- a/pyback.py +++ b/pyback.py @@ -7,6 +7,12 @@ import argparse from typing import List from rich import print from rich.prompt import Prompt +from rich.padding import Padding +from rich.panel import Panel +from rich.text import Text +from rich.table import Table +from rich.console import Console +from rich import box @dataclass @@ -19,9 +25,8 @@ class Job: # Добавить обозначения {warn} {good} {error} {nice}, менять их на # символы и красить вывод консоли -def run_job(job: Job) -> None: +def run_job(job: Job, console: Console) -> None: """Запусить задачу бэкапа.""" - print(f"Начинаю {job.name}") date = datetime.today().strftime("%Y-%m-%d") time = datetime.now().strftime("%H%M") @@ -30,13 +35,20 @@ def run_job(job: Job) -> None: if not os.path.isdir(path): os.makedirs(path) - + # BOLDYELLOW="\e[1;33m[!]\e[0m" + # ENDCOLOR="\e[0m" cmd = ( job.action.replace("{name}", job.name) .replace("{date}", date) .replace("{time}", time) + .replace("{warn}", "\033[33m[!]\033[0m") ) - os.system(cmd) + with console.status( + f"[bold yellow]\[..][/bold yellow] [bold]{job.name}[/bold] начинаю ..." + ): + os.system(cmd) + + print(f"[bold green]\[OK][/bold green] [bold]{job.name}[/bold] выполнено") def ask_about_backups(jobs: List[Job], force_all: bool) -> List[Job]: @@ -60,7 +72,12 @@ def ask_about_backups(jobs: List[Job], force_all: bool) -> List[Job]: изменено на True (задача активна), либо установленно False (задача не активна). """ + if force_all: + for job in jobs: + job.active = True + return jobs + print(Panel(Text("Составляю список задач", justify="center"))) for job in jobs: answer = Prompt.ask( f"Архивируем [bold]{job.name}[/bold]?", @@ -74,6 +91,7 @@ def ask_about_backups(jobs: List[Job], force_all: bool) -> List[Job]: job.active = False print("[bold red]\[-] Пропуск задачи[/bold red]") + print(Panel(Text("Список задач составлен, начинаю бэкап", justify="center"))) return jobs @@ -109,18 +127,29 @@ if __name__ == "__main__": help="выполнить все задачи из списка без запроса подтверждения", ) args = parser.parse_args() - + console = Console() jobs = yaml_loader(os.path.abspath(args.file)) - # если флаг принудительного бэкапа всего, то мы прохоидм в цикле - # все джобы и ставим их active в true - if not args.forceall: - ask_about_backups(jobs) - print("-----------------------") - else: - for j in jobs: - j.active = True + jobs = ask_about_backups(jobs, args.forceall) for j in jobs: if j.active: - run_job(j) + run_job(j, console) + + # table = Table(title="Результаты бэкапов", box=box.SIMPLE) + # table.add_column("Задача", justify="right", style="cyan", no_wrap=True) + # table.add_column("Архив", style="magenta") + # table.add_column("Статус", justify="right", style="green") + + # table.add_row( + # "Archives криппи и прочее", + # "/back/Archives/Archives-{date}-{time}", + # "ОК", + # ) + # table.add_row( + # "Archivebox-emacs", + # "/back/Archives/Archivebox-emacs", + # "Пропуск", + # ) + + # console.print(table, justify="center")