Only save sites.json if fully loaded to avoid data loss

This commit is contained in:
shortcutme 2016-11-07 22:40:12 +01:00
parent 8f3dfd7435
commit 0418a3e6de

View file

@ -19,12 +19,14 @@ class SiteManager(object):
self.log = logging.getLogger("SiteManager")
self.log.debug("SiteManager created.")
self.sites = None
self.loaded = False
gevent.spawn(self.saveTimer)
atexit.register(self.save)
# Load all sites from data/sites.json
def load(self, cleanup=True):
self.log.debug("Loading sites...")
self.loaded = False
from Site import Site
if self.sites is None:
self.sites = {}
@ -54,10 +56,15 @@ class SiteManager(object):
if added:
self.log.debug("SiteManager added %s sites" % added)
self.loaded = True
def save(self):
if not self.sites:
self.log.debug("Save: No sites found")
self.log.debug("Save skipped: No sites found")
return
if not self.loaded:
self.log.debug("Save skipped: Not loaded")
return
s = time.time()
data = {}
# Generate data file
@ -68,7 +75,10 @@ class SiteManager(object):
data[address]["cache"]["bad_files"] = site.bad_files
data[address]["cache"]["hashfield"] = site.content_manager.hashfield.tostring().encode("base64")
if data:
helper.atomicWrite("%s/sites.json" % config.data_dir, json.dumps(data, indent=2, sort_keys=True))
else:
self.log.debug("Save error: No data")
# Remove cache from site settings
for address, site in self.list().iteritems():
site.settings["cache"] = {}