Files
bearhub/bauh/view/core/timeshift.py

39 lines
1.3 KiB
Python

import re
import shutil
from typing import Optional, Generator
from bauh import __app_name__
from bauh.commons.system import SimpleProcess, new_root_subprocess
RE_SNAPSHOTS = re.compile(r'\d+\s+>\s+([\w\-_]+)\s+.+<{}>'.format(__app_name__))
def is_available() -> bool:
return bool(shutil.which('timeshift'))
def delete_all_snapshots(root_password: Optional[str]) -> SimpleProcess:
return SimpleProcess(['timeshift', '--delete-all', '--scripted'], root_password=root_password)
def delete(snapshot_name: str, root_password: Optional[str]) -> SimpleProcess:
return SimpleProcess(('timeshift', '--delete', '--snapshot', snapshot_name),
shell=True, root_password=root_password)
def create_snapshot(root_password: Optional[str], mode: str) -> SimpleProcess:
return SimpleProcess(('timeshift', '--create', '--scripted', f'--{mode}', '--comments', f'<{__app_name__}>'),
root_password=root_password)
def read_created_snapshots(root_password: Optional[str]) -> Generator[str, None, None]:
proc = new_root_subprocess(cmd=('timeshift', '--list'), root_password=root_password, shell=True)
proc.wait()
if proc.returncode == 0:
output = '\n'.join((o.decode() for o in proc.stdout))
if output:
for name in RE_SNAPSHOTS.findall(output):
yield name