misc: create backup of configuration file before import (#24927) #528

Merged
fpeters merged 1 commits from wip/24927-backup-config into main 2023-08-02 10:29:55 +02:00
2 changed files with 11 additions and 0 deletions

View File

@ -383,6 +383,9 @@ def test_settings_export_import(pub):
resp = resp.form.submit('submit') resp = resp.form.submit('submit')
assert 'Unknown referenced objects [Unknown datasources: foobar]' in resp assert 'Unknown referenced objects [Unknown datasources: foobar]' in resp
# check a backup of settings has been created
assert [x for x in os.listdir(pub.app_dir) if x.startswith('config.pck.backup-')]
def test_settings_user(pub): def test_settings_user(pub):
user = create_superuser(pub) user = create_superuser(pub)

View File

@ -19,12 +19,14 @@ import json
import os import os
import pickle import pickle
import re import re
import shutil
import sys import sys
import traceback import traceback
import zipfile import zipfile
from contextlib import ExitStack, contextmanager from contextlib import ExitStack, contextmanager
from django.utils.encoding import force_str from django.utils.encoding import force_str
from django.utils.timezone import localtime
from . import custom_views, data_sources, formdef, sessions from . import custom_views, data_sources, formdef, sessions
from .admin import RootDirectory as AdminRootDirectory from .admin import RootDirectory as AdminRootDirectory
@ -282,6 +284,12 @@ class WcsPublisher(QommonPublisher):
rv[key] = value rv[key] = value
return rv return rv
now = localtime()
for filename in ('config.pck', 'config.json'):
filepath = os.path.join(self.app_dir, filename)
if os.path.exists(filepath):
shutil.copyfile(filepath, filepath + '.backup-%s' % now.strftime('%Y%m%d'))
with zipfile.ZipFile(fd) as z: with zipfile.ZipFile(fd) as z:
for f in z.namelist(): for f in z.namelist():
if f in ('.indexes', '.max_id'): if f in ('.indexes', '.max_id'):