maloja/maloja/proccontrol/tasks/backup.py

52 lines
1.3 KiB
Python
Raw Normal View History

2019-12-14 15:43:01 +03:00
import tarfile
2022-04-04 19:30:51 +03:00
import time
2019-12-14 15:43:01 +03:00
import glob
import os
from ...pkg_global.conf import dir_settings
from pathlib import PurePath
2019-12-14 15:43:01 +03:00
2020-06-20 19:15:02 +03:00
from doreah.logging import log
2022-03-27 06:08:17 +03:00
from doreah.io import col
2020-06-20 19:15:02 +03:00
2019-12-14 15:43:01 +03:00
2022-03-27 06:08:17 +03:00
basic_files = [
('config', ['rules/*.tsv','settings.ini','apikeys.yml','custom_css/*.css']),
('state', ['auth/auth.ddb','malojadb.sqlite'])
]
expanded_files = [
('state', ['images'])
]
2019-12-14 15:43:01 +03:00
2022-03-27 06:08:17 +03:00
def backup(targetfolder=None,include_images=False):
2019-12-14 15:43:01 +03:00
2022-03-27 06:08:17 +03:00
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))
2019-12-14 15:43:01 +03:00
2020-12-25 19:11:09 +03:00
log("Creating backup...")
2020-06-20 19:15:02 +03:00
2020-12-25 18:52:25 +03:00
2022-04-04 19:30:51 +03:00
timestr = time.strftime("%Y_%m_%d_%H_%M_%S")
2022-03-27 06:08:17 +03:00
filename = f"maloja_backup_{timestr}.tar.gz"
2022-04-04 19:30:51 +03:00
outputfile = os.path.join(targetfolder,filename)
assert not os.path.exists(outputfile)
with tarfile.open(name=outputfile,mode="x:gz") as archive:
2022-03-27 06:08:17 +03:00
for category, filelist in real_files.items():
for f in filelist:
2020-12-25 18:52:25 +03:00
p = PurePath(f)
2022-03-27 06:08:17 +03:00
r = p.relative_to(dir_settings[category])
archive.add(f,arcname=os.path.join(category,r))
2022-04-04 19:30:51 +03:00
log("Backup created: " + col['yellow'](outputfile))
return outputfile