@@ -135,6 +135,8 @@ def init(site, sites_path=None, new_site=False): | |||||
local.jenv = None | local.jenv = None | ||||
local.jloader =None | local.jloader =None | ||||
local.cache = {} | local.cache = {} | ||||
local.form_dict = _dict() | |||||
local.session = _dict() | |||||
setup_module_map() | setup_module_map() | ||||
@@ -149,8 +151,6 @@ def connect(site=None, db_name=None): | |||||
if site: | if site: | ||||
init(site) | init(site) | ||||
local.db = Database(user=db_name or local.conf.db_name) | local.db = Database(user=db_name or local.conf.db_name) | ||||
local.form_dict = _dict() | |||||
local.session = _dict() | |||||
set_user("Administrator") | set_user("Administrator") | ||||
def get_site_config(sites_path=None, site_path=None): | def get_site_config(sites_path=None, site_path=None): | ||||
@@ -94,7 +94,7 @@ def get_dict(fortype, name=None): | |||||
fortype = fortype.lower() | fortype = fortype.lower() | ||||
cache = frappe.cache() | cache = frappe.cache() | ||||
asset_key = fortype + ":" + (name or "-") | asset_key = fortype + ":" + (name or "-") | ||||
translation_assets = cache.hget("translation_assets", frappe.local.lang) or {} | |||||
translation_assets = cache.hget("translation_assets", frappe.local.lang, shared=True) or {} | |||||
if not asset_key in translation_assets: | if not asset_key in translation_assets: | ||||
if fortype=="doctype": | if fortype=="doctype": | ||||
@@ -123,7 +123,7 @@ def get_dict(fortype, name=None): | |||||
translation_assets[asset_key] = message_dict | translation_assets[asset_key] = message_dict | ||||
cache.hset("translation_assets", frappe.local.lang, translation_assets) | |||||
cache.hset("translation_assets", frappe.local.lang, translation_assets, shared=True) | |||||
return translation_assets[asset_key] | return translation_assets[asset_key] | ||||
@@ -203,7 +203,7 @@ def load_lang(lang, apps=None): | |||||
if lang=='en': | if lang=='en': | ||||
return {} | return {} | ||||
out = frappe.cache().hget("lang_full_dict", lang) | |||||
out = frappe.cache().hget("lang_full_dict", lang, shared=True) | |||||
if not out: | if not out: | ||||
out = {} | out = {} | ||||
for app in (apps or frappe.get_all_apps(True)): | for app in (apps or frappe.get_all_apps(True)): | ||||
@@ -216,7 +216,7 @@ def load_lang(lang, apps=None): | |||||
parent_out.update(out) | parent_out.update(out) | ||||
out = parent_out | out = parent_out | ||||
frappe.cache().hset("lang_full_dict", lang, out) | |||||
frappe.cache().hset("lang_full_dict", lang, out, shared=True) | |||||
return out or {} | return out or {} | ||||
@@ -260,8 +260,8 @@ def clear_cache(): | |||||
# clear translations saved in boot cache | # clear translations saved in boot cache | ||||
cache.delete_key("bootinfo") | cache.delete_key("bootinfo") | ||||
cache.delete_key("lang_full_dict") | |||||
cache.delete_key("translation_assets") | |||||
cache.delete_key("lang_full_dict", shared=True) | |||||
cache.delete_key("translation_assets", shared=True) | |||||
cache.delete_key("lang_user_translations") | cache.delete_key("lang_user_translations") | ||||
def get_messages_for_app(app): | def get_messages_for_app(app): | ||||
@@ -8,7 +8,9 @@ from frappe.utils import cstr | |||||
class RedisWrapper(redis.Redis): | class RedisWrapper(redis.Redis): | ||||
"""Redis client that will automatically prefix conf.db_name""" | """Redis client that will automatically prefix conf.db_name""" | ||||
def make_key(self, key, user=None): | |||||
def make_key(self, key, user=None, shared=False): | |||||
if shared: | |||||
return key | |||||
if user: | if user: | ||||
if user == True: | if user == True: | ||||
user = frappe.session.user | user = frappe.session.user | ||||
@@ -129,12 +131,13 @@ class RedisWrapper(redis.Redis): | |||||
def llen(self, key): | def llen(self, key): | ||||
return super(redis.Redis, self).llen(self.make_key(key)) | return super(redis.Redis, self).llen(self.make_key(key)) | ||||
def hset(self, name, key, value): | |||||
def hset(self, name, key, value, shared=False): | |||||
if not name in frappe.local.cache: | if not name in frappe.local.cache: | ||||
frappe.local.cache[name] = {} | frappe.local.cache[name] = {} | ||||
frappe.local.cache[name][key] = value | frappe.local.cache[name][key] = value | ||||
try: | try: | ||||
super(redis.Redis, self).hset(self.make_key(name), key, pickle.dumps(value)) | |||||
super(redis.Redis, self).hset(self.make_key(name, shared=shared), | |||||
key, pickle.dumps(value)) | |||||
except redis.exceptions.ConnectionError: | except redis.exceptions.ConnectionError: | ||||
pass | pass | ||||
@@ -142,7 +145,7 @@ class RedisWrapper(redis.Redis): | |||||
return {key: pickle.loads(value) for key, value in | return {key: pickle.loads(value) for key, value in | ||||
super(redis.Redis, self).hgetall(self.make_key(name)).iteritems()} | super(redis.Redis, self).hgetall(self.make_key(name)).iteritems()} | ||||
def hget(self, name, key, generator=None): | |||||
def hget(self, name, key, generator=None, shared=False): | |||||
if not name in frappe.local.cache: | if not name in frappe.local.cache: | ||||
frappe.local.cache[name] = {} | frappe.local.cache[name] = {} | ||||
if key in frappe.local.cache[name]: | if key in frappe.local.cache[name]: | ||||
@@ -150,7 +153,7 @@ class RedisWrapper(redis.Redis): | |||||
value = None | value = None | ||||
try: | try: | ||||
value = super(redis.Redis, self).hget(self.make_key(name), key) | |||||
value = super(redis.Redis, self).hget(self.make_key(name, shared=shared), key) | |||||
except redis.exceptions.ConnectionError: | except redis.exceptions.ConnectionError: | ||||
pass | pass | ||||
@@ -165,12 +168,12 @@ class RedisWrapper(redis.Redis): | |||||
pass | pass | ||||
return value | return value | ||||
def hdel(self, name, key): | |||||
def hdel(self, name, key, shared=False): | |||||
if name in frappe.local.cache: | if name in frappe.local.cache: | ||||
if key in frappe.local.cache[name]: | if key in frappe.local.cache[name]: | ||||
del frappe.local.cache[name][key] | del frappe.local.cache[name][key] | ||||
try: | try: | ||||
super(redis.Redis, self).hdel(self.make_key(name), key) | |||||
super(redis.Redis, self).hdel(self.make_key(name, shared=shared), key) | |||||
except redis.exceptions.ConnectionError: | except redis.exceptions.ConnectionError: | ||||
pass | pass | ||||