Browse Source

Добавил красоты.

master
Дмитрий 3 years ago
parent
commit
c9d0f27d20
  1. 55
      pyback.py

55
pyback.py

@ -7,6 +7,12 @@ import argparse
from typing import List from typing import List
from rich import print from rich import print
from rich.prompt import Prompt 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 @dataclass
@ -19,9 +25,8 @@ class Job:
# Добавить обозначения {warn} {good} {error} {nice}, менять их на # Добавить обозначения {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") date = datetime.today().strftime("%Y-%m-%d")
time = datetime.now().strftime("%H%M") time = datetime.now().strftime("%H%M")
@ -30,14 +35,21 @@ def run_job(job: Job) -> None:
if not os.path.isdir(path): if not os.path.isdir(path):
os.makedirs(path) os.makedirs(path)
# BOLDYELLOW="\e[1;33m[!]\e[0m"
# ENDCOLOR="\e[0m"
cmd = ( cmd = (
job.action.replace("{name}", job.name) job.action.replace("{name}", job.name)
.replace("{date}", date) .replace("{date}", date)
.replace("{time}", time) .replace("{time}", time)
.replace("{warn}", "\033[33m[!]\033[0m")
) )
with console.status(
f"[bold yellow]\[..][/bold yellow] [bold]{job.name}[/bold] начинаю ..."
):
os.system(cmd) 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]: 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 изменено на True (задача активна), либо установленно False
(задача не активна). (задача не активна).
""" """
if force_all:
for job in jobs:
job.active = True
return jobs
print(Panel(Text("Составляю список задач", justify="center")))
for job in jobs: for job in jobs:
answer = Prompt.ask( answer = Prompt.ask(
f"Архивируем [bold]{job.name}[/bold]?", f"Архивируем [bold]{job.name}[/bold]?",
@ -74,6 +91,7 @@ def ask_about_backups(jobs: List[Job], force_all: bool) -> List[Job]:
job.active = False job.active = False
print("[bold red]\[-] Пропуск задачи[/bold red]") print("[bold red]\[-] Пропуск задачи[/bold red]")
print(Panel(Text("Список задач составлен, начинаю бэкап", justify="center")))
return jobs return jobs
@ -109,18 +127,29 @@ if __name__ == "__main__":
help="выполнить все задачи из списка без запроса подтверждения", help="выполнить все задачи из списка без запроса подтверждения",
) )
args = parser.parse_args() args = parser.parse_args()
console = Console()
jobs = yaml_loader(os.path.abspath(args.file)) jobs = yaml_loader(os.path.abspath(args.file))
# если флаг принудительного бэкапа всего, то мы прохоидм в цикле jobs = ask_about_backups(jobs, args.forceall)
# все джобы и ставим их active в true
if not args.forceall:
ask_about_backups(jobs)
print("-----------------------")
else:
for j in jobs:
j.active = True
for j in jobs: for j in jobs:
if j.active: 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")

Loading…
Cancel
Save