maloja/maloja/proccontrol/tasks/backup.py

52 lines
1.3 KiB
Python

import tarfile
import time
import glob
import os
from ...pkg_global.conf import dir_settings
from pathlib import PurePath
from doreah.logging import log
from doreah.io import col
basic_files = [
('config', ['rules/*.tsv','settings.ini','apikeys.yml','custom_css/*.css']),
('state', ['auth/auth.ddb','malojadb.sqlite'])
]
expanded_files = [
('state', ['images'])
]
def backup(targetfolder=None,include_images=False):
if targetfolder is None:
targetfolder = os.getcwd()
if include_images:
file_patterns = basic_files + expanded_files
else:
file_patterns = basic_files
real_files = {}
for category,patterns in file_patterns:
real_files.setdefault(category,[])
for pattern in patterns:
real_files[category] += glob.glob(os.path.join(dir_settings[category],pattern))
log("Creating backup...")
timestr = time.strftime("%Y_%m_%d_%H_%M_%S")
filename = f"maloja_backup_{timestr}.tar.gz"
outputfile = os.path.join(targetfolder,filename)
assert not os.path.exists(outputfile)
with tarfile.open(name=outputfile,mode="x:gz") as archive:
for category, filelist in real_files.items():
for f in filelist:
p = PurePath(f)
r = p.relative_to(dir_settings[category])
archive.add(f,arcname=os.path.join(category,r))
log("Backup created: " + col['yellow'](outputfile))
return outputfile