@@ -31,38 +31,9 @@ class MClient(memcache.Client): | |||||
def set_value(self, key, val): | def set_value(self, key, val): | ||||
self.set(self.n(key), val) | self.set(self.n(key), val) | ||||
self.add_to_key_list(key) | |||||
def get_value(self, key): | def get_value(self, key): | ||||
return self.get(self.n(key)) | return self.get(self.n(key)) | ||||
def delete_value(self, key): | def delete_value(self, key): | ||||
self.delete(self.n(key)) | |||||
def add_to_key_list(self, key): | |||||
key_list = self.get_value('key_list') or [] | |||||
if key not in key_list: | |||||
key_list.append(key) | |||||
self.set(self.n("key_list"), key_list) | |||||
def delete_keys(self, startswith=None): | |||||
"""flush keys from known key_list""" | |||||
if not startswith: | |||||
for key in self.get_value('key_list'): | |||||
self.delete_value(key) | |||||
self.delete_value('key_list') | |||||
else: | |||||
deleted = [] | |||||
keys = self.get_value('key_list') or [] | |||||
for key in keys: | |||||
if key.startswith(startswith): | |||||
self.delete(self.n(key)) | |||||
deleted.append(key) | |||||
for d in deleted: | |||||
keys.remove(d) | |||||
self.set_value("key_list", keys) | |||||
# in any case, delete it explicitly | |||||
self.delete(self.n(startswith)) | |||||
self.delete(self.n(key)) |
@@ -36,22 +36,25 @@ import webnotes.model.doctype | |||||
@webnotes.whitelist() | @webnotes.whitelist() | ||||
def clear(user=None): | def clear(user=None): | ||||
"""clear all cache""" | """clear all cache""" | ||||
clear_cache(user) | |||||
clear_cache(webnotes.session.user) | |||||
webnotes.response['message'] = "Cache Cleared" | webnotes.response['message'] = "Cache Cleared" | ||||
def clear_cache(user=None): | def clear_cache(user=None): | ||||
"""clear cache""" | """clear cache""" | ||||
webnotes.cache().delete_keys("bootinfo:") | |||||
cache = webnotes.cache() | |||||
# clear doctype cache | |||||
webnotes.model.doctype.clear_cache() | webnotes.model.doctype.clear_cache() | ||||
webnotes.cache().delete_keys("session:") | |||||
if webnotes.session: | |||||
webnotes.cache().delete_keys("bootinfo:" + webnotes.session.user) | |||||
if webnotes.session.sid: | |||||
webnotes.cache().delete_keys("session:" + webnotes.session.sid) | |||||
if user: | |||||
cache.delete_value("bootinfo:" + user) | |||||
if webnotes.session and webnotes.session.sid: | |||||
cache.delete_value("session:" + webnotes.session.sid) | |||||
else: | |||||
for sess in webnotes.conn.sql("""select user, sid from tabSessions""", as_dict=1): | |||||
cache.delete_value("sesssion:" + sess.sid) | |||||
cache.delete_value("bootinfo:" + sess.user) | |||||
def clear_sessions(user=None, keep_current=False): | def clear_sessions(user=None, keep_current=False): | ||||
if not user: | if not user: | ||||