Browse Source

[cache] fix

version-14
Rushabh Mehta 10 years ago
parent
commit
2a9f31f1a4
3 changed files with 18 additions and 5 deletions
  1. +1
    -1
      frappe/__init__.py
  2. +2
    -2
      frappe/modules/__init__.py
  3. +15
    -2
      frappe/utils/redis_wrapper.py

+ 1
- 1
frappe/__init__.py View File

@@ -432,7 +432,7 @@ def has_website_permission(doctype, ptype="read", doc=None, user=None, verbose=F


def is_table(doctype): def is_table(doctype):
"""Returns True if `istable` property (indicating child Table) is set for given 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") return db.sql_list("select name from tabDocType where ifnull(istable,0)=1")


tables = cache().get_value("is_table", get_tables) tables = cache().get_value("is_table", get_tables)


+ 2
- 2
frappe/modules/__init__.py View File

@@ -46,9 +46,9 @@ def export_doc(doctype, name, module=None):


def get_doctype_module(doctype): def get_doctype_module(doctype):
"""Returns **Module Def** name of given 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")) 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 = {} doctype_python_modules = {}
def load_doctype_module(doctype, module=None, prefix=""): def load_doctype_module(doctype, module=None, prefix=""):


+ 15
- 2
frappe/utils/redis_wrapper.py View File

@@ -2,7 +2,8 @@
# MIT License. See license.txt # MIT License. See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


import redis, frappe, pickle, re
import redis, frappe, re
import cPickle as pickle
from frappe.utils import cstr from frappe.utils import cstr


class RedisWrapper(redis.Redis): class RedisWrapper(redis.Redis):
@@ -92,16 +93,28 @@ class RedisWrapper(redis.Redis):
del frappe.local.cache[key] del frappe.local.cache[key]


def hset(self, name, key, value): 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)) super(redis.Redis, self).hset(self.make_key(name), key, pickle.dumps(value))


def hget(self, name, key, generator=None): 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) value = super(redis.Redis, self).hget(self.make_key(name), key)
if value: if value:
value = pickle.loads(value) value = pickle.loads(value)
elif generator: elif generator:
value = generator
value = generator()
self.hset(name, key, value) self.hset(name, key, value)
return value return value


def hdel(self, name, keys): 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) 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))

Loading…
Cancel
Save