Add button to remove all datasync settings from DB

seems useful for someone testing, as prep to make the switch
This commit is contained in:
Lance Edgar 2021-11-29 19:28:07 -06:00
parent 8aff5d519d
commit 4229798c7b
2 changed files with 68 additions and 30 deletions

View file

@ -30,11 +30,9 @@ import getpass
import subprocess
import logging
import sqlalchemy as sa
from rattail.db import model
from rattail.datasync.config import load_profiles
from rattail.datasync.util import get_lastrun
from rattail.datasync.util import get_lastrun, purge_datasync_settings
from tailbone.views import MasterView
from tailbone.util import csrf_token
@ -100,11 +98,17 @@ class DataSyncChangeView(MasterView):
View for configuring the DataSync daemon.
"""
if self.request.method == 'POST':
data = self.request.json_body
self.save_settings(data)
self.request.session.flash("Settings have been saved. "
"You should probably restart DataSync now.")
return self.json_response({'success': True})
# if self.request.is_xhr and not self.request.POST:
if self.request.POST.get('purge_settings'):
self.delete_settings()
self.request.session.flash("Settings have been removed.")
return self.redirect(self.request.current_route_url())
else:
data = self.request.json_body
self.save_settings(data)
self.request.session.flash("Settings have been saved. "
"You should probably restart DataSync now.")
return self.json_response({'success': True})
profiles = load_profiles(self.rattail_config,
include_disabled=True,
@ -221,28 +225,7 @@ class DataSyncChangeView(MasterView):
value=setting['value']))
def delete_settings(self):
model = self.model
to_delete = [
'rattail.datasync.watch',
'tailbone.datasync.restart',
]
for setting in to_delete:
setting = self.Session.query(model.Setting).get(setting)
if setting:
self.Session.delete(setting)
self.Session.query(model.Setting)\
.filter(sa.or_(
model.Setting.name.like('rattail.datasync.%.watcher'),
model.Setting.name.like('rattail.datasync.%.watcher.db'),
model.Setting.name.like('rattail.datasync.%.watcher.delay'),
model.Setting.name.like('rattail.datasync.%.watcher.retry_attempts'),
model.Setting.name.like('rattail.datasync.%.watcher.retry_delay'),
model.Setting.name.like('rattail.datasync.%.consumers'),
model.Setting.name.like('rattail.datasync.%.consumers.runas'),
model.Setting.name.like('rattail.datasync.%.consumer.%')))\
.delete(synchronize_session=False)
purge_datasync_settings(self.rattail_config, self.Session())
@classmethod
def defaults(cls, config):