diff --git a/tests/admin_pages/test_settings.py b/tests/admin_pages/test_settings.py index 9b4651da0..b1890792c 100644 --- a/tests/admin_pages/test_settings.py +++ b/tests/admin_pages/test_settings.py @@ -383,6 +383,9 @@ def test_settings_export_import(pub): resp = resp.form.submit('submit') 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): user = create_superuser(pub) diff --git a/wcs/publisher.py b/wcs/publisher.py index e4e45d3c4..e9b66618b 100644 --- a/wcs/publisher.py +++ b/wcs/publisher.py @@ -19,12 +19,14 @@ import json import os import pickle import re +import shutil import sys import traceback import zipfile from contextlib import ExitStack, contextmanager from django.utils.encoding import force_str +from django.utils.timezone import localtime from . import custom_views, data_sources, formdef, sessions from .admin import RootDirectory as AdminRootDirectory @@ -282,6 +284,12 @@ class WcsPublisher(QommonPublisher): rv[key] = value 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: for f in z.namelist(): if f in ('.indexes', '.max_id'):