mirror of https://github.com/krateng/maloja.git
52 lines
1.3 KiB
Python
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
|