From 4eb843fd8cbc0d28b59a4e86a8d06810fd33fe85 Mon Sep 17 00:00:00 2001 From: shortcutme Date: Thu, 12 Apr 2018 19:25:13 +0200 Subject: [PATCH] Delay saving users.json --- src/User/User.py | 16 +++++++++++----- src/User/UserManager.py | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/User/User.py b/src/User/User.py index f14144af..acaaf1d2 100644 --- a/src/User/User.py +++ b/src/User/User.py @@ -25,6 +25,7 @@ class User(object): self.master_address = CryptBitcoin.privatekeyToAddress(self.master_seed) self.sites = data.get("sites", {}) self.certs = data.get("certs", {}) + self.delayed_save_thread = None self.log = logging.getLogger("User:%s" % self.master_address) @@ -41,7 +42,12 @@ class User(object): user_data["sites"] = self.sites user_data["certs"] = self.certs helper.atomicWrite("%s/users.json" % config.data_dir, json.dumps(users, indent=2, sort_keys=True)) - self.log.debug("Saved in %.3fs" % (time.time()-s)) + self.log.debug("Saved in %.3fs" % (time.time() - s)) + self.delayed_save_thread = None + + def saveDelayed(self): + if not self.delayed_save_thread: + self.delayed_save_thread = gevent.spawn_later(5, self.save) def getAddressAuthIndex(self, address): return int(address.encode("hex"), 16) @@ -71,13 +77,13 @@ class User(object): def deleteSiteData(self, address): if address in self.sites: del(self.sites[address]) - self.save() + self.saveDelayed() self.log.debug("Deleted site: %s" % address) def setSettings(self, address, settings): site_data = self.getSiteData(address) site_data["settings"] = settings - self.save() + self.saveDelayed() return site_data # Get data for a new, unique site @@ -92,7 +98,7 @@ class User(object): # Save to sites self.getSiteData(site_address) self.sites[site_address]["privatekey"] = site_privatekey - self.save() + self.saveDelayed() return site_address, bip32_index, self.sites[site_address] # Get BIP32 address from site address @@ -145,7 +151,7 @@ class User(object): else: if "cert" in site_data: del site_data["cert"] - self.save() + self.saveDelayed() return site_data # Get cert for the site address diff --git a/src/User/UserManager.py b/src/User/UserManager.py index c90c7eea..e174f75e 100644 --- a/src/User/UserManager.py +++ b/src/User/UserManager.py @@ -47,7 +47,7 @@ class UserManager(object): self.log.debug("Created user: %s" % user.master_address) if user.master_address: # If successfully created self.users[user.master_address] = user - user.save() + user.saveDelayed() return user # List all users from data/users.json