From 2a9f31f1a4247a1a329cadfce1786d8de1ac98af Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 8 May 2015 13:18:39 +0530 Subject: [PATCH] [cache] fix --- frappe/__init__.py | 2 +- frappe/modules/__init__.py | 4 ++-- frappe/utils/redis_wrapper.py | 17 +++++++++++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 38c2113884..80608b580a 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -432,7 +432,7 @@ def has_website_permission(doctype, ptype="read", doc=None, user=None, verbose=F def is_table(doctype): """Returns True if `istable` property (indicating child Table) is set for given DocType.""" - def get_tables(doctype): + def get_tables(): return db.sql_list("select name from tabDocType where ifnull(istable,0)=1") tables = cache().get_value("is_table", get_tables) diff --git a/frappe/modules/__init__.py b/frappe/modules/__init__.py index 17dbc0487c..cffdf11837 100644 --- a/frappe/modules/__init__.py +++ b/frappe/modules/__init__.py @@ -46,9 +46,9 @@ def export_doc(doctype, name, module=None): def get_doctype_module(doctype): """Returns **Module Def** name of given doctype.""" - def make_modules_dict(doctype): + def make_modules_dict(): return dict(frappe.db.sql("select name, module from tabDocType")) - frappe.cache().get_value("doctype_modules", make_modules_dict)[doctype] + return frappe.cache().get_value("doctype_modules", make_modules_dict)[doctype] doctype_python_modules = {} def load_doctype_module(doctype, module=None, prefix=""): diff --git a/frappe/utils/redis_wrapper.py b/frappe/utils/redis_wrapper.py index 7fadd9d751..49087f96bc 100644 --- a/frappe/utils/redis_wrapper.py +++ b/frappe/utils/redis_wrapper.py @@ -2,7 +2,8 @@ # MIT License. See license.txt from __future__ import unicode_literals -import redis, frappe, pickle, re +import redis, frappe, re +import cPickle as pickle from frappe.utils import cstr class RedisWrapper(redis.Redis): @@ -92,16 +93,28 @@ class RedisWrapper(redis.Redis): del frappe.local.cache[key] def hset(self, name, key, value): + if not name in frappe.local.cache: + frappe.local.cache[name] = {} + frappe.local.cache[name][key] = value super(redis.Redis, self).hset(self.make_key(name), key, pickle.dumps(value)) def hget(self, name, key, generator=None): + if not name in frappe.local.cache: + frappe.local.cache[name] = {} + if key in frappe.local.cache[name]: + return frappe.local.cache[name][key] value = super(redis.Redis, self).hget(self.make_key(name), key) if value: value = pickle.loads(value) elif generator: - value = generator + value = generator() self.hset(name, key, value) return value def hdel(self, name, keys): + if name in frappe.local.cache: + del frappe.local.cache[name] return super(redis.Redis, self).hget(self.make_key(name), keys) + + def hkeys(self, name): + return super(redis.Redis, self).hkeys(self.make_key(name))